經過五年的開發,第二個 libmdbx 1.0 候選版本已經發布

可用的 用於測試庫版本的第二個候選者 庫數據庫 實現高效能、緊湊的嵌入式鍵值資料庫。 目前版本(0.5)是一個技術版本,標誌著所有改進的完成以及向公共最終測試和穩定階段的過渡,隨後形成了該庫的第一個完整版本。 libmdbx 程式碼 分發者 根據 OpenLDAP 公共許可證獲得許可。

MDBX 函式庫是一個經過重大修改的分支 LM資料庫 — 基於「鍵值」類別的事務嵌入式 DBMS 樹B+ 沒有 主動紀錄,它允許多執行緒進程與本地共享(非網路)資料庫競爭且有效率地工作。 反過來,MDBX 比 LMDB 更快、更可靠,同時保留了其祖先的所有關鍵功能,例如 ACID 以及跨 CPU 核心線性擴展的非阻塞讀取。

MDBX 和 LMDB 之間最重要的差異:

  • 從根本上來說,更加關注程式碼品質、測試和自動檢查。
  • 從檢查參數到資料庫結構的內部審計,操作過程中的控制能力顯著增強。
  • 自動壓縮和自動資料庫大小管理。
  • 適用於 32 位元和 64 位元組件的單一資料庫格式。
  • 按範圍估計樣本量(範圍查詢估計)。
  • 支援兩倍於煎餅大小的按鍵和使用者可選擇的資料庫頁面大小。

libmdbx 候選版本是 2019 年 2 月做出的​​分離 MDBX 和 MithrilDB 專案決定的結果。 同時,libmdbx 決定消除(合理的)最大技術債務並穩定庫。 事實上,在指定方向上所做的工作比最初估計和計劃的多了 3-XNUMX 倍:

  • 已實現對 macOS 和第二層平台的支援:FreeBSD、Solaris、DragonFly BSD、OpenBSD、NetBSD。 可根據需要添加 AIX 和 HP-UX 支援。
  • 程式碼已使用 Undefined Behaviour Sanitizer 和 Address Sanitizer 進行了清理,使用「-Wpedantic」建置時的所有警告、所有 Coverity 靜態分析器警告等均被消除。
  • 更新 介面說明.
  • 合併(合併)原始碼以便於嵌入。
  • CMake 支援。
  • 支持嵌套事務。
  • 使用 bootid 確定作業系統是否已重新啟動(髒資料庫停止)。
  • 更新/舊頁面和擴展交易資訊的端到端計數。
  • 選項 MDBX_ACCEDE 用於以相容模式連接到已開啟的資料庫。
  • 使用 OFD阻塞 有空的時候。
  • 管道熱備份。
  • 專門最佳化的內部排序演算法(比「qsort()」快 2-3 倍,比「std::sort()」快 30%)。
  • 最大密鑰長度已增加。
  • 自動控制預讀(資料庫檔案在記憶體中的快取策略)。
  • 更積極、更快的自動壓縮。
  • 一種更優化的B+樹頁面合併策略。
  • 控制非本機檔案系統(NFS、Samba 等),以防止使用不當導致資料庫損壞。
  • 測試集已擴大。

libmdbx 的「下一個」版本的開發將作為一個單獨的專案繼續進行 秘銀資料庫,而MDBX「目前」版本的開發向量旨在凍結功能集並使其穩定。 做出這個決定是出於三個原因:

  • 完全不相容:MithrilDB 需要不同的(不相容的)資料庫檔案格式和不同的(不相容的)API 來實現所有計劃的功能。
  • 新原始碼:MithrilDB 原始碼已獲得獨立於 LMDB 的許可,並且專案本身計劃在不同的許可下發布(由 OSI Apache 2.0 許可證,不是 OpenLDAP 公共許可證).
  • 這種分離避免了潛在的混亂,引入了更多的確定性並確保了專案的獨立路徑。

MithrilDB 與 MDBX 一樣,也是基於 樹B+ 並且還將具有極高的效能,同時消除 MDBX 和 LMDB 的許多基本缺點。 特別是「長讀」問題,即由於垃圾處理被長讀事務阻塞而表現為資料庫「膨脹」的問題將被消除。 MithrilDB 的新功能包括:

  • 支援將資料庫放置在多種異質媒體上:HDD、SSD 和非揮發性記憶體。
  • 針對「有價值」和「低價值」、「熱」、「暖」和「冷」數據的最佳策略。
  • 使用 Merkle 樹監控資料庫完整性。
  • 可選使用 WAL,在寫入密集型場景中顯著提高效能,並確保資料完整性。
  • 惰性追趕將資料提交到磁碟。

來源: opennet.ru

添加評論