日志是一種簡單的不能再簡單的存儲抽象。它是一個只能增加的,完全按照時間排序的一系列記錄。日志看起來如下:
我們可以給日志的末尾添加記錄,并且可以從左到右讀取日志記錄。每一條記錄都指定了一個唯一的有一定順序的日志記錄編號。
日志記錄的排序是由“時間”來確定的,這是因為位于左邊的日志記錄比位于右邊的要早些。日志記錄編號可以看作是這條日志 記錄的“時間戳”。在一開始就把這種排序說成是按時間排序顯得有點多余 ,不過 ,與任何一個具體的物理時鐘相比,時間 屬性是非常便于使用的屬性。在我們運行多個分布式系統(tǒng)的時候,這個屬性就顯得非常重要。
對于這篇討論的目標(biāo)而言,日志記錄的內(nèi)容和格式不怎么重要。另外提醒一下,在完全耗盡存儲空間的情況下,我們不可能 再給日志添加記錄。稍后我們將會提到這個問題。
日志并不是完全不同于文件或者數(shù)據(jù)表的。文件是由一系列字節(jié)組成,表是由一系列記錄組成,而日志實際上只是按照時間順序存儲記錄的 一種數(shù)據(jù)表或者文件。
此時,你可能奇怪為什么要討論這么簡單的事情呢? 不同環(huán)境下的一個只可增加的有一定順序的日志記錄是怎樣與數(shù)據(jù)系統(tǒng)關(guān)聯(lián)起來的呢?答案是日志有其特定的應(yīng)用目標(biāo):它記錄了什么時間發(fā)生了什么事情。 而對分布式數(shù)據(jù)系統(tǒng)許多方面而言, 這才是問題的真正核心。