開頭還是介紹一下群,如果感興趣polardb ,mongodb ,mysql ,postgresql ,redis 等有問題,有需求都可以加群群內(nèi)有各大數(shù)據(jù)庫行業(yè)大咖,CTO,可以解決你的問題。加群請聯(lián)系 liuaustin3 ,在新加的朋友會分到2群(共950人左右 1 + 2 + 3)新人會進入3群
第四部分將深入介紹列索引存儲,這是PolarDB-IMCI處理分析查詢的關鍵部分。PolarDB-IMCI支持高度調(diào)優(yōu)的面向事務處理的云存儲的基于行的存儲引擎[14, 28]。然而,基于行的數(shù)據(jù)格式因其無法有效地訪問分析查詢而聞名。受領先的工業(yè)級數(shù)據(jù)庫(例如Oracle [30]、SQL Server [32])的啟發(fā),PolarDB-IMCI通過內(nèi)存中的列索引實現(xiàn)了雙重數(shù)據(jù)格式,以增強OLAP功能。
如圖4所示,PolarDB-IMCI中的列索引作為現(xiàn)有行存儲的補充存儲。在PolarDB-IMCI中,表的列可以選擇地參與列索引。PolarDB-IMCI將表的所有行分為多個行組,并進行追加式寫入以提高寫入性能。在行組中,數(shù)據(jù)的每一列都與一些統(tǒng)計元數(shù)據(jù)一起組織成數(shù)據(jù)包。為了提供快照隔離,每個行組都包含一個插入版本ID(VID)映射和一個刪除版本ID映射來控制并發(fā)事務處理的可見性。由于行組是追加式的,因此刪除操作需要顯式提供給定主鍵的行ID以設置該行的刪除版本。為此,PolarDB-IMCI實現(xiàn)了一個行ID定位器(即兩層LSM樹)來將主鍵映射到列索引中行的物理位置。
數(shù)據(jù)包布局。首先,將關系表分成多個行組,行組的大小可配置(即每個行組64K行),而剩余的行組則形成部分行組(例如,圖4中的行組N)。為了實現(xiàn)快速數(shù)據(jù)攝取,行組是追加式的(§4.2)。也就是說,全尺寸的行組是不變的,而部分行組將以追加式方式完成。在行組內(nèi)屬于同一列的數(shù)據(jù)以壓縮格式組織成數(shù)據(jù)包,以降低空間消耗。請注意,PolarDB-IMCI不會壓縮部分數(shù)據(jù)包,因為它們會持續(xù)更新。
元數(shù)據(jù)。為了避免在查詢執(zhí)行過程中進行不必要的數(shù)據(jù)訪問,PolarDB-IMCI為每個數(shù)據(jù)包維護一個包元數(shù)據(jù)。包元數(shù)據(jù)跟蹤每個包的最小和最大值,以及采樣直方圖,這有益于列掃描。例如,當查詢語句指定WHERE子句謂詞時,可以使用所引用列的包元數(shù)據(jù)來檢查是否可以跳過對該包的掃描。
為了更好地理解在數(shù)據(jù)包上進行DML操作的流程,現(xiàn)在我們描述如何在列索引數(shù)據(jù)結構上進行DML操作。
? 插入:將行插入列索引包括以下四個步驟。首先,列索引從其部分Packs中分配一個空的RID。其次,定位器通過主鍵更新插入的行的新RID(即在LSM樹中添加新記錄)。然后,列索引將行數(shù)據(jù)寫入空槽中(例如,圖4中行組N內(nèi)的數(shù)據(jù)包)。最后,插入VID記錄已插入數(shù)據(jù)的事務提交序列號(即時間戳)。由于插入VID映射維護每個插入數(shù)據(jù)的插入版本,因此也遵循只追加的寫入模式。
? 刪除:刪除操作通過主鍵(PK)通過RID定位器檢索行的RID,然后使用其事務提交序列號設置相應的刪除VID。之后,從定位器中刪除PK和RID之間的映射以確保數(shù)據(jù)一致性。
? 壓縮:當部分包達到最大容量并且需要減少空間消耗時,其被轉(zhuǎn)換為數(shù)據(jù)包,然后壓縮到磁盤中。壓縮過程采用寫時復制模式,以避免訪問爭用。也就是說,在不更改部分包的情況下生成一個新的數(shù)據(jù)包,PolarDB-IMCI在壓縮后更新元數(shù)據(jù),以將部分包替換為新的數(shù)據(jù)包(即原子地更新指向新數(shù)據(jù)包的指針)。對于各種數(shù)據(jù)類型,列索引采用不同的壓縮算法。數(shù)字列采用參考幀、增量編碼和位壓縮壓縮的組合,而字符串列使用字典壓縮。此外,由于數(shù)據(jù)包是不可變的,當活動事務大于所有VID時,該數(shù)據(jù)包的插入VID映射是無用的,即沒有活動事務引用該插入VID映射。在這種情況下,PolarDB-IMCI刪除行組內(nèi)的插入VID映射,以減少內(nèi)存占用。
? 壓縮:當部分包達到最大容量并且需要減少空間消耗時,其被轉(zhuǎn)換為數(shù)據(jù)包,然后壓縮到磁盤中。壓縮過程采用寫時復制模式,以避免訪問爭用。也就是說,在不更改部分包的情況下生成一個新的數(shù)據(jù)包,PolarDB-IMCI在壓縮后更新元數(shù)據(jù),以將部分包替換為新的數(shù)據(jù)包(即原子地更新指向新數(shù)據(jù)包的指針)。對于各種數(shù)據(jù)類型,列索引采用不同的壓縮算法。數(shù)字列采用參考幀、增量編碼和位壓縮壓縮的組合,而字符串列使用字典壓縮。此外,由于數(shù)據(jù)包是不可變的,當活動事務大于所有VID時,該數(shù)據(jù)包的插入VID映射是無用的,即沒有活動事務引用該插入VID映射。在這種情況下,PolarDB-IMCI刪除行組內(nèi)的插入VID映射,以減少內(nèi)存占用。
? 緊縮:刪除操作可以在數(shù)據(jù)包中設置刪除VID,為該數(shù)據(jù)包打洞。隨著無效行數(shù)的增加,掃描性能和空間效率會下降。PolarDB-IMCI定期檢測和重新排列底部的數(shù)據(jù)包,以保持列索引的無效行的低水位。例如,稀疏數(shù)據(jù)包,有效行少于一半,被選為下溢。然后,后臺線程發(fā)出緊縮事務,每個遷移的有效行進行大量的更新操作,將選定數(shù)據(jù)包的所有有效行重新附加到部分包中。請注意,列索引的更新操作是原地的,因此在緊縮期間或之后,舊行仍然可以通過前臺操作進行訪問,從而實現(xiàn)非阻塞更新。在沒有活動事務訪問它們時,緊縮后的數(shù)據(jù)包將被永久刪除。文章來源:http://www.zghlxwxcb.cn/news/detail-549868.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-549868.html
到了這里,關于POLARDB IMCI 白皮書 云原生HTAP 數(shù)據(jù)庫系統(tǒng) 一 列式數(shù)據(jù)是如何存儲與處理的的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!