-1

私は、これまでデータを永続化する必要のなかった Java で書かれたシステムを持っています。現在、永続的なデータを必要とするように見える新しい要件がありますが、まれに少量しか必要ありません。

私は、データを失わないようにするための非常にまともな (99.9% の場合は 100% である必要はない) 効果的な方法で、このデータを永続化する理想的な方法を見つけようとしています。

明らかなアイデアはDBですが、データが非常に少ないため、DBに依存関係を追加するのはやり過ぎのようです。次のアイデアはファイルへの書き込みですが、ファイルへの書き込み権限がない、ファイルが破損している、またはデータレース/古さの問題をどのように処理しますか? ファイルを永続化するための単純で明白なアプローチで十分ですか、それとも現実世界で問題を引き起こす可能性がありますか?

要するに、システムが予期せずダウンした場合でも、完全ではないにしても、データが機能するという高い信頼度でデータを確実に永続化するための、効果的でありながら厳しすぎる方法ではない方法は何ですか? 特別なことを何もせずに簡単に実装されたファイルの永続性で十分ですか? これを支援する便利なクラスはありますか?

4

3 に答える 3

1

永続化するデータがブール フラグの場合は、既知の名前のファイルを作成または削除して、ブール フラグとして機能させることができます。

永続化するデータの量が十分に少ない場合は、ファイル名の一部としてデータを含む長さ 0 のファイル (またはディレクトリ) を作成することで、永続化できます。ファイルの作成は、アプリケーションの観点からはアトミック操作です。この方法の欠点は、既知の名前のファイルにアクセスする代わりに、永続化ファイルを見つけるためにディレクトリを読み取らなければならない場合があることです。

シンボリック リンクのあるシステムで Java 7 を使用している場合は、データをシンボリック リンクのターゲットとして永続化するシンボリック リンクを作成できます。シンボリックリンクの作成もアトミック操作であり、存在しないファイルを指すシンボリックリンクを作成してもエラーにはなりません。

永続化データを従来の方法でファイルの内容として保存することにした場合、ファイルを書き出す通常の方法は次のとおりです。

  1. 書き込み用に新しいファイルを開きます。アプリケーションによって無視される一時的な名前を使用して、正しいディレクトリにファイルを作成します。
  2. データをファイルに書き込み、閉じます。この時点でエラーをキャッチし、書き込み操作またはクローズが失敗した場合は続行しないでください。
  3. ファイルの名前を正しい名前に変更します。

このプロセスにより、コンテンツが完全で正しい場合にのみ永続化ファイルが正しい名前で保存されるという保証が得られます。古い永続性ファイルを新しいファイルに置き換える場合は、手順 3 までそのままにしておきます。名前変更操作は、古いファイルを新しいファイルにアトミックに (1 回の操作で) 置き換えます。

于 2013-10-12T19:45:46.553 に答える
1

オブジェクトを保存/永続化したい場合は、ObjectOutputStream クラスを参照してください。オブジェクトからのデータをシリアル化/永続化するための優れた高速な方法です。

ただし、注意してください:「保存」したいすべてのオブジェクトは、ObjectOutputStream で使用されるインターフェイス「Serializeable」を実装する必要があります。

ここに良いツタンカーメンがあります: http://www.tutorialspoint.com/java/java_serialization.htm そしてここに oracle からのドキュメントがあります: http://docs.oracle.com/javase/1.4.2/docs/api/java /io/ObjectOutputStream.html

于 2013-10-12T19:54:07.910 に答える