1.0 年間の開発を経た XNUMX 番目の libmdbx vXNUMX リリース候補。

図書館 libmdbx は、非常に高性能でコンパクトな組み込みキー/値データベースである LMDB の子孫として大幅に再設計されました。
現在のバージョン v0.5 は技術リリースであり、あらゆる改善が完了し、公開最終テストと安定化の段階への移行を示し、その後ライブラリの最初の完全リリースが形成されます。

LMDB は、かなりよく知られたトランザクション埋め込みキー/値 DBMS であり、以下に基づいています。 木B+ без プロアクティブなロギングこれにより、マルチスレッド プロセスの群れが、(ネットワークではなく) ローカルに共有されたデータベースを使用して、競争力を持って非常に効率的に動作できるようになります。 また、MDBX は LMDB よりも高速で信頼性が高く、libmdbx はその祖先の主要な機能をすべて保持しています。 ACID CPU コア全体で線形スケーリングを行うノンブロッキング読み取りと、いくつかの新しい読み取りが追加されます。

LMDB と比較した libmdbx の違いと改善点の説明は、別の記事に値します (Habré および Medium で公開される予定)。 ここで、最も重要かつ注目すべき点について言及するのが適切です。

  • 基本的に、コードの品質、テスト、自動チェックにより多くの注意が払われます。
  • パラメータのチェックからデータベース構造の内部監査まで、運用中の制御が大幅に強化されました。
  • 自動圧縮と自動データベース サイズ管理。
  • 32 ビットおよび 64 ビットのアセンブリ用の単一のデータベース形式。
  • 範囲によるサンプル サイズの推定 (範囲クエリ推定)。
  • パンケーキの XNUMX 倍の大きさのキーとユーザーが選択可能なデータベース ページ サイズのサポート。

libmdbx リリース候補は、2019 年 2 月に MDBX プロジェクトと MithrilDB プロジェクトを分離する決定 (以下を参照) の結果です。同時に、libmdbx は (合理的な) 最大の技術的負債を排除し、ライブラリを安定化することを決定しました。 実際、当初の見積もりと計画よりも 3 ~ XNUMX 倍多くのことが指定された方向で行われています。

  • Mac OS および第 XNUMX 層プラットフォームのサポートが実装されました: FreeBSD、Solaris、DragonFly BSD、OpenBSD、NetBSD。 必要に応じて、AIX および HP-UX のサポートを追加できます。
  • コードは未定義動作サニタイザーとアドレス サニタイザーを使用してサニタイズされ、-Wpedantic でビルドするときのすべての警告、Coverity Static Analyzer のすべての警告などが削除されました。
  • アップデート APIの説明.
  • ソースコードを統合して埋め込みを容易にします。
  • CMake のサポート。
  • ネストされたトランザクションのサポート。
  • bootid を使用して、OS が再起動したかどうか (ダーティ データベースの停止) を判断します。
  • 更新された/古いページと拡張トランザクション情報のエンドツーエンドのカウント。
  • 互換モードで既に開いているデータベースに接続するためのオプション MDBX_ACCEDE。
  • 使用 OFDブロッキング 利用可能な場合。
  • パイプ内のホットバックアップ。
  • 特別に最適化された内部ソート アルゴリズム (qsort() より最大 2 ~ 3 倍高速、std::sort() より最大 30% 高速)。
  • キーの最大長が長くなりました。
  • 先読みの自動制御 (メモリ内のデータベース ファイル キャッシュ戦略)。
  • より積極的かつ高速な自動圧縮。
  • B+ ツリー ページをマージするためのより最適な戦略。
  • 非ローカル ファイル システム (NFS、Samba など) を制御して、誤って使用された場合のデータベースの損傷を防ぎます。
  • テストのセットが拡張されました。

libmdbx の「次の」バージョンの開発は別のプロジェクトとして継続されます。 ミスリルDB一方、MDBX の「現在の」バージョンの開発ベクトルは、機能セットを凍結して安定化することを目的としています。 この決定は次の XNUMX つの理由から行われました。

  • 完全に互換性がない: MithrilDB では、計画されているすべての機能を実装するには、異なる (互換性のない) データベース ファイル形式と、異なる (互換性のない) API が必要です。
  • 新しいソース コード: MithrilDB ソース コードは LMDB から独立してライセンスされており、プロジェクト自体は別のライセンス (承認済み) の下で公開される予定です。 OSI ライセンス Apacheの2.0としない OpenLDAP財団).
  • 分離することで潜在的な混乱が回避され、確実性が高まり、プロジェクトが独立して進むことが保証されます。

MithrilDB も、MDBX と同様に、以下に基づいています。 木B+ また、MDBX と LMDB の多くの根本的な欠点を解消しながら、非常に高いパフォーマンスも備えます。 特に、ガベージ処理が長時間読み取りトランザクションによってブロックされるという事実により、データベースの「膨張」として現れる「長時間読み取り」の問題が解消されます。 MithrilDB の新しい機能は次のとおりです。

  • HDD、SSD、不揮発性メモリなど、複数の異種メディア上にデータベースを配置するためのサポート。
  • 「貴重」と「低価値」、「ホット」、「ウォーム」、「コールド」データに対する最適な戦略。
  • マークル ツリーを使用してデータベースの整合性を監視します。
  • オプションで WAL を使用すると、書き込み集中型のシナリオでのパフォーマンスが大幅に向上し、データの整合性が保証されます。
  • ディスク上のデータの遅延キャッチアップ固定。

出所: linux.org.ru

コメントを追加します