0

TPL を使用して並列処理するキューに対して動作する ac# プロセスがあります。各レコードを処理した後、処理された各レコード ID の物理レコードを確立して、プロセスが失敗したり中断されたりした場合に、そのレコードを再度処理しないようにします。レコードは 1 回だけ処理する必要があります。

レコード ID を単純なテキスト ファイルと Sqlite テーブルにシリアル化しようとしました。どちらの場合も、これらの小さなレコード ID (Guid) を保存する時間は、レコード自体の合計処理時間の 50% を占めます。開いているSqlite接続とパラメータ化された挿入クエリを使用して挿入を試みたので、データベースファイルを開いたり閉じたりすることはありません。

私の質問は、Guid のリスト (おそらく 1000 ~ 2000 個) を永続的な方法で維持し、プロセスが終了した場合にそれらを保存して、中断したところから再開できるようにするにはどうすればよいかということです。高速で、サーバーが再起動したり、プロセスが強制終了されたりしても問題が解決しない限り、私は喜んで何でも試してみます。

何か案は?

4

1 に答える 1

0

再起動に耐えるのに十分な永続性があるものは、遅かれ早かれ (できればもっと早く) ディスクに書き込まれる必要があります。

これは、既にほとんどの選択肢を列挙したことを意味します。

あなたがしなければならない次の質問は、記録がすでに処理されているかどうかを確認する費用はいくらか、そしてエンドユーザーがうっかり追跡メカニズムを削除してしまう危険度はどの程度かということです.

情報をテキスト ファイルに書き込むだけの場合、書き込みは高速になりますが、読み取りは遅くなり (情報をキャッシュしない限り)、ユーザーがファイルを削除する可能性はかなり高くなります。

あらゆる種類のデータベースを使用する場合でも、書き込みはかなり高速で、取得はテキスト ファイルよりも高速である必要があり、ユーザーがストレージ メカニズムを削除する可能性ははるかに低くなります。

これらの要因に基づいて、ある種のデータベースを強くお勧めします。私はパフォーマンスのためにいくつかの異なるデータベースをモデル化 (または調査) して、実装、展開、および保守のコストを含めて、どれが費用対効果が最も高いかを確認します。

于 2012-12-31T01:59:00.313 に答える