中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【數據蔣堂】第40期:倍增分段技術

發布時間:2020-06-13 04:28:44 來源:網絡 閱讀:287 作者:raqsoft 欄目:數據庫

區塊分段方案能夠滿足我們設定的4個目標。不過,除了處理區塊標記的麻煩外,這個辦法對于列存也不是非常適合。

數據按列分別存儲后,分段時必須保證各列同步,即各列的分段點對應的是同一條記錄的列,否則就會出錯數據錯位。而各個列的寬度是不同的,同樣大小的區塊在存儲不同列的值時,能裝下的個數是不同的,繼續按區塊分段就無法保證同步了。

各列要同步分段,就需要按記錄數分段,但這樣就不能采用固定大小的區塊了,而要有個區塊索引。如果數據不再追加,那可以建立固定長度的索引,但數據不斷追加時,索引也會動態增長。這時候,要么每次追加數據時把所有數據重寫一遍保證索引的連續性,要么用有某種復雜機制能處理不連續的索引,都是成本不低的手段。

當前業界常用的列存分段也就是分塊方案:把數據分成若干塊,塊內是列存,分段以塊為單位。分塊數要足夠多才能保證平均分段,而分塊又要足夠大才能讓列存產生效果,這兩者就是個矛盾,要數據量很大時才合適。而且,這個分塊是按記錄數劃分的,不能固定大小,就需要我們上面說的分塊索引,當數據不斷追加時,索引也會動態變大,連續性就無法保證了。

 

為解決這些問題,我們再設計一種倍增分段方案。

預留一個固定長度的索引區,可以保存N個位置信息,N是個固定的數,比如是1024。我們用索引區i號位表示其中保存的第i個位置。

初始狀態時沒有記錄。加入第1條記錄后,在索引區1號位填入該記錄(稱為記錄1)寫入存儲(比如文件)時的位置;加入第2條記錄后,在索引區2號位填入記錄2的位置,…;加入第N條記錄后,在索引區位置N填入記錄N的位置 。

索引區的i號位可以看成是一個區塊,對應由i號位內容指向的那條記錄起到第i+1號位內容指向的記錄之間的所有記錄(含頭不含尾)。在這一輪追加葉,相當于每個分段中只有一條記錄。

再繼續追加記錄時,索引區已經沒有空位了。這時我們做這樣一個操作:1號位保留,2號位填入原3號數的內容,3號位填入原5號位的內容,…,i號位填入原2i-1號位的內容。這樣一直到在N/2號位填入原2*N/2-1即N-1號位的信息,然后再把第N/2+1到N號位的內容清空。

這個操作,相當于把區塊1和區塊2合并成區塊1,區塊3和區塊4合并成區塊2,..區塊2i-1和區塊2i合并成區塊i,這些區塊就變成由2條記錄構成,數據記錄本來就是連續寫入的,這樣合并后的區塊仍然是由連續記錄構成。

然后,清空的后半部分號位相當于空出一些空區塊了,如果繼續追加記錄時,就每次寫2條記錄才使用下一個號位,即把記錄N+1的位置填入N/2+1號位,記錄N+2繼續寫入,記錄N+3的位置填入N/2+2號位,記錄N+4繼續寫入,…。

再追加下去填滿所有號位后,再次做合并動作,把每區塊記錄號再倍增成4條。同時空出后半部分號位,再追加數據時每個號位要增加4條記錄才使用下一個號位。…,如此往復下去。

在這個機制下,任何時候都有N/2到N個可用區塊,只要N足夠大(1024基本上夠了),就可以做到平均程度較高的分段。每個分段由連續的區塊構成,區塊由連續緊湊的記錄構成,這樣能確保目標3,而上述的算法過程已經解決了目標4。而且,在遍歷過程也不象固定區塊方案那樣需要處理標記,只是連續地從分段起始位置讀到結束位置就可以,動作非常簡單。

 

倍增分段方案是以記錄數為基礎的,所以對于列存也是適合的。各個列都采用這種方式追加數據后,分段點對于各列總是落在同一條記錄上,不會發生錯位的情況,而且,每個列的數據都是一直連續的,沒有中斷點,不象分塊式方式在只能在分塊內連續,也不會面對分塊大小與數量的矛盾。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湘乡市| 绿春县| 龙里县| 葫芦岛市| 天台县| 商丘市| 浦县| 万全县| 军事| 东方市| 建阳市| 华亭县| 长岛县| 民丰县| 桐庐县| 德阳市| 印江| 绍兴县| 茂名市| 江油市| 永胜县| 卓尼县| 宝坻区| 高青县| 邵武市| 松江区| 乌兰察布市| 农安县| 巴彦淖尔市| 乐东| 天水市| 宝鸡市| 太康县| 虹口区| 仁布县| 合山市| 潞城市| 琼海市| 称多县| 芜湖县| 万山特区|