蘋果今開源FoundationDB文件層(Document Layer),這是一個文件導向的資料庫,由擴展FoundationDB鍵值儲存的核心功能而來。

2009年成立的FoundationDB,在2015年的時候被蘋果收購,並於4月時開源了其核心。FoundationDB是一個多重模型的NoSQL資料庫,使用無共享架構(Shared-Nothing Architecture)。整體功能設計圍繞著其核心,透過增加不同的擴充層(Layer)擴充功能,而核心僅包含不可能在擴充層中實作的功能,FoundationDB以擴充層模擬特定類型的資料並處理其存取模式,而最新開源的文件層便用來擴充FoundationDB鍵值儲存。

FoundationDB文件層使用MongoDB API的形式,提供開發人員熟悉的操作,並且與MongoDB協定相容,因此使用MongoDB的簡易應用程式,可以輕易的搬遷到FoundationDB文件層上。開發者可以使用任何現有的MongoDB客戶端,進行將應用程式連接到文件層的操作。

透過擴充FoundationDB,文件層繼承了核心專案的關鍵特性,包括可擴展性、ACID交易支援以及出色的效能,使其成為無狀態伺服器,而這也讓文件層具有多種創新功能。FoundationDB沒有寫入鎖定,即便是在單一文件上的寫入操作也不鎖定。FoundationDB中的交易是無鎖的(Lockless),並藉由將文件儲存為多個鍵值對,讓文件層支援多個平行寫入器,在部分情況,非衝突操作可以平行進行。

FoundationDB文件層的另一個優勢是無分片(Sharding),文件層不依賴固定的分片鍵值來分散資料,而是讓所有資料分區和重新平衡都由鍵值儲存自動管理。該設計直接繼承自FoundationDB核心,可提供強大的水平可伸縮性,同時還能降低客戶端設計複雜性。由於文件層每個執行個體都是無狀態應用程式,只使用儲存資料的FoundationDB叢集進行配置,這種無狀態設計代表文件層的執行個體,可以放置在負載平衡器之後,並處理來自任何客戶端對任何文件的查詢。

在預設情況中,文件層的寫入操作符合完全隔離和原子性,索引和文件資料始終保持一致,無論客戶端的選擇,寫入始終保持完全一致,讀取也會呈現強健的因果一致性,如此能讓開發者更容易撰寫,具同時處理多請求能力的應用程式。

FoundationDB鍵值儲存功能強大,但是僅限於分散式交易和有狀態儲存,但是文件層聚焦於鍵值儲存功能的API,以建模出更複雜的資料儲存方法。由於FoundationDB鍵值儲存缺少了完整的資料庫系統功能,不僅沒有索引、資料類型,也沒有查詢引擎,文件層為FoundationDB增加了這些功能類似的概念。FoundationDB文件層以Apache v2授權許可發布於GitHub,其二進位檔可在macOS和Linux上執行。


Advertisement

更多 iThome相關內容