私は、数億の小さなレコードのキーバリューストアとしてBerkelyDBを使用するプロジェクトを持っています。LMDBのメモリデータベース
すべての値がデータベースに挿入され、順次アクセスとランダムアクセスの両方を使用してすべての値が1つのスレッドから反復されます。
BerkeleyDBでは、「ディスク上に保存するつもりはない」in-memory databasesを作成できます。データベースがBerkeleyDBキャッシュに収まるくらい小さい場合は、ディスクに書き込まれません。キャッシュより大きい場合は、オーバーフローを保持するための一時ファイルが作成されます。このオプションを使用すると、データベースを閉じるときにアプリケーションがギガバイトのデッドデータをディスクに書き込むことを防ぐことができます。
私は、BerkeleyDBの書き込みパフォーマンスがSSD上であっても低すぎることを知りましたので、LMDBに切り替えたいと思います。しかし、documentation,に基づいて、非永続データベースを作成するオプションがないように見えます。
永続性または同時アクセスを気にしない場合、LMDBのパフォーマンスを最大限に引き出すために、どのような構成/オプションの組み合わせを使用する必要がありますか?つまり一時的なバッキングディスクストレージを備えた「メモリ内データベース」のように動作させるためですか?
私はこれが、データベースが閉じられたときにディスクに書き込まれるすべての原因になると思いますか?データベース全体がメモリ内にある場合、これにより操作全体が大幅に遅くなります。 –
ナンセンス。ファイルを閉じると、ファイルがフラッシュされません。 OSをフラッシュする前にファイルを閉じて削除すると、何も書き込まれません。 – hyc
完全性のために、あなたはLinux上のほとんどの(すべてではないにしても)状況にぴったりです。しかし、これは他のオペレーティングシステム、またはすべてのファイルシステムの場合には必ずしも当てはまらない。 Mac OS Xで特定の状況下で 'close()'がブロックされるという証拠は少なくともあります。出典:http://blog.libtorrent.org/2012/10/asynchronous-disk-io/これらすべての種類のトリックと同様に実際にあなたのために働くかどうかを実験する必要があります。 –