質問

仕事のために簡単なドキュメント管理システムを書いています。私はただの趣味ですが、今しばらくプログラミングをしています。私の問題はこれです。アプリから多数のドキュメントを削除する場合、関連するデータベースレコードを削除する必要があります。例外がスローされた場合、データベースレコードのないファイル、または存在しないファイルを指すレコードで終わることなく、これを実行する最良の方法は何ですか?

役に立ちましたか?

解決

ファイルをデータベースに保存します。その後、アプリケーションに複雑さ(MSMQなど)を追加することなく、参照整合性を確保できます。はい、これによりデータベースのサイズが増加します。ただし、ファイルはすでにサーバー上にあるため、別の場所にある同じビットです。

他のヒント

これは一種の「分散トランザクション」です。システム。おそらく統合ルーチンを作成して、たまに実行したいでしょう。ある時点で矛盾が発生します。

「私のアプリを通じて」と言いました。これは、アプリケーションインターフェースを介してのみファイルを削除できるということですか?その場合、削除をカスタムトランザクションでラップして、ファイルとdbレコードの両方を削除します。一方が失敗した場合、もう一方をロールバックします。

ファイルディレクトリからファイルを削除し、dbレコードを自動的に削除することを許可する場合は、定期的なクリーンアップや、ファイルディレクトリウォッチャーのアクティビティを監視するWindowsサービスなど、多くのことを実行できますディレクトリを作成し、クリーンアップを開始します。

ご回答ありがとうございます。私はすでにBLOBルートに行くことを考えていましたが、上司がそれを選ぶかどうかはわかりませんでした。彼は良いディレクトリ構造が好きですよね?分散トランザクションに関しては、私はそれらについて何も知りませんでしたが、それらはそれにアプローチする最も専門的な方法のように思われます。しかし、私は趣味であり、すべてがあまりにも複雑に思えるので、BLOBのフロントでボスラウンドに勝つつもりです。乾杯。

データベースとMSメッセージングキュー(MSMQ)を含む分散トランザクションを使用する必要があります。 Microsoft分散トランザクションコーディネーター(DTC)を使用して、データベースを分散トランザクションに登録できることを確認します。

すべてのファイル操作をMSMQでプログラムします。

このリンクが役立つ場合があります

一部のアプリには同様の機能があります。

最初にapを介してファイルを削除してから、ファイルへのリンク/ポインターを持つデータベースレコードを削除します。ユーザーがドキュメントを要求すると(ファイルへのリンクがまだデータベースに存在することを意味します)、アプリは最初にファイルをチェックし、何らかの理由で期待どおりに存在しない場合、データベースレコードをクリーンアップしますその時点で、「エラー」をユーザーに通知します。優雅に。

" Orphaned"とにかくドキュメントはあまり発生しませんが、この方法を使用すると、アプリ実行の通常の一部としてデータベースが常にクリーンアップされます。

これを処理する方法は他にもたくさんありますが、これは私には有効です。

最初にデータベースレコードを削除し、時々リポジトリを監査します。リポジトリを監査するということは、データベースレコードを持たないファイルを探すことを意味します。最初にDBレコードを削除すると、コードは実際には存在しないドキュメントを探しません。

ドキュメントの数、および保存するドキュメントの種類は何ですか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top