7

私は数日前にBerkeleyDBで遊んだばかりなので、データをできるだけ速く保存することに関して、私が見逃していたものがあるかどうかを確認しようとしています。

データに関するいくつかの情報は次のとおりです:-512バイトのチャンクで提供されます-チャンクは順番に提供されます-チャンクはFIFOの順序で削除されます-停電のためにデータが失われた場合、データベース全体が問題ない限り問題ありません '壊れた

たくさんのドキュメントを読んだ後、キューデータベースはまさに私が望んでいたもののようでした。

ただし、いくつかのテストコードを試した後、私の最速の結果は、DB_APPENDが設定されたDB->putをループするだけで毎秒約1MByteでした。トランザクションとバルクプットも試してみましたが、どちらもかなり遅くなったので、あまり長くは追求しませんでした。Freescalei.MX35開発ボードのNANDFlashチップ上に作成された新しいデータベースに挿入していました。

少なくとも毎秒2Mバイトの書き込み速度を目指しているので、ハードウェアがこれよりも速く書き込むことができることを知っているので、速度を向上させることができる何かを見逃したのではないかと思いました。

4

2 に答える 2

9

これをDB_CONFIGに入れてみてください。

set_flags DB_TXN_WRITE_NOSYNC
set_flags DB_TXN_NOSYNC

私の経験から、これらは書き込みパフォーマンスを大幅に向上させます。


DB_TXN_NOSYNC 設定されている場合、Berkeley DBは、トランザクションのコミットまたは準備時にログを書き込んだり、同期的にフラッシュしたりしません。つまり、トランザクションはACI(アトミック性、一貫性、分離性)プロパティを示しますが、D(耐久性)は示しません。つまり、データベースの整合性は維持されますが、アプリケーションまたはシステムに障害が発生した場合、リカバリ中に最近コミットされたトランザクションの一部が取り消される可能性があります。リスクのあるトランザクションの数は、ログバッファーに収まるログ更新の数、オペレーティングシステムがダーティバッファーをディスクにフラッシュする頻度、およびログがチェックポイントされる頻度によって決まります。DB_EN​​V-> set_flagsをDB_TXN_NOSYNCフラグで呼び出すと、指定されたDB_EN​​Vハンドル(およびそのハンドルのスコープ内で開かれた他のBerkeley DBハンドル)。環境全体で一貫した動作を実現するには、

DB_TXN_NOSYNCフラグは、アプリケーションの存続期間中いつでもBerkeleyDBを構成するために使用できます。


DB_TXN_WRITE_NOSYNC 設定されている場合、Berkeley DBは、ログオントランザクションのコミットまたは準備を書き込みますが、同期的にフラッシュしません。つまり、トランザクションはACI(アトミック性、一貫性、分離性)プロパティを示しますが、D(耐久性)は示しません。つまり、データベースの整合性は維持されますが、システムに障害が発生した場合、リカバリ中に最近コミットされたトランザクションの一部が取り消される可能性があります。リスクのあるトランザクションの数は、システムがダーティバッファーをディスクにフラッシュする頻度と、ログがチェックポイントされる頻度によって決まります。DB_TXN_WRITE_NOSYNCフラグを指定してDB_EN​​V->set_flagsを呼び出すと、指定されたDB_EN​​Vハンドル(およびそのハンドルのスコープ内で開かれた他のBerkeley DBハンドル)にのみ影響します。環境全体で一貫した動作を実現するには、

DB_TXN_WRITE_NOSYNCフラグは、アプリケーションの存続期間中いつでもBerkeleyDBを構成するために使用できます。

詳細については、 http://www.mathematik.uni-ulm.de/help/BerkeleyDB/api_c/env_set_flags.htmlを参照してください。

于 2010-09-29T19:29:13.957 に答える
2

データベースが破損した場合にデータベースを再作成できない(つまり、ローカルキャッシュだけではない)場合は、トランザクション/TDSデータストアを使用する必要があることをお勧めします。クラッシュ/停電が発生した場合にいくつかのアイテムを失うことを気にしない場合は、DB_TXN_WRITE_NOSYNCによってTDSのパフォーマンスが向上しますが、データベースは引き続き統合され、回復可能です。BTREEと数値インデックス(自然キーがない場合)を使用して保存し、エンディアンの問題に注意して、キーの局所性とページ使用率を高くする場合、特にSSD、特にDbMultileKeyDataBuilderを使用して一括挿入を行う場合。

于 2010-11-10T01:22:20.270 に答える