發布 DBMS libmdbx 0.11.7。 在 GitHub 上鎖定後將開發轉移到 GitFlic

libmdbx 0.11.7 (MDBX) 函式庫發布,實現了高效能緊湊型嵌入式鍵值資料庫。 libmdbx 程式碼已獲得 OpenLDAP 公共授權的許可。支援所有目前的作業系統和架構,以及俄羅斯 Elbrus 2000。

該版本值得注意的是,15 年 2022 月 404 日,GitHub 管理部門在沒有任何警告或解釋的情況下刪除了 libmdbx 以及許多其他項目,同時阻止了與受到美國制裁的公司。從使用者的角度來看,專案的所有頁面、儲存庫和分支突然變成了 XNUMX 頁面,無法進行任何通訊並尋找原因。

不幸的是,幾乎所有問題,其中有許多問題和詳細答案,以及許多討論,都已遺失。這些資訊的遺失是 GitHub 管理部門對此專案造成的唯一客觀損害。討論的部分副本仍然可以在 archive.org 上找到。

已建成的 CI 場景和基礎設施(可免費用於開源專案)的損失迫使我們進行修訂、統一和消除小型技術債。現在,除了所有 BSD 和 Solaris 變體的建置和運行測試之外,CI 已恢復到幾乎相同的程度。通常情況下,在採取行動後,GitHub 除了需要付款和嘗試註銷資金的提醒之外,沒有收到任何澄清或通知。

自從上次發布 libmdbx v0.11.3 的消息以來,除了從 GitHub 操作恢復之外,還值得注意以下改進和修復:

  • 新增了針對 Linux 核心中組合頁面和緩衝區快取中偵測到的不連貫效應/缺陷的解決方法。在頁快取和緩衝區快取真正結合的系統中,當寫入已映射到記憶體的檔案時,核心沒有必要為兩個資料副本浪費記憶體。因此,在 write() 系統呼叫完成之前,正在寫入的資料透過記憶體映射變得可見,即使資料尚未寫入磁碟。

    一般來說,其他行為是不合理的,因為使用延遲合併,您仍然需要取得頁面清單的鎖定、複製資料或調整 PTE。因此,自 1989 年 SRV4 中出現統一緩衝區快取以來,不言而喻的一致性規則就一直有效。因此,在載入的 libmdbx 利用場景中偵測奇怪的崩潰需要大量工作。首先重現問題,然後驗證假設並測試改進。

    現在我們可以自信地說,儘管再現場景非常複雜和特殊,但問題已經被可靠地識別、定位和消除。此外,旁路機制的操作得到了 Erigon(以太坊)的一位開發人員的確認;在他的例子中,在調試版本中,由於不必要的斷言檢查,保護被觸發為回歸。

    需要注意的是,在 libmdbx 在生產專案中廣泛使用的背景下,確保可靠運行根本上比弄清楚它是 bug 還是 feature 以及這種一致性是否可靠更重要,更不用說尋找Linux 核心內部不一致的原因。因此,我們在這裡討論修復可能影響用戶的問題。

  • 透過 API 和 mdbx_copy 實用程式將未壓縮的資料庫熱複製到另一個檔案系統時,EXDEV(跨裝置連結)錯誤的回歸已被消除。
  • Kris Zyp 在 Deno 中實作了 libmdbx 支援。 Kai Wetlesen 為 Fedora 設計了 RPM 包裝。 David Bouyssié 為 Scala 實作了綁定。
  • 修正了在大型資料庫中處理大型事務時對 MDBX_opt_rp_augment_limit 選項指定的值的處理。先前,由於錯誤,可能會執行不必的操作,這有時會影響以太坊實現(Erigon/Akula/Silkworm)和幣安鏈專案的性能。
  • 許多錯誤已修復,包括 C++ API 中的錯誤。修復了罕見和奇異配置中的許多建置問題。變更日誌中提供了所有重大改進的完整清單。
  • 總共對185個檔案進行了89處更改,增加了約3300行,刪除了約4100行。更多內容被刪除,主要是因為清理了與 GitHub 和相關服務相關的已經無用的技術文件。

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

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

libmdbx 提供了開發的 C++ API,以及愛好者支援的與 Rust、Haskell、Python、NodeJS、Ruby、Go、Nim、Deno、Scala 等語言的綁定。

來源: opennet.ru

添加評論