高效能嵌入式DBMS libmdbx 0.10發布

經過三個月的開發,libmdbx 0.10.0(MDBX)發布,實現了高效能、緊湊的嵌入式鍵值資料庫。 libmdbx 程式碼已獲得 OpenLDAP 公共授權的許可。 libmdbx 是 LMDB DBMS 的深度改造,據開發人員稱,它在可靠性、功能範圍和性能方面優於其祖先。據稱,在 CRUD 場景下,libmdbx 比 LMDB 快 20%,如果在將 libmdbx 建置到與 LMDB 相當的水平時禁用內部控制,則快 30%。

Libmdbx 提供 ACID、強大的變更序列化和跨 CPU 核心線性擴展的非阻塞讀取。 libmdbx非常注重程式碼品質、穩定的API運行、測試和自動檢查。支援自動壓縮、自動資料庫大小管理、32 位元和 64 位元組件的單一資料庫格式以及範圍查詢估計。提供了一個實用程序,用於檢查資料庫結構的完整性,並具有一些復原功能。自2016年起,該計畫由Positive Technologies資助,並自2017年開始在其產品中使用,美國政府對Positive Technologies實施的製裁並未產生任何明顯影響。

自上一版本以來添加的主要創新、改進和修復:

  • Mahlon E. Smith 的 Ruby 綁定和 Noel Kuntze 的 Python 綁定試用版現已推出,Alexey Sharov 的 GoLang 綁定已更新。
  • 對於「MDBX_WRITEMAP」模式,當直接在 RAM 中變更資料庫資料時,會實作將變更的資料庫頁「透明溢位」到磁碟。現在,在完成每個操作後,這些頁面立即完全準備好寫入磁碟,並且作業系統核心可以獨立地將更改的頁面刷新到磁碟,並且提交事務將不需要它們的修改。因此,在RAM不足的繁忙場景下,磁碟操作量最多可減少2倍。
  • 實現了對已修改頁面的長期未使用的捲影副本的逐出,並優先逐出具有大/長值的頁面,在絕大多數情況下,每個事務僅修改一次。其結果是在事務量非常大的情況下減少了磁碟流量並提高了效能。
  • 實現了插入鍵時拆分頁面的「智慧」模式。現在,當插入有序序列時,頁面會自動完全填充,並且在其他情況下,樹會更加優化平衡。因此,平均而言,資料庫頁面的填充更加優化,B 樹更加平衡,這對效能有正面影響。
  • 新增了頁面操作的統計信息,可以讓您準確估算修改資料庫操作的成本。
  • 修正了十多個 bug 和 bug,包括:使用 MinGW 建置的問題、在 iOS <= 13.0 中使用 `std::filesystem::path` 的問題、針對舊版 Windows 的建置等。
  • 總共對 200 個檔案進行了 66 多項更改,新增了約 6500 行,刪除了約 4500 行。

另外,我想指出選擇 Turbo-Geth 專案(Go-Ethereum 的渦輪分叉)libmdbx 作為新的儲存後端,並感謝專案團隊(特別是 Alexey Sharov、Artyom Vorotnikov 和 Alexey Akhunov)對極端用例場景的測試有很大幫助。特別是,發現並消除了預讀/快取控制中的缺陷,該缺陷導致大型資料庫難以重現的場景中的效能下降。

來源: opennet.ru

添加評論