2016-05-20 4 views
0

単一のスレッドのみからLMDBを使用していて、データベースの永続性をまったく気にしない場合は、トランザクションを開いたり閉じたりする理由はありますか?シングルスレッドLMDB

単一のトランザクション内ですべての操作を実行するとパフォーマンスの問題が発生しますか?あまりにも多くのトランザクションを開いたり閉じたりするとパフォーマンスが低下しますか?

私のLMDBデータベースは、使用可能なRAMより大きくなると劇的に減速していますが、私のSSDもCPUも近くにありません。

答えて

0

トランザクションがコミットされていない場合、(別のプロセスで)読者がアイテムを読み取ることができる保証はありません。書込みトランザクションはある時点でコミットする必要があるため、データは他の読者にも利用できます。

データベースが減速するのは、単純に非シーケンシャル書き込みが原因である可能性があります。このポスト(https://ayende.com/blog/163330/degenerate-performance-scenario-for-lmdb)からは、非順次書き込みは時間がかかります。

0

dbをコミットしないとメモリが増えてしまい、メモリが足りなくなったらOSがスワップを開始します。

永続性を必要としない場合は、メモリ内ハッシュマップを使用すると、lmdbは実際にはそのような場合は何も提供しません。永続性を望んだりデータを失うことに気をつけなければ、合理的なコミット(値の大きさに依存する)を選択し、コミットします。

あまりにも頻繁にコミットしないと、単一の時点でディスクアクセスの全コストが発生するだけなので、その負荷を少し分散する方が理にかなっていると思います。

関連する問題