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