可擴展的資料版本控制 – 利用 LakeFS 兩全其美

多種工具,它們都旨在解決類似的問題。其中兩個領先者是lakeFS和DVC。在這篇文章中,我將概述每個項目的設計方式,以便為理解它們的相對擴展能力提供基礎。作為 LakeFS 的共同創建者,你完全可以期待我對此產生偏見,但我會盡力做到公平

讓我們先退後一步,調整我們要

解決的問題,然後檢查這些不同的解決方案如何處理規模。

資料版本控制-我們不能只使用 Git 嗎?
在我們深入了解具體細節並了解問題如何解決之前,讓我們花一點時間了解問題本身。為什麼我們需要一個專用的工具來版本資料?我們不能只使用 Git 嗎?

對於完整的答案,我會推薦我的

聯合創始人關於數據版本控制的精彩而深入的文章。 TL;DR 是原始碼和資料有很大不同。在本文中,我們將重點放在三個主要區別:

大小-與主要由人類產生 的原始碼不同,資料來自許多來源:有些是人類的,但很多不是。當您開始捕獲有關它的詳細數據時,即使是由人類互動(例如商店中的交易)產生的數據也會變得相當大。一旦您獲得純粹機器生成的數據,數據量就會迅速增加 – 考慮日誌數據、來自物聯網的傳感器數據、視頻和圖像源等領域。

雖然多產的軟體工程師可能會在

美好的一天(或糟糕的一天,取決於你問的人)產生數千位元組的程式碼,但機器通常會高興地產生更多數量級的程式碼。對於大大小小的公司來說,擁有 TB 或 PB 的數據並不罕見。

變化速度-出於同樣的原因,數據也以更高的速度變化。資料湖通常根據到達時間(例如每小時或每天)進行分區。這意味著相對較大部分的資料會被定期有效地替換。

存取模式-機器產生的資料通常也

被機器消耗。通常,計算引擎(無論是用於分析、機器學習訓練或其他)將是消費者。為了提高效率,我們需要在儲存庫和使用進程之間傳輸大量資料。製作非常大的資料集供人類使用的情況很少見。
當然,還有其他差異,其中一些差 泰國 WhatsApp 號碼數據 異比此處指定的更細微 – 我鼓勵您閱讀有關該主題的更多資訊。

設計可擴展的資料版本控制系統

LakeFS 和 DVC 都提供資料版本控制

但在可擴展性方面它們如何比較?讓我們從一個角度來考慮他們的架構如何擴展。

數位化VC
DVC透過將資料檔案的元資料耦合到 Git 儲存庫的元資料來提供資料檔案的版本控制。這是透過設定一個本機目錄來完成的,該目錄需要存在於所有使用資料的電腦上。快取目錄有幾個有趣的功能:

內容可尋址性– 就像 Git 一樣,檔案儲存在快取目錄中,並帶有代表其內容的 ID。這使得 DVC 能夠有效地儲存:如果檔案表示完全相同的字節,則會自動刪除重複資料。

WhatsApp數據

檔案元資料– 有關檔案和目錄內容

的資訊儲存在快取目錄中內容可尋址的檔案中。這些通常有一個後綴,並表示為 JSON 編碼的條目數組,每個條目代表一個子物件。
DVC 將在可能的情況下另外使用輔助索引:它將儲存每個檔案的修改時間和大小及其雜湊值,以避免必須重新雜湊所有檔案來計算本地差異。但是,它儲存在臨時目錄中並且不是持久的。
連結– 雖然快取目錄(可能)包含 如果您很難理解這兩個主要獲取手段即 曾經引用的所有檔案的所有版本,但特定版本可能僅引用其中的子集。由於 DVC 旨在提高儲存效率,因此版本在本地表示為一組到快取的連結。有多種類型的連結可供選擇 – reflinks 是“理想的”,支援重複資料刪除和更改時的寫入時複製,但遺憾的是並非所有作業系統

和檔案系統都支援其他選項包括不可

編輯的硬/軟連結和普通舊複製。
遙控器– 由於快取在本機檔案系統目錄上運作,因此在 DVC 中共用和備份資料是使用遙控器完成的。遠端伺服器通常透過網路共享,使其他機器和使用者可以存取資料。 DVC支援多種類型的遙控器,從物件儲存。

DVC 可擴充性優點
這種架構非常簡單,可讓您在沒有中央伺服器或遠端儲存的情況下開始使用 DVC。
使用引用連結時,資料會在快 清潔新聞 取和工作目錄之間進行重複資料刪除,且不需要複製。
內容可尋址儲存透過自動對位元組等效內容進行重複資料刪除,進一步減少儲存使用。
DVC 可擴充性的缺點

將檔案元資料的快照儲存為序列

化 JSON 陣列的效率非常低。這意味著 DVC 必須反序列化整個 blob 才能知道版本包含什麼。雖然這對於較小的資料集來說很好,但對於較大的集合來說它的擴展性很差。
無論如何,並發性都需要複製儲存。由於版本必須在工作目錄中本地實作才能使用,因此使用版本的唯一方法是連結到其檔案或複製它們。
Windows 上根本不支援引用鏈接,並且在其他作業系統上也有有限的支援。使用者必須在預設(複製)或對可變性施加限制的硬/符號連結之間進行選擇
版本之間的差異效率很低。這是因為每次提交都表示為 JSON 序列化數組;比較涉及對兩個提交進行反序列化以及對兩個數組進行全面掃描以找出發生了什麼變化。這使得 diff 成為O(n)操作,與託管資料集的大小成線性關係。

返回頂端