第 40 期 倍增分段技術

2021-09-04 06:14:37 字數 1672 閱讀 3478

區塊分段方案能夠滿足我們設定的 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。而且,在遍歷過程也不象固定區塊方案那樣需要處理標記,只是連續地從分段起始位置讀到結束位置就可以,動作非常簡單。

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

第 39 期 資料分段討論

現代計算機一般都有多 cpu 核,而日益廣泛應用的固態硬碟也有較強的併發能力,這些硬體資源都為平行計算提供了有力的保證。不過,要實現平行計算還需要有較好的資料分段技術,也就是能方便地把待計算的資料拆分成若干部分,讓每個執行緒 或程序,這裡以多執行緒為例討論,多程序情況是類似的 分別處理。設計資料分段...

藝術程式設計 技術之聲第12期

藝術程式設計 技術之聲第12期 技術未來 1.創業起步期,應該如何做技術選型?2.完美的 只是乙個幻想罷了 3.創業團隊技術leader應該盡量避免的9個錯誤 4.深度學習在美團點評中的應用 技術之聲 1.商品詳情平台化思考與實踐 2.旅遊推薦系統的演進 3.100億資料平滑資料遷移,不影響服務 4...

移動Web加速技術月報第1期

作者 brilliant open web團隊breezet jennyl 編輯 尾尾 移動裝置已經成為當下使用頻率最高的電子裝置,而移動web依然是移動裝置中使用頻率最高的應用場景。站點頁面效能提公升可以使得使用者瀏覽站點時的體驗得到良好改善,作為其中一條技術分支,移動web加速技術的方法和技術方...