4

現在、監視システム用の現在のメディア ストレージ (ビデオ/オーディオ/メタデータを保存するため) のアップグレードを開発しており、記録構造をより堅牢なソリューションに再設計しています。

データファイルに格納されているデータのインデックスデータを作成する必要があるため、インデックスファイル構造を作成していますが、ハードディスクの障害が心配です (インデックスファイルの書き込み中に電源が切られた場合を想像してください。データが半分書き込まれる可能性が高いため、破損します)。インデックスの保存方法は既に設計済みですが、電源障害やディスク障害によるデータの破損が懸念されます。

それで、書き込み時にデータの破損を避けるためのテクニックを知っている人はいますか?

私はすでに少し検索しましたが、良い解決策は見つかりませんでした.1つの解決策は、ファイルに書き込まれるすべてのログを作成することでしたが、1秒あたりのI/Oがさらに多くなります(I/ 1 秒あたりの Os も、システムのパフォーマンスを可能な限り低くする必要があります)。

私が思いついたのは、インデックス ファイル内の機密データを、タイムスタンプ フィールドとチェックサム フィールドと共に複製することでした。例えば:

Field1 Field2 Field3 タイムスタンプ チェックサム

Field1 Field2 Field3 タイムスタンプ チェックサム

したがって、ファイルを読み取るときに最初のフィールド セットが破損している場合 (チェックサムが一致しない)、データが 2 回書き込まれます。2 番目のフィールド セットは問題ありません。書き込みが途中で停止した場合、破損が発生すると考えられます。たとえば、ソフトウェアが最初のフィールドのセットを書き込んでいるときに電源障害が発生した場合、2 番目のセットはそのまま残ります... 2 番目のフィールドの電源障害が発生した場合セットが書き込まれていますが、最初のセットはすでに無傷です。

皆さんは、この解決策についてどう思いますか? データの破損を回避しますか?

ところで、トランザクション NTFS でシステムを展開するための制限により、この種のストレージまたはトランザクション NTFS にはどのような種類のデータベースも使用できません。

どんなアイデアでも大歓迎です、ありがとう!

4

3 に答える 3

2

データベースを使用できないことに関する質問の一部を無視します:)

SQLServer2012のFileTablesに関心があるかもしれません。データベースの外部のファイルをフォルダーに保存できますが、データベースの内部にあるかのようにファイルにアクセスできます。データベースを使用して、そのディレクトリに新しいファイルを挿入するか、ファイルをフォルダにコピーすることができます。あなたのデータベースはビデオファイルで本当に太くなることはありません。また、dbサーバーソフトウェアがダウンした場合でも、アクセスできなくなります。フレームのインデックス作成は、個々の.jpgファイル(またはその他)にすることができ、それらもFileTableによって参照され、外部キーを介してメインビデオファイルにインデックス付けされます。その場合、フレームインデックステーブルは非常に単純です。

したがって、ファイルの書き込みとログの維持によるDBのオーバーヘッドを排除して、障害が発生したかどうかを確認します。電源障害のためにOSがファイルを書き込めない場合、データベースはチャンスに耐えられません。ディレクトリの比較を行い、堅牢なユーティリティを使用してファイルを移動し、書き込みの一部が失敗した場合にソースファイルを削除しないようにすることができます。

于 2012-04-17T18:01:51.663 に答える
2

いずれかまたは両方のフィールド セットで破損が発生する可能性があるため、データの破損は避けられません。

「機密データ」を複製しない方が良いと思いますが、最初のステップで「チェックサム」フィールドを空にしてデータを書き込み、2番目のステップでデータと一致するものでチェックサムを更新する2つのステップでそのデータを書き込みます。このチェックサムは、「トランザクションがコミットされた」フラグとして使用され、データの整合性を確保します。

データを読み取るとき、コミットされていないインデックスのすべてのセットを無視します。つまり、チェックサムが一致しない場所を意味します。

次に、多くのテストと微調整を行い、プロセスのすべてのステップでデータの破損を強制し、ランダム データを保存します。個人的には、失敗はランダムであるため、テストには多くの作業が必要だと思います。そのため、何年にもわたってテストされたデータベースを使用することをお勧めします。

ある種のデータ破損に対する保護を追加しますが、完全ではないことに注意してください。データ複製、整合性チェック、ノーブレーク、RAID システム、定期的なバックアップなどの外部構成など、データを保護するために他のセキュリティ層を追加することもできます。

「トランザクション」に関する理論が多すぎます。

詳細については、「アトミック トランザクション アルゴリズム」を検索してください。

データベースの使用を再考し、ログの使用を再考し、ファイル システムを使用して情報を保存することも再考します。

于 2012-04-17T18:46:21.227 に答える
0

ある種のトランザクション ロジックを使用できます。小さなチャンクでインデックスを作成し、最初に一時ファイルを使用します。1 つのチャンク (ファイル) が完成したら、整合性をチェックし、テストに合格した場合は実際のインデックス ファイルとしてコピーします。この時点で、検証済みのチャンクのコピーをいくつか配布できます。

于 2012-04-17T18:50:38.193 に答える