Google Dremel 理解
在阅读参考2中的翻译的时候,对论文中说的如何把嵌套结构转化成在Dremel实际的存储的格式有些许疑惑,在看了参考1后才恍然大悟,于是要在这里把文献中的几个图是怎么生成的具体过程做一个详细操作
在这里,首先明确定义:
r:Repetition Level 是记录该列的值是在哪一个级别上重复的,对于非重复的列,可以忽略
d: Definition Level 是定义的深度,用来记录该列是否是”想象”出来的。所以对于非NULL的记录,是没有意义的,其值必然为相同。对于那种required的列,在计算深度的时候可以在路径上忽略此列
在Document的Schema中,有6个存储数据的字段, 跟别是 docid, url,forward, backword, code, country
Docid, 因为是根,所以 r 和 d 都是0
Name.url(它的路径是 name.url 其中name是repeated的,url是optional的,在路径上只考虑name)
在r1中
对于http://A,它首次出现,在它之前路径Name.url没有出现,所以r值是0,而http://A 不是 NULL, 是真实存在的,所以d值是2
对于http://B,在其路径上Name重复出现了,而且url非repeated,所以这里要计算Name的级别,相对于根,Name的等级是1,r值是1, 非NULL, d值还是2
对于第三个Name,url是NULL,此时在之前已经出现,r值是1, 是NULL,考虑url非required,是我们想象出来的数据,所以d值是1
同理,在r2中
对于http://C,路径 Name.url没出现过,r值是0,同上,d值是2
Links.Forward(它的路径是 Links.Forward, 只有forward是repeated的,所以这里 r值要么是0, 要么是1)
在r1中
对于20, 路径Links.Forward没出现过,r值是0,links是optinal,非required,所以d是2
对于40,路径Links.Forward出现了,只有forward是repeated的,所以r=1, d=2
。。。。
。。。。未完
参考:
1.Google Dremel 原理 - 如何能3秒分析1PB http://www.open-open.com/lib/view/open1351132589539.html
2. 经典论文翻译导读之《Dremel: Interactive Analysis of WebScale Datasets》 http://www.importnew.com/?s=dremel