OrioleDB構(gòu)建現(xiàn)代云原生存儲引擎
OrioleDB 是 PostgreSQL 的全新存儲引擎,為該數(shù)據(jù)庫平臺帶來了現(xiàn)代化的數(shù)據(jù)庫容量、功能和性能。目前正處于公測狀態(tài)。建議用于實驗、測試、基準(zhǔn)測試等,但不建議用于生產(chǎn)用途。
OrioleDB 包含一個擴展,它構(gòu)建在創(chuàng)新的表訪問方法框架和其他標(biāo)準(zhǔn) Postgres 擴展接口的基礎(chǔ)上。通過擴展和增強當(dāng)前的表訪問方法,OrioleDB 為未來更強大的存儲模型打開了大門,這些模型針對云和現(xiàn)代硬件架構(gòu)進行了優(yōu)化。
OrioleDB 目前在標(biāo)準(zhǔn) PostgreSQL 許可證下分發(fā)。
-
專為現(xiàn)代硬件而設(shè)計。OrioleDB 設(shè)計避免了包含數(shù)十個和數(shù)百個 CPU 核心的現(xiàn)代服務(wù)器上的遺留 CPU 瓶頸,從而優(yōu)化了現(xiàn)代存儲技術(shù)(例如 SSD 和 NVRAM)的使用。
-
減少維護需求。OrioleDB 實現(xiàn)了撤消日志和頁面合并的概念,消除了對專用垃圾收集過程的需要。此外,OrioleDB 實現(xiàn)了默認的 64 位事務(wù)標(biāo)識符,從而消除了眾所周知且令人痛苦的環(huán)繞問題。
-
設(shè)計為分布式。OrioleDB 實現(xiàn)了行級預(yù)寫日志并支持并行應(yīng)用。該日志架構(gòu)針對基于 raft 共識的復(fù)制進行了優(yōu)化,允許實現(xiàn)主動-主動多主控。
OrioleDB的關(guān)鍵技術(shù)差異如下:
-
沒有緩沖區(qū)映射和無鎖頁面讀取。OrioleDB 中的內(nèi)存頁面通過直接鏈接連接到存儲頁面。這消除了緩沖區(qū)內(nèi)映射及其相關(guān)瓶頸的需要。此外,在 OrioleDB 中,內(nèi)存頁面讀取不涉及原子操作。這些設(shè)計決策共同將 Postgres 的垂直可擴展性提升到了一個全新的水平。
-
MVCC 基于UNDO 日志概念。在 OrioleDB 中,舊版本的元組不會導(dǎo)致主存儲系統(tǒng)膨脹,而是被逐出到包含撤消鏈的撤消日志中。頁級撤消記錄使系統(tǒng)能夠輕松地盡快回收已刪除元組占用的空間。這些機制與頁面合并一起消除了大多數(shù)情況下的膨脹。也不需要對表進行專門的 VACUUMing,從而消除了系統(tǒng)性能惡化和數(shù)據(jù)庫中斷的重要且常見的原因。
-
寫時復(fù)制檢查點和行級 WAL。OrioleDB 利用寫時復(fù)制檢查點,它每時每刻都提供結(jié)構(gòu)一致的數(shù)據(jù)快照。這對于現(xiàn)代 SSD 很友好,并允許行級 WAL 日志記錄。反過來,行級 WAL 日志記錄很容易并行化(已完成)、緊湊且適合主動-主動多主機(計劃中)。
更多詳情可參閱用法、架構(gòu)、項目結(jié)構(gòu)文檔以及 PostgresBuild 2021 幻燈片。要開始開發(fā),可參閱 OrioleDB 開發(fā)快速入門。
