Dremel学习总结2


一、Dremel数据重组

1.什么是数据重组

数据库使用较长一段时间后,因为一些增,删,改等操作,使得数据的分布索引及相关数据会变得比较凌乱,从而影响数据库的效率。 数据库重组即是将数据库的相关信息重新组织。

2.Dremel的数据重组

将查询设计的列取出,按照原始记录的顺序组装起来,以实现高效地从列式存储数据中组装出记录,对数据处理工具来说非常重要。

核心思想:使用有限状态机(finite state machine, FSM) 读取每个字段的值和level,顺序地追加到输出流中。FSM为每种字段都关联一个field reader。

状态转变:FSM 为每种字段都关联一个field reader。通过重复深度(repetition level)来标记。一旦reader抓取到值,就去看下一值的重复深度来决定状态如何变化、跳转到哪个reader。

实现原理

1.通过DocId 和 Name.Language.Country 这两个字段的重建

在这里插入图片描述
步骤如下:
1.FSM委托Reader1读取DocId第一行,通过r=0重建记录。
2. 检查DocId第二行,发现r=0,则Reader1停在当前“游标”位置。 FSM将状态变化到Name.Language.Country。
3. FSM委托Reader2读取Name.Language.Country第一行,通过r=0 重建记录。
4. FSM委托Reader2读取Name.Language.Country第二行。通过 r=2(说明Language字段重复,即Language有多个)重建记录。
5. FSM委托Reader2读取Name.Language.Country第三行。通过r=1 和d=1(说明只有Name字段不是NULL)重建记录。
6. 第四行r=1.d=3重建记录。
7. 检查到第五行,发现r=0,Reader2停在当前位置。FSM再次发生状 态变化,继续重建文档2的记录。
8. FSM委托Reader1继续读取DocId第二行(之前Reader1就停在这里 了)。
9. DocId中没有数据了,FSM状态变化,Reader2继续读取Country的 最后一行数据,重建出记录。

2.R1数据重组过程

在这里插入图片描述
特点:
1.r=0,则说明下一行与当前行所表示的字段一定不在同一路径,否则必然会在某一Level上有共同的字段(路径的部分重叠)。
2.因为Name.Language.Code是required 不是repeated,读取后不管下一行的r值是多少都要去读Name.Language.Country。同理Name.Language.Country也是读完不管怎样都跳到下一字段。
3.中间部分的NULL能保持结构无损,而后面部分的NULL能提示文档是否结束。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值