DBMS libmdbx 0.11.7 のリリース。 GitHub でブロックした後、開発を GitFlic に移行する

libmdbx 0.11.7 (MDBX) ライブラリは、高性能でコンパクトな組み込みキー/値データベースの実装とともにリリースされました。 libmdbx コードは、OpenLDAP Public License に基づいてライセンスされています。 現在のすべてのオペレーティング システムとアーキテクチャ、およびロシアの Elbrus 2000 がサポートされています。

このリリースは、15 年 2022 月 404 日に GitHub 管理者が何の警告も説明もなしに libmdbx を他のプロジェクトのホストとともに削除し、同時に libmdbx に関連する多くの開発者へのアクセスをブロックした後、プロジェクトを GitFlic サービスに移行したことで注目に値します。米国の制裁対象企業。 ユーザーの観点から見ると、プロジェクトのすべてのページ、リポジトリ、フォークが突然 XNUMX ページになり、コミュニケーションも取れず、原因も判明しませんでした。

残念ながら、詳細な回答が得られた多くの質問と多くの議論があった問題は、ほとんどすべて失われています。 この情報の損失は、GitHub 管理者がプロジェクトに与えることができた唯一の客観的な損害です。 ディスカッションの部分的なコピーは、archive.org で引き続き入手できます。

構築された CI シナリオとインフラストラクチャ (オープンソース プロジェクトで無料で利用可能) が失われたため、小規模な技術的負債の修正、統合、および排除に取り組む必要がありました。 現在、CI は、すべての BSD および Solaris バリアントのビルドと実行テストを除いて、ほぼ同じ程度に復元されています。 通常、アクションの後、GitHub は、支払いの必要性とお金の償却の試みについてのリマインダーを除いて、何の説明も通知も受け取りませんでした。

libmdbx v0.11.3 のリリースに関する最新のニュース以来、GitHub アクションからの回復に加えて、次の改善点と修正点に注目する価値があります。

  • Linux カーネルの結合ページ キャッシュとバッファ キャッシュで検出されたインコヒーレンス効果/欠陥に対する回避策を追加しました。 ページ キャッシュとバッファ キャッシュが実際に組み合わされているシステムでは、すでにメモリにマップされているファイルに書き込むときに、カーネルがデータの XNUMX つのコピーのためにメモリを浪費しても意味がありません。 したがって、データがまだディスクに書き込まれていない場合でも、write() システム コールが完了する前に、書き込まれているデータがメモリ マッピングを通じて表示されるようになります。

    一般に、遅延マージではページ リストのロックの取得、データのコピー、または PTE の調整が必要になるため、他の動作は合理的ではありません。 したがって、暗黙の一貫性ルールは、統合バッファ キャッシュが SRV1989 に登場した 4 年以来有効です。 したがって、読み込まれた libmdbx 悪用シナリオでの奇妙なクラッシュを検出するには、多大な作業が必要でした。 まず問題を再現し、次に仮説を検証して改善点をテストします。

    再現シナリオの複雑さと特異性にもかかわらず、問題は確実に特定され、局所的に特定され、確実に排除されたと自信を持って言えます。 さらに、バイパス メカニズムの動作は Erigon (イーサリアム) の開発者の XNUMX 人によって確認されました。彼の場合、デバッグ ビルドで、不必要なアサート チェックによる回帰として保護がトリガーされました。

    実稼働プロジェクトで libmdbx が広く使用されている状況では、信頼性の高い動作を保証することは、それがバグなのか機能なのか、そのような一貫性が信頼できるかどうかを判断すること、ましてや、 Linux カーネル内での不整合の原因。 したがって、ここでは、ユーザーに影響を与える可能性のある問題の修正について説明します。

  • API と mdbx_copy ユーティリティの両方を使用して、圧縮せずにデータベースを別のファイル システムにホット コピーするときの EXDEV (クロスデバイス リンク) エラーの回帰が解消されました。
  • Kris Zyp は Deno に libmdbx サポートを実装しました。 Kai Wetlesen は、Fedora 用の RPM パッケージをデザインしました。 David Bouyssié は Scala のバインディングを実装しました。
  • 大規模なデータベースで巨大なトランザクションを処理する場合の、MDBX_opt_rp_augment_limit オプションで指定された値の処理が修正されました。 以前は、エラーにより不要なアクションが実行される可能性があり、イーサリアム実装 (Erigon/Akula/Silkworm) および Binance Chain プロジェクトのパフォーマンスに影響を与えることがありました。
  • C++ API を含む多くのバグが修正されました。 まれでエキゾチックな構成における多くのビルドの問題を修正しました。 すべての重要な改善点の完全なリストは、ChangeLog で入手できます。
  • 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 言語へのバインディングを提供します。

出所: オープンネット.ru

コメントを追加します