發布高效能嵌入式DBMS libmdbx 0.10.4和libfpta 0.3.9

發布了 libmdbx 0.10.4 (MDBX) 庫,實現了高效能緊湊型嵌入式鍵值資料庫,以及相關的 libfpta 0.3.9 (FPTA) 庫,該庫實現了具有二級索引和複合索引的資料表表示在MDBX 之上。 這兩個庫均根據 OSI 批准的許可證進行分發。 支援所有目前的作業系統和架構,以及俄羅斯 Elbrus 2000。

從歷史上看,libmdbx 是 LMDB DBMS 的深度改造,在可靠性、功能集和效能方面優於其祖先。 與 LMDB 相比,libmdbx 非常重視程式碼品質、API 穩定性、測試和自動化檢查。 提供了一個實用程序,用於檢查資料庫結構的完整性,並具有一些復原功能。

在技​​術方面,libmdbx 提供 ACID、強大的變更序列化和跨 CPU 核心線性擴展的非阻塞讀取。 支援自動壓縮、自動資料庫大小管理和範圍查詢估計。 自 2016 年以來,該計畫一直由 Positive Technologies 資助,並自 2017 年起已在其產品中使用。

libmdbx 提供 C++ API,以及愛好者支援的 Rust、Haskell、Python、NodeJS、Ruby、Go 和 Nim 語言綁定。 對於 libfpta,只有 API 描述以 C/C++ 頭檔的形式公開提供。

自 9 月 XNUMX 日發布消息以來新增的主要創新、改進和修正:

  • 啟用可重複的建置。
  • 修復了一個錯誤,在極少數情況下,交易提交期間可能會發生循環/凍結。 Positive Tecnologies 專家在對其產品進行內部測試時發現了這個問題。
  • 測試已改進,測試場景已擴展,以檢查資料庫內頁面樹和 GC 內容的所有可到達的非同構狀態。
  • 在 C++ API 中,修正了額外的“noexcept”,為“cursor::erase()”方法添加了額外的重載,緩衝區的實作不再使用“std::string”來確保對齊(與CLANG libstdc++相關)。
  • 髒頁溢位演算法(選擇性彈出已變更的資料庫頁)中的迴歸已被消除,該演算法表現為在大型交易中變更資料時出現罕見的意外錯誤 MDBX_PROBLEM。
  • 進行了階段性測試,並添加了多項檢查,以確保在資料庫遭到故意損壞時的穩定性。
  • 修正了次要警告 UndefinedBehaviorSanitizer 和 Coverity 掃描問題。
  • 修正了檢查舊版庫所建立的資料庫映像內的巢狀頁面中過時且不再使用的內部標誌「P_DIRTY」的問題。
  • 在 CMake 腳本中,LTO(連結時最佳化)所需的編譯器元件的搜尋已得到改進。
  • 同時閱讀的最大數量已增加至 32767。
  • 改進了使用 Valgrind 和 AddressSanitizer 時的性能。
  • 在 Windows 上,在 MDBX_NOTLS 模式(不使用線程本地存儲)下工作時 SRW 鎖的遞歸使用已被消除,如果系統時間已更改,則修復了 bootid 生成,改進了 WSL1 和 WSL2 的檢測,能夠添加了通過DrvFS 安裝的Plan 9 上開啟資料庫的功能。
  • 總共對 160 個檔案進行了 57 多項更改,新增了約 5000 行,刪除了約 2500 行。

我要特別感謝 Erigon 專案團隊(以太坊生態系統)在極端使用情境測試中提供的幫助。 值得注意的是,自libmdbx v0.10.0 發布以來的五個月內,每個Erigon 安裝中的資料庫磁碟區為1-2 TB(在7% 的以太坊節點上使用),只收到了XNUMX 份資料庫損壞報告,全部是其中發生的原因是外部原因,而不是軟體錯誤:在兩種情況下,原因是RAM 故障,在第三種情況下,是在使用BTRFS 的儲存子系統的特定配置中重置數據時出現錯誤。

來源: opennet.ru

添加評論