列式数据库中的几种索引

数据仓库主要用来进行OLAP任务,区别于传统的OLTP数据库,数据仓库对数据吞吐量的要求更高.
现在很多数据仓库都是列式数据库,比如infobright,Sybase IQ等.
前一段时间进行了一下对这些列式数据库的研究,发现了它们很多不同于传统行式数据库的特点.下面简单谈一下这些列式数据库中使用的索引.
1 块级粗粒度索引
顾名思义,就是把数据分块,对块建立索引而不是对条目建立.块级索引一般都是粗粒度的.下图就是infobright的块级索引示意图.

[img]http://dl2.iteye.com/upload/attachment/0104/5082/9dbae1d4-1c08-3e11-adc6-8cc305b703e5.png[/img]

可以看出,它每个数据块的块索引记录该块数据的最大值和最小值,这样查询时,根据条件,就可以判断符合条件的数据是否命中该数据块,而且,如果进行max,sum等聚合操作,可以直接从块索引读取数据而不用读取块内数据.
无独有偶,hive的ORC file也采用了相似的存储格式

[img]http://dl2.iteye.com/upload/attachment/0104/5084/fa692ac1-a3a3-3a17-9ef7-24d6b52d673b.png[/img]

2 reduced B+树
B+树大家都很熟悉,但是用在OLTP数据库中的B+树,因为数据需要频繁更新插入,在B+树数据块中往往需要留有冗余空间,用来防止B+树的节点空间不足导致B+树的分裂.而列式数据库因为一般都是批量导入数据,数据插入更新操作少,所以可以在导入数据时用自底向上的方法创建B+树,同时可以缩小B+树数据块中的冗余空间,使得B+树更加紧凑.
3 位图索引
位图索引一般建立在列的cardinality比较低的情况下.比如性别属性只有男和女,那么这个列的cardinality就是2.这样的列适合用来建立位图索引

[img]http://dl2.iteye.com/upload/attachment/0104/5086/15e85675-7659-305d-8ea3-8d482d8108b8.png[/img]

4 sybase的一种位图索引
从上面可以看出,位图索引一般用来存储cardinality比较小的数据,而且往往不能进行范围查找,比如大于小于之类.不过sybase有一项专利,用位向量存储索引,仍然可以支持大于运算符

[img]http://dl2.iteye.com/upload/attachment/0104/6119/ee7d0550-9dc1-39d2-8b24-550d73e9b87b.png[/img]

有兴趣的同学可以读一下这篇专利[url=http://www.google.com/patents/US5649181]Method and apparatus for indexing database columns with bit vectors[/url],把它的方法告诉大家
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值