一种更高查询性能的列存储方式MaxMinT 第一部分
2017-08-12 20:33
302 查看
简介
本文描述了一种列存储方式和对应的查询方法,这种存储方式具有更好的查询性能和更小的存储空间。
通常在OLAP数据查询时,需要进行and处理,例如你需要获取 year = 2017 and customer = 13 的数据,这在列存储中实际是对值 year的2017这个列和 customer的13列进行and操作,而这些列一般都使用位图的方式存储。
市面上有很多位图的存储方式,比如WAH, EWAH, Concise和Roaring Bitmap。他们有各自的优缺点,今天我设计的就是一个新的存储方法,我给他起了一个名字,MaxMinT。
OLTP数据也是如此,只不过OLTP通常使用行存储而不是列存储,因此不适合此算法。
下图展示了这两个列的数据抽象概念,空白的区域表示全部都是0的数据,而阴影的部分表示具有比较密集的有效数据的区域。当进行and 操作时,结果就是红色原因部分的区域,即共同拥有的部分。
为找到这些红色区域,我们首先从开头的位置创建一条线,从程序上来说就是创建一个游标,初始化为0。
检测所有参与and运算的列,在这个案例中只有两个列year.2017和customer.13,顺序扫描这些列,确定列是否处于空白区域,如果是,那么获得到此空白区域的最下端位置nextPos,如果阴影区域,不用计算下端位置。
如果至少有一列处于空白区域,那么获取到nextPos的最大值,将游标移动到此位置,表示这些位置没有任何输出结果,如下图所示。
现在,继续重复刚才的扫描,由于当前位置没有任何一个列处于空白区域,那么就获取这些列的阴影最下端位置,现在我们获取这些阴影区域的最小值,将游标移动到此位置,那么这个区域就是有效的区域,作为and的输出结果,如下图所示。
重复此操作,直到文件的末尾。
我将在第二章介绍数据的存储方式。
本文描述了一种列存储方式和对应的查询方法,这种存储方式具有更好的查询性能和更小的存储空间。
And查询
本文先用直观的图形方式展示and查询时的方式,这也是算法要解决的问题核心。通常在OLAP数据查询时,需要进行and处理,例如你需要获取 year = 2017 and customer = 13 的数据,这在列存储中实际是对值 year的2017这个列和 customer的13列进行and操作,而这些列一般都使用位图的方式存储。
市面上有很多位图的存储方式,比如WAH, EWAH, Concise和Roaring Bitmap。他们有各自的优缺点,今天我设计的就是一个新的存储方法,我给他起了一个名字,MaxMinT。
OLTP数据也是如此,只不过OLTP通常使用行存储而不是列存储,因此不适合此算法。
下图展示了这两个列的数据抽象概念,空白的区域表示全部都是0的数据,而阴影的部分表示具有比较密集的有效数据的区域。当进行and 操作时,结果就是红色原因部分的区域,即共同拥有的部分。
为找到这些红色区域,我们首先从开头的位置创建一条线,从程序上来说就是创建一个游标,初始化为0。
检测所有参与and运算的列,在这个案例中只有两个列year.2017和customer.13,顺序扫描这些列,确定列是否处于空白区域,如果是,那么获得到此空白区域的最下端位置nextPos,如果阴影区域,不用计算下端位置。
如果至少有一列处于空白区域,那么获取到nextPos的最大值,将游标移动到此位置,表示这些位置没有任何输出结果,如下图所示。
现在,继续重复刚才的扫描,由于当前位置没有任何一个列处于空白区域,那么就获取这些列的阴影最下端位置,现在我们获取这些阴影区域的最小值,将游标移动到此位置,那么这个区域就是有效的区域,作为and的输出结果,如下图所示。
重复此操作,直到文件的末尾。
我将在第二章介绍数据的存储方式。
相关文章推荐
- 一种key-value类型存储的多键值查询方式
- 多对多查询方式的一种写法
- Zabbix监控nginx性能的另外一种方式
- 【转】建立一个更高级别的查询 API:正确使用Django ORM 的方式
- SQL 在查询中插入行号--自定义分页的另外一种实现方式
- Criteria .一种比hql更面向对象的查询方式(资料整理)
- iOS切圆角的方式 第一种方法:通过设置layer的属性 最简单的一种,但是很影响性能,一般在正常的开发中使用很少. UIImageView *imageView = [[UIImag
- 第92课作业,通过SerDes的方式对一下数据进行Hive的存储和查询操作
- Criteria .一种比hql更面向对象的查询方式(资料整理)
- 【学习笔记】查询性能优化:重构查询方式
- 在使用 ST_Geometry 空间索引时优化 Oracle 查询性能和存储
- webStorage是html5中用于本地化存储的一种方式
- 使用EF来进行查询的一种方式
- 利用存储过程实现交叉表格式数据查询的一种通用方法
- CheckBoxPreference数据存储和共享的一种方式
- 在使用 ST_Geometry 空间索引时优化 Oracle 查询性能和存储
- UTF8是将Unicode的规定转化为比较省字节的一种存储和传送方式
- Sql语句与存储过程查询数据的性能测试实现代码
- 在MongoDB中一起使用$or和sort()时,查询性能差的一种解决方案
- SQL存储过程事务和优化方法(包括查询方式语句结合)