資料蔣堂 | 倍增分段技術

資料派THU發表於2018-01-24

640?wx_fmt=png&wxfrom=5&wx_lazy=1

來源:資料蔣堂

作者:蔣步星

本文共1408字,建議閱讀3分鐘
本文為大家帶來一種新的資料列存分塊方案—倍增分段技術。

640?wx_fmt=png&wxfrom=5&wx_lazy=1


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


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


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


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


640?wx_fmt=png


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


預留一個固定長度的索引區,可以儲存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。而且,在遍歷過程也不象固定區塊方案那樣需要處理標記,只是連續地從分段起始位置讀到結束位置就可以,動作非常簡單。


640?wx_fmt=png


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


專欄作者簡介

640?

潤乾軟體創始人、首席科學家


清華大學計算機碩士,著有《非線性報表模型原理》等,1989年,中國首個國際奧林匹克數學競賽團體冠軍成員,個人金牌;2000年,創立潤乾公司;2004年,首次在潤乾報表中提出非線性報表模型,完美解決了中國式複雜報表製表難題,目前該模型已經成為報表行業的標準;2014年,經過7年開發,潤乾軟體釋出不依賴關係代數模型的計算引擎——集算器,有效地提高了複雜結構化大資料計算的開發和運算效率;2015年,潤乾軟體被福布斯中文網站評為“2015福布斯中國非上市潛力企業100強”;2016年,榮獲中國電子資訊產業發展研究院評選的“2016年中國軟體和資訊服務業十大領軍人物”;2017年, 自主創新研發新一代的資料倉儲、雲資料庫等產品即將面世。


資料蔣堂

《資料蔣堂》的作者蔣步星,從事資訊系統建設和資料處理長達20多年的時間。他豐富的工程經驗與深厚的理論功底相互融合、創新思想與傳統觀念的相互碰撞,虛擬與現實的相互交織,產生出了一篇篇的瀝血之作。此連載的內容涉及從資料呈現、採集到加工計算再到儲存以及挖掘等各個方面。大可觀資料世界之遠景、小可看技術疑難之細節。針對資料領域一些技術難點,站在研發人員的角度從淺入深,進行全方位、360度無死角深度剖析;對於一些業內觀點,站在技術人員角度闡述自己的思考和理解。蔣步星還會對大資料的發展,站在業內專家角度給予預測和推斷。靜下心來認真研讀你會發現,《資料蔣堂》的文章,有的會讓使用者避免重複前人走過的彎路,有的會讓攻城獅面對扎心的難題茅塞頓開,有的會為初入行業的讀者提供一把開啟資料世界的鑰匙,有的甚至會讓業內專家大跌眼鏡,產生思想交鋒。


往期回顧:

資料蔣堂 | JOIN延伸 - 維度概念

資料蔣堂 | JOIN提速 - 有序歸併

資料蔣堂 | JOIN提速 - 外來鍵指標的衍生

資料蔣堂 | JOIN提速 - 外來鍵指標化

資料蔣堂 | JOIN簡化 - 意義總結

資料蔣堂 | JOIN簡化-消除關聯

資料蔣堂 | JOIN簡化 - 維度對齊

資料蔣堂 | JOIN運算剖析

資料蔣堂 | 迭代聚合語法

資料蔣堂 | 非常規聚合

資料蔣堂 | 再談有序分組

資料蔣堂 | 有序分組

資料蔣堂 | 非等值分組

資料蔣堂 | 還原分組運算的本意

資料蔣堂 | 有序遍歷語法

資料蔣堂 | 常規遍歷語法

資料蔣堂 | 從SQL語法看離散性

資料蔣堂 | 從SQL語法看集合化

資料蔣堂 | SQL用作大資料計算語法好嗎?

資料蔣堂 | SQL的困難源於關係代數

資料蔣堂 | SQL像英語是個善意的錯誤

資料蔣堂 | 開放的計算能力為資料庫瘦身

資料蔣堂 | 計算封閉性導致臃腫的資料庫

資料蔣堂 | 怎樣看待儲存過程的移植困難

資料蔣堂 | 儲存過程的利之弊

資料蔣堂 | 不要對自助BI期望過高

資料蔣堂 | 報表的資料計算層

資料蔣堂 | 報表應用的三層結構

資料蔣堂 | 列式儲存的另一面

資料蔣堂 | 硬碟的效能特徵

資料蔣堂 | 我們需要怎樣的OLAP?

資料蔣堂 | 1T資料到底有多大?

資料蔣堂 | 索引的本質是排序

資料蔣堂 | 功夫都在報表外--漫談報表效能優化

資料蔣堂 | 非結構化資料分析是忽悠?

資料蔣堂 | 多維分析的後臺效能優化手段

資料蔣堂 | JOIN延伸 - 維度查詢語法


校對:陳娟

為保證發文質量、樹立口碑,資料派現設立“錯別字基金”,鼓勵讀者積極糾錯

若您在閱讀文章過程中發現任何錯誤,請在文末留言,或到後臺反饋,經小編確認後,資料派將向檢舉讀者發8.8元紅包

同一位讀者指出同一篇文章多處錯誤,獎金不變。不同讀者指出同一處錯誤,獎勵第一位讀者。

感謝一直以來您的關注和支援,希望您能夠監督資料派產出更加高質的內容。

640?wx_fmt=jpeg

相關文章