Java デスクトップ アプリケーションでデータを保持する最善の方法は何ですか?
-
09-06-2019 - |
質問
デスクトップ アプリケーションに Java オブジェクトの大きなツリーがあり、それらをファイルとしてファイル システムに保存する最適な方法を決定しようとしています。
私が考えたことは次のとおりです。
DataOutputStream を使用して独自のシリアライザーをロールする:これにより、ファイルの内容を最大限に制御できるようになりますが、その代償としてファイルを細かく管理する必要があります。
ObjectOutputStream とそのさまざまな関連クラスを使用した従来のシリアル化:ただし、データが壊れやすいと思うので、私はそれに賛成しません。オブジェクトの構造を変更すると、そのシリアル化されたインスタンスが破壊されます。そのため、私は恐ろしいバージョン管理の悪夢に閉じ込められています。
XML シリアル化:それほど脆弱ではありませんが、直接のシリアル化よりも大幅に遅くなります。それは私のプログラムの外で変換できます。
JavaDB:私は JDBC アプリケーションを書くことに慣れているので、これを検討しました。ここでの違いは、データベース インスタンスはファイルが開かれているか保存されている間のみ存続することです。綺麗じゃないけど…後で必要になった場合に中央サーバー アーキテクチャに移行するのに役立ち、より簡単な方法でデータモデルをクエリできる可能性が導入されます。
他の人がどう思うか知りたいです。そして、上記のアプローチよりも明白で単純なアプローチを私が見逃していることを願っています。
以下の回答から抜粋したオプションをさらにいくつか示します。
- オブジェクトデータベース - ORM アプローチよりもインフラストラクチャが大幅に少なく、XML アプローチよりも高速に実行されます。ありがとうアク
解決
db4オブジェクト それが最良の選択かもしれない
他のヒント
データベースに接続する簡単な方法として Hibernate を見てみましょう。
私の経験では、おそらく組み込みデータベースを使用した方がよいでしょう。SQL は、完璧とは言えませんが、パフォーマンスが良く信頼性の高いファイル形式を設計するよりもはるかに簡単です。
JavaDB は使用したことがありませんが、うまくいきました。 H2 そして SQLite. 。SQLite は C ライブラリであるため、展開に関してはもう少し作業が必要です。ただし、データベース全体を単一のクロスプラットフォーム ライブラリに保存できるという利点があります。基本的に、これは事前にパッケージ化された汎用ファイル形式です。SQLite は非常に便利なので、スクリプト内のテキスト ファイルの代わりに SQLite を使用するようになりました。
永続化に関する小さな問題に対処している場合は、Hibernate の使用に注意してください。かなりの複雑さとライブラリのオーバーヘッドが追加されます。Hibernate は、多数のテーブルを操作する場合には非常に便利ですが、必要なテーブルが数個だけの場合はおそらく面倒になるでしょう。
codehaus.org からの XStream
XML のシリアル化/逆シリアル化はほとんどコーディングなしで実行できます。注釈を使用して微調整できます。私が取り組んでいる 2 つのプロジェクトでうまく機能しています。
ユーザー グループのプレゼンテーションを参照してください。 http://cjugaustralia.org/?p=61
何が必要かによると思います。オプションを見てみましょう:
1) すぐに破棄してください!正当化するつもりもありません。:)
2) シンプルで迅速な 1 つのメソッドの永続化が必要な場合は、それを使い続けてください。完全なデータグラフをそのまま保持します。永続化されたオブジェクトを維持する期間に注意してください。あなた自身が指摘したように、バージョン管理が問題になる可能性があります。
3) (2) よりも遅く、追加のコードが必要で、ユーザーが編集できます。私は、データが別の言語のクライアントによって使用されることになっている場合にのみ使用します。
4) いずれにしてもデータをクエリする必要がある場合は、DB ソリューションを使用してください。
まあ、あなたはすでに質問に答えたと思います:)