2

質問

プログラムのリアルタイム データをバックアップするにはどうすればよいですか? 現在、C++ Boost の「Interprocess」ライブラリで提供されているメモリ マップ ファイルを使用しています。より良い代替ソリューションがあるのだろうか?

詳細

私のプログラムは定期的にハードウェア機器からリアルタイム データを受信し、そのデータを固定サイズのバッファーに格納します。通常、期間は短く、たとえば 3 秒です。バッファーは重要なので、プログラムがクラッシュした場合に備えて、クラッシュする前の元の状態に復元できるようにバックアップしたいと考えています。

バッファの最大サイズを見積もり、同じサイズのメモリ マップド ファイルを作成しますメモリ内バッファとマップされたファイルをバインドして、メモリが変更されると、変更がすぐにローカル ファイルに書き込まれるようにします。

プログラムがクラッシュから回復すると、マップされたファイルを読み取り、データを逆シリアル化します。

このソリューションは、いくつかの前提条件に基づいて正常に機能します: 1)。データの量は事前にわかっています: 3 つのデータ項目または 5 つの項目。2)。各データ項目のサイズはあらかじめ固定されています (C/C++ 言語では、これは固定サイズの構造体/クラスを意味します)。

ただし、これらの前提条件を破る可能性のある何かがプロジェクトで発生することを予見しています: 1)。データ項目の数量は、システムの実行時に変更される場合があります。 顧客はより多くのハードウェア機器を使用し始める可能性があるため、より多くのデータを受信できます。つまり、マップされたファイルを再作成し、古いデータを複製して、新しいデータの保存を開始する必要があります。これにより、パフォーマンスの問題が発生する可能性があります。2)。一部の特殊なデータのサイズは、事前に決定することはできません。たとえば、ユーザーが入力した一部の説明情報です。

では、プログラム内のデータをどのようにバックアップしますか? メモリマップファイルよりも良い解決策があるの だろうか?

4

0 に答える 0