• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 15, comments - 10, trackbacks - 0, articles - 0

            Dremel存儲格式解析

            Posted on 2013-08-14 23:17 whspecial 閱讀(1882) 評論(1)  編輯 收藏 引用 所屬分類: hadoop

                Dremel是google推出的又一神器,paper中宣稱能夠在3s內分析1PB的數據,主要是面向交互式查詢。這篇paper對嵌套類型的存儲方式方面,思維確實有些跳躍,這篇文章主要講講這個,一方面是方便后來者理解,另一方面是讓自己也整理下思路。

                首先Dremel使用的是列存模型,對于基本類型列存較容易做到;但是對于嵌套類型,Dremel也能做到將其拆解成基本類型并進行列存,這是值得我們研究的。

                直觀看下嵌套類型按行存儲和拆解后按列存儲的對比效果:

                然后對于嵌套數據類型,Dremel里面定義了里面三種類型的字段

                1,必須出現1次而且僅出現1次的字段:required

                2,可能出現1次或者0次的字段:optional

                3,可能出現0次或者N次字段:repeated

                下面以paper的例子來講述吧:

                其中DocId是required字段,因此在r1,r2中必須出現1次;url字段是optional字段,因此在r1的第三個Name里未出現,在r1的前兩個Name里出現了1次;Backward字段是repeated字段,因此在r1的Links里未出現,在r2的Links里出現了2次。

                理解了上面這些,直接來看下Dremel是怎么來存它的吧:

                上表中的每條記錄都有兩個屬性,"r"代表repetition level,"d"代表definition level,定義如下:

                repetition level:what repeated field in the field’s path the value has repeated,記錄該字段是在哪個repeated級別上重復的

                definition level:how many fields inpthat could be undefined (because they are optional or repeated) are actually present,記錄該字段之上有多少個optional或者repeated字段實際是有值的(本來可以為null的)

                看到這里,各位可能已經在心里默念了:WTF!別急,可以結合一個例子來看:

            先看repetition level(下面以r替代),以Name.Language.Code為例:

                1)對第1個出現的值,其r始終為0,因此'en-us'的r為0

                2)對于第2個值'en',其上一個值是'en-us',它們是在Language級別發生的重復,Name.Language是兩級的repeated字段,因此r為2

                3)對于第3個值null,是為了記錄'en-gb'是出現在第三個Name而非第二個Name里,特意占位用的。null的上一個值是'en',它們是在Name級別發生的重復,因此r是1

                4)對于第4個值'en-gb',其上一個值是null,它們也是在Name級別發生的重復,因此r是1

                5)對于第5個值null,其上一個值是'en-gb',它們出現在兩個不同Document里,因此r是0

                總結下,看repetition level注意兩點:1,只比較該值和上一個值;2,只需要看這兩個值的重復位置上有幾個repeated字段

            再看definition level(下面以d替代),也以Name.Language.Code為例:

                1)對于'en-us',其上的Name,Language都出現了,因此d為2(其實對于非null值的字段,其上的optional或者repeated字段肯定是出現了,所以都是相同的,只是null字段的d值有差別)

                2)對于'en',同理d也為2

                3)對于null,其上只出現了Name,沒有出現Language,因此d為1

                4)對于'en-gb',d也為2

                5)對于最后一個null,其上也只出現了Name,沒有出現Language,因此d為1


                以上只是講了dremel怎么去存嵌套類型,至于這種存法是怎么想出來的,真非我輩能理解的了。。。更多內容,請參考原著paper及網上解析。

            Feedback

            # re: Dremel存儲格式解析  回復  更多評論   

            2013-08-19 11:42 by tb
            這東西好啊
            久久精品无码一区二区三区| 精品国产一区二区三区久久| 国产精品美女久久久免费| 日韩久久久久中文字幕人妻| 欧美精品丝袜久久久中文字幕 | 少妇久久久久久被弄到高潮 | 久久综合九色综合精品| 久久精品国产亚洲Aⅴ香蕉| 久久综合偷偷噜噜噜色| 国产精品综合久久第一页 | 国产69精品久久久久777| 久久亚洲av无码精品浪潮| 精品久久久无码21p发布| 国产成人精品久久一区二区三区av| 热久久国产欧美一区二区精品| 婷婷综合久久中文字幕蜜桃三电影| 91精品国产综合久久四虎久久无码一级 | 亚洲欧美一级久久精品| 国产精品内射久久久久欢欢| 人妻久久久一区二区三区| 99精品国产综合久久久久五月天| 久久综合九色综合97_久久久 | 久久久亚洲AV波多野结衣| 无码国内精品久久人妻麻豆按摩| 麻豆精品久久精品色综合| www亚洲欲色成人久久精品| 国产免费久久精品99久久| 国产成人精品久久亚洲高清不卡| 亚洲一区中文字幕久久| 久久精品国产亚洲精品| 亚洲欧美一级久久精品| AV狠狠色丁香婷婷综合久久| 久久天堂电影网| 久久人与动人物a级毛片| 久久精品一本到99热免费| 久久激情亚洲精品无码?V| 久久亚洲日韩看片无码| 国产精品熟女福利久久AV| 欧美国产成人久久精品| 亚洲伊人久久大香线蕉苏妲己| 久久精品国产亚洲一区二区三区|