1

以下のテキストを http://docs.oracle.com/html/E24396_01/ejb3_overview_why.htmlから取得

「シリアライゼーションは、オブジェクトグラフを一連のバイトに変換するための Java の組み込みメカニズムであり、ネットワーク経由で送信したり、ファイルに保存したりできます。シリアライゼーションは非常に使いやすいですが、非常に制限されています。保存する必要があります。オブジェクトグラフ全体を一度に取得するため、大量のデータを扱うのには不向き.情報の更新中にエラーが発生した場合、オブジェクトに加えられた変更を元に戻すことができないため、厳密なデータの整合性を必要とするアプリケーションには不向き. 複数のスレッドまたは、プログラムが互いに競合することなく、同じシリアル化されたデータを同時に読み書きすることはできません。クエリ機能は提供されません。これらすべての要因により、シリアル化は、最も些細な永続化のニーズ以外には役に立たなくなります。」

太字のテキストについては不明です。誰かがこれをサポートする例を引用できますか?

4

1 に答える 1

0

ちょっとばかげた点ですが、この文章は、シリアル化には実際には「トランザクション」の概念が組み込まれていないことを指摘しようとしています。シリアル化されたオブジェクト グラフを作成するときは、すべてをストリームに書き込みます。これは完全に成功するか失敗し、部分的に書き込まれたストリームが残ります。同じ考え方が並行性にも当てはまります。2 つの異なるスレッドが同じストリームに同時に書き込むことはできません。

つまり、グラフを新しい場所に書き込み、完了したら新しいバイトを古い場所にスワップすることで、トランザクション ストレージを「シミュレート」できます。ただし、これはデータの最終的な保存場所 (保存場所の機能) にも依存します。シリアル化は、シリアル化されたバイトを保存する場所が必要なため、それ自体は永続化戦略ではありません。「同時実行」ポイントについても同じ議論が続きます。つまり、2 つの異なる場所に書き込み、基になるストレージの原子性保証を使用して同時実行の問題に対処できます。

長期保存のためにシリアライゼーションを使用することには、他にもより良い議論があります。つまり、アプリケーションのクラスが時間の経過とともに変化するため、後方互換性を維持することが難しいということです。

于 2012-08-29T17:53:39.643 に答える