8

インメモリ B ツリー (Google btree など) の一部の C++ 実装と LMDB (トランザクション、分離、共有アクセスなどの LMDB のすべての機能を考慮しない場合) のパフォーマンスの違い (読み取り/書き込み) はどうなるでしょうか。 .)?

4

1 に答える 1

12

アーキテクトのHoward Chuによる 2014 年のlmdb設計プレゼンテーションでは、 の設計とトレードオフについて説明しています。lmdb

要約するlmdbと、コピー オン ライト、ボトムアップ更新、ダブル バッファリング、B ツリーであり、他の考慮事項と衝突するたびに実装が常に単純化を優先します。

スマートな設計の選択により、最高のパフォーマンスと破損耐性のある B ツリー実装の 1 つになっています。

  • コピー オン ライトは、データが上書きされないことを意味し、考えられる多くの破損シナリオを回避します
  • リーフからルートへのボトムアップ更新により、ルート更新がコミットと同等になります
  • 過去のバージョンのダブル バッファリングにより、最後の 2 つのルートのみが db ファイルに保持されます
  • 複雑なマルチレベル キャッシング スキームが回避されます - キャッシングlmdbは基盤となる OS に依存します
  • CPUキャッシュミスを回避する他のDBと比較して、コードベース全体が非常に小さい

明らかに、これらの選択は、次のようlmdbな複雑なシナリオには適していないことを意味します。

  • マルチバージョン DB ロールバック (最後の 2 つだけが利用可能)
  • 長時間のトランザクションとコミットの遅延: これらは追加のみの動作につながり、db ファイルが無制限に大きくなる可能性があります。
  • 複数の同時ライター:lmdbより単純な複数のリーダーと単一のライターのスキームを優先します

プレゼンテーション全体 (100 ページ以上) には、さらに多くの情報があります。上記は の精神の要約にすぎませんlmdb

lmdbは、Open LDAP や Memcached などの著名なオープン ソース プロジェクトでコア ストレージ エンジンとして使用されており、どちらの場合も、マイクロ ベンチマークの結果に見られるように、代替と比較して桁違いの速度向上が観察されてい ます。

于 2016-03-01T20:18:13.563 に答える