kudu的寫數據流程


寫入操作是指需進行插入、更新或刪除操作的一組行。需要注意的事項是Kudu強制執行主關鍵字的唯一性,主關鍵字是可以更改行的唯一標識符。為了強制執行此約束條件,Kudu必須以不同的方式處理插入和更新操作,並且這會影響tablet服務器如何處理寫入

Kudu中的每個tablet包含預寫式日志(WAL)和多個行集合(RowSet),它們是保存在存儲器和磁盤上(被刷新時)的不相交的行集合。

寫入操作先被提交到tablet的預寫式日志(WAL),並根據Raft 一致性算法取得追隨節點的同意,然后才會被添加到其中一個tablet的內存中;

插入會被添加到tablet的MemRowSet中。為了在MemRowSet中支持多版本並發控制(MVCC),對最近插入的行(即尚未刷新到磁盤的新的行)的更新和刪除操作將被追加到MemRowSet中的原始行之后以生成重做(REDO)記錄的列表。(讀取者需要應用相關的重做(REDO)記錄,根據掃描程序給定的時間戳構建行的正確快照。)

當MemRowSet填滿時,則被刷新到磁盤並成為一個DiskRowSet。為了支持磁盤中存儲數據的多版本並發控制(MVCC)功能,DiskRowSets被分為兩種不同的文件類型:

MemRowSet中行的最新版本(即應用了其所有重做(REDO)記錄的原始插入)被寫入到基礎數據文件。這是一種柱狀文件格式(非常像Parquet),用於快速、高效的讀取訪問,其賦予了Kudu支持分析訪問模式的能力。

MemRowSet中存在的行的先前版本(即重做(REDO)記錄的倒序)作為一組撤銷(UNDO)記錄寫入增量文件。時間行程讀取可以應用相關的撤銷(UNDO)記錄,從早期的時間點構建行的正確快照。

更新已被編碼和壓縮的柱狀格式化數據文件需要重寫整個文件,因此基礎數據文件一旦被刷新則被認為是不可變的。

此外,行關鍵字唯一性約束意味着基本記錄的更新和刪除不能被添加到tablet的MemRowSet中,而是被添加到名為DeltaMemStore的單獨的內存存儲器中。

像MemRowSet一樣,所有的變化都將被添加到DeltaMemStore中作為一組重做(REDO)記錄;
當DeltaMemStore填滿時,重做(REDO)記錄將被刷新到磁盤上存儲的增量文件中。
每個DiskRowSet都存在一個單獨的DeltaMemStore。如需構建行的正確快照,讀取者必須在應用相關撤銷(UNDO)或重做(REDO)記錄之前首先找到行的基本記錄

綜上所述:

Kudu插入一條新數據

  • 1、客戶端連接TMaster獲取表的相關信息,包括分區信息,表中所有tablet的信息;

  • 2、客戶端找到負責處理讀寫請求的tablet所負責維護的TServer。Kudu接受客戶端的請求,檢查請求是否符合要求(表結構);

  • 3、Kudu在Tablet中的所有rowset(memrowset,diskrowset)中進行查找,看是否存在與待插入數據相同主鍵的數據,如果存在就返回錯誤,否則繼續;

  • 4、寫入操作先被提交到tablet的預寫日志(WAL),並根據Raft一致性算法取得追隨節點的同意,然后才會被添加到其中一個tablet的內存中,插入會被添加到tablet的MemRowSet中。為了在MemRowSet中支持多版本並發控制(MVCC),對最近插入的行(即尚未刷新到磁盤的新的行)的更新和刪除操作將被追加到MemRowSet中的原始行之后以生成REDO記錄的列表。

  • 5、Kudu在MemRowset中寫入一行新數據,在MemRowset(1G或者是120s)數據達到一定大小時,MemRowset將數據落盤,並生成一個diskrowset用於持久化數據,還生成一個memrowset繼續接收新數據的請求


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM