跳轉到主要內容
公司博客上

深入三角洲湖:開箱事務日誌

分享這篇文章

三角洲湖的標誌。
事務日誌是理解的關鍵三角洲湖因為它的主線,貫穿很多是其最重要的功能,包括ACID事務、可擴展的元數據處理,時間旅行等等。在本文中,我們將探索三角洲湖事務日誌是什麼,它是如何工作的文件,以及它提供了一個優雅的解決方案問題的多個並發的讀和寫。

三角洲湖事務日誌是什麼?

三角洲湖事務日誌(也被稱為DeltaLog)是一個有序的記錄每筆交易已經進行過一個三角洲湖表自成立以來。

事務日誌是用來做什麼的?

單一來源的真理

三角洲湖是建立在Apache的火花™為了允許多個讀者和作者的一個給定的表上所有的工作表在同一時間。為了顯示用戶正確的數據視圖,三角洲事務日誌作為一個湖單一來源的真理——中央存儲庫跟蹤用戶做出的所有更改表。

當用戶第一次讀取一個三角洲湖表或一個新的查詢運行在一個開放的表被修改,因為這是最後一次閱讀,火花檢查事務日誌,看看新事務已發布到桌上,然後更新表與最終用戶的新變化。這可以確保用戶的版本的表總是同步的主記錄最近的查詢,用戶不能發散,衝突性的變更表。

原子性三角洲湖上的實現

ACID事務的四個特性之一,原子性,保證操作(如插入或更新)上執行數據湖完全完成,或不完整的。沒有這個屬性,它太容易了硬件故障或軟件錯誤導致數據隻是部分寫入表,導致混亂或破壞數據。

事務日誌是三角洲湖的機製能夠提供的保證原子性。對於所有意圖和目的,如果它不是記錄在事務日誌,它從未發生過。隻記錄事務執行完全和完全,和使用記錄的單一來源真理,三角洲湖事務日誌允許用戶思考他們的數據,並對其基本可信度有平和的心態,在pb級別。

事務日誌是如何工作的呢?

分解成原子事務提交

當用戶執行一個操作來修改一個表(例如插入、更新或刪除),三角洲湖減免該操作分解為一係列離散步驟組成的一個或多個的行動在下麵。

  • 添加文件——添加一個數據文件。
  • 刪除文件——刪除數據文件。
  • 更新元數據——更新表的元數據(例如,改變表的名稱、模式或分區)。
  • 設置事務——記錄一個結構化流工作已承諾micro-batch與給定ID。
  • 變更協議——使新特性三角洲湖事務日誌切換到最新的軟件協議。
  • 提交信息包含在提交的信息,操作,和在什麼時候。

這些行為被記錄在事務日誌的命令,被稱為原子單元提交。

例如,假設一個用戶創建一個事務來添加一個新列一個表+添加一些更多的數據。三角洲湖將該事務分解成其組成部分,一旦交易完成後,將它們添加到事務日誌如下承諾:

  1. 更新元數據——改變模式使其包含新列
  2. 添加文件——為每個新文件補充道

三角洲湖在文件級別事務日誌

當一個用戶創建了一個三角洲湖表,表的自動創建事務日誌_delta_log子目錄。他或她使表的更改,這些更改記錄命令,原子事務日誌的提交。每個提交書麵JSON文件,開始000000. json。額外的更改表生成後續JSON文件數字升序排列,以便下一個承諾是寫出000001. json,以下為000002. json,等等。

圖的三角洲湖事務日誌文件結構。

所以,作為一個例子,也許我們可以添加額外的記錄的表數據文件1.拚花2.拚花。該事務將自動被添加到事務日誌,提交保存到磁盤000000. json。然後,也許我們改變我們的思想和決定刪除這些文件,並添加一個新文件(3.拚花)。這些行為將作為下一個提交的事務日誌記錄,000001. json,如下所示。

圖說明兩個執行操作在同一文件的提交。

盡管1.拚花2.拚花不再是我們三角洲湖表的一部分,他們的添加和刪除仍然記錄在事務日誌,因為這些操作進行我們的表——盡管他們最終相互抵消。三角洲湖仍然原子這樣的承諾,以確保在事件我們需要審計表或使用“時間旅行”,看看我們的桌子看上去像在給定的時間點上,我們可以這樣做準確。

同時,火花不會急切地刪除文件從磁盤,盡管我們從我們的表刪除底層數據文件。用戶可以刪除不再需要使用的文件真空

很快再計算檢查點文件狀態

一旦我們多次提交事務日誌,三角洲湖救了一個檢查點文件拚花在相同的格式_delta_log子目錄。三角洲湖自動生成檢查點,以保持良好的讀性能。

圖說明三角洲湖事務日誌文件結構,包括分區目錄。

這些檢查點文件保存整個表的狀態在一個時間點——在本地拚花格式,是快速和容易引發閱讀。換句話說,他們提供引發讀者的“捷徑”完全複製表的狀態,允許火花避免後處理可能是成千上萬的微小的,低效的JSON文件。

進行磨合,火花可以運行listFrom操作視圖中的所有文件事務日誌,迅速跳到最新的檢查點文件,隻處理那些JSON提交自最近的檢查點文件得救了。

證明這是如何工作的,想象一下,我們已經創建了提交000007. json如下圖所示。火花是速度通過這個承諾,有自動緩存表的最新版本在內存中。不過,與此同時,其他一些作家(也許你過於急切的隊友)寫了新的數據表,添加提交所有的方式通過0000012. json

將這些新事務和更新狀態表,火花就會運行listFrom version 7操作的新變化。

圖說明如何引發讀最近的檢查點文件快速計算表狀態。

而不是處理所有中間JSON文件,火花就可以跳到最近的檢查點文件,因為它包含整個州的表提交# 10。現在,火花隻有執行增量處理0000011. json0000012. json表的當前狀態。火花然後12表在內存中緩存版本。遵循此工作流,三角洲湖是能夠使用火花隨時更新表的狀態在一個有效的方式。

處理多個並發的讀和寫

既然我們了解三角洲湖事務日誌工作在高級別上,讓我們來談談並發性。到目前為止,我們的示例主要覆蓋場景中,用戶提交事務線性,或者至少沒有衝突。但當三角洲湖是處理多個並發的讀和寫嗎?

答案很簡單。由於三角洲湖是由Apache火花,不僅可以為多個用戶同時修改一個表,這是預期。來處理這些情況,三角洲湖了樂觀並發控製。

樂觀並發控製是什麼?

樂觀並發控製的方法處理並發事務,假定交易(改變)被不同的用戶可以完成一個表沒有衝突。快得令人難以置信,在處理海量數據時,很有可能用戶將完全致力於數據的不同部分,同時允許他們完成非衝突性的事務。

例如,假設你和我正在一起拚圖。隻要我們都工作在不同的地方——你的角落,我和在邊緣,例如,沒有理由我們不能每個工作的一部分,更大的難題同時,並完成拚圖的兩倍。隻有當我們需要相同的部分,與此同時,有一個衝突。樂觀並發控製。

當然,即使樂觀並發控製,有時用戶嚐試修改相同的部分的數據在同一時間。幸運的是,三角洲湖有一個協議。

樂觀地解決衝突

為了提供ACID事務,三角洲湖有一個協議如何提交應該命令(稱為的概念可串行性在數據庫中),決定要做什麼時,兩個或兩個以上同時提交。三角洲湖處理這些情況下通過實現法治互斥,然後試圖解決任何衝突樂觀。該協議允許三角洲湖兌現的酸原理隔離,後確保生成的狀態表的多個並發寫是一樣的,如果那些寫發生連續,孤立地從一個另一個。

一般來說,過程是這樣的:

  1. 記錄開始表版本。
  2. 讀/寫記錄。
  3. 嚐試提交。
  4. 如果別人獲勝,檢查你是否閱讀已經改變了。
  5. 重複。

看到所有這些實時上演,讓我們來看看下麵的圖,看看三角洲湖管理當他們出現衝突。想象兩個用戶讀取同一個表,那麼每個試圖添加一些數據。

說明樂觀並發控製通過展示與衝突的兩個用戶提交。

  • 三角洲湖記錄開始表版本的表(版本0)作出任何更改之前閱讀。
  • 用戶1和2都嚐試添加一些數據表在同一時間。在這裏,我們遇到的衝突,因為隻有一個承諾可以下一個和被記錄000001. json
  • 三角洲湖處理這種衝突的概念“互斥”,也就是說隻有一個用戶可以成功提交000001. json。用戶1的提交被接受,而用戶2的拒絕。
  • 而不是拋出一個錯誤對於用戶2,三角洲湖更願意處理這個衝突樂觀地。檢查是否有新的表已經提交,默默地,以反映這些改變並更新表,然後簡單地重試用戶2的提交新更新的表(沒有任何數據處理),成功提交000002. json

在絕大多數情況下,這種和解發生默默地,無縫,成功。然而,如果有一個不可調和的問題,三角洲湖不能解決樂觀(例如,如果用戶1刪除一個文件,用戶還2刪除),唯一的選擇是拋出一個錯誤。

最後需要注意的一點是,因為所有的交易在三角洲湖表直接存儲到磁盤,這個過程滿足的酸性質耐用性,這意味著它將會持續甚至在發生係統故障。

其他用例

時間旅行

每個表的結果的總和所有的提交記錄在三角洲湖事務日誌——不多也不少。事務日誌提供了循序漸進的教學指導,詳細說明如何從其當前狀態的表的原始狀態。

因此,我們可以重新創建表的狀態在任何時候通過從一個原始表,和處理之前隻提交了這一點。這種強大的能力被稱為“時間旅行”,或數據版本,並且可以在任意數量的情況下救命稻草。有關更多信息,閱讀博客引入δ湖泊大規模數據的時間旅行或參考三角洲湖時間旅行文檔

數據沿襲和調試

是有史以來的記錄每一個變化表,三角洲湖事務日誌給用戶提供了一個有用的可核查的數據沿襲的治理、審計和遵從性目的。它也可以被用來跟蹤一個無意改變的起源或缺陷管道回確切的行動引起的。用戶可以運行描述曆史看到周圍的元數據的更改。

三角洲湖事務日誌總結

在這個博客中,我們鴿子到三角洲湖事務日誌是如何工作的詳細信息,包括:

  • 事務日誌是什麼,它是如何結構,以及如何提交是作為文件存儲在磁盤上。
  • 事務日誌是如何作為一個真理的來源,允許三角洲湖來實現原子性的原則。
  • 三角洲湖如何計算每個表的狀態——包括它如何使用事務日誌趕上最近的檢查點。
  • 使用開放式並發控製,允許多個並發的讀和寫,即使表變化。
  • 三角洲湖如何使用互斥,確保正常提交是序列化,以及它們如何重試默默地在發生衝突。
對開源三角洲湖感興趣嗎?
訪問在線三角洲湖中心要了解更多,請下載最新的代碼,並加入三角洲湖社區。

相關的

在本係列文章:
深入三角洲湖# 1:打開事務日誌
深入三角洲湖# 2:進化模式執行&
深入三角洲湖# 3:DML內部(更新、刪除、合並)

玩這個視頻,請點擊這裏,接受餅幹

相關文章:
湖是什麼數據?
與三角洲湖Productionizing機器學習

免費試著磚

相關的帖子

看到所有公司博客上的帖子
Baidu
map