0

私は野球カードに関するデータを追跡するJavaでプログラムを書いています。データを永続的に保存する方法を決定しようとしています。私はデータをXMLファイルに保存することに傾倒してきましたが、XMLAPIに慣れていません。(私はいくつかのオンラインチュートリアルを読み、javax.xml階層内のクラスの実験を開始しました。)

ソフトウェアには主な使用例が必要です。ユーザーはカードを追加したり、カードを検索したりできるようになります。

ユーザーがカードを追加したら、すぐにデータを永続ストレージにコミットしたいと思います。標準のAPIを使用すると、ランダムアクセス方式でデータを挿入できますか(または追加しても問題ない場合があります)。

ユーザーがカードを検索するとき(たとえば、プレーヤーの名前で)、ファイル全体をロードする必要はなく、ストレージからリストをロードしたいと思います。

私の最大の懸念は、多数の一意のカード(数千近く、場合によってはそれ以上)のデータを保存する必要があることです。プログラムが開いている間、すべてのカードのリストをメモリに保存したくありません。私はテストを実行していませんが、メモリの制約に簡単にぶつかることができると思います。

XMLは最善の解決策ではないかもしれません。ただし、インストールをできるだけ簡単にしたいので、JDBCまたはサードパーティのライブラリを使用した本格的なデータベースを避けようとしています。

ですから、私は正しい方向に向かっているかどうかを尋ねていると思います。そうであれば、XMLを希望どおりに使用する方法についてもっと学ぶことができます。そうでない場合、このタスクを実行するために使用できる他の種類のストレージについて誰かが提案を持っていますか?

4

1 に答える 1

3

私は確かにXMLの使用を思いとどまらせるつもりはありませんが、あなたの文脈ではいくつかの欠点があります。

「標準APIを使用すると、ランダムアクセス方式でデータを挿入できますか?」

はい、メモリ内です。ただし、モデル全体をファイルに保存し直す必要があります。

「ユーザーがカードを検索するとき(たとえば、プレーヤーの名前で)、ファイル全体をロードする必要はなく、ストレージからリストをロードしたいのですが」

複数のユーザーがファイルの読み取り/書き込みを行うことが予想されない限り、ロード時にファイル/モデル全体をメモリにプルし、保存するまでそこに保持します(定期的にバックグラウンドを書き込むことをお勧めします)

プログラムが開いている間、すべてのカードのリストをメモリに保存したくありません。私はテストを実行していませんが、メモリの制約に簡単にぶつかることができると思います

それが私の関心事です。ただし、SAXパーサーを使用してファイルをカスタムモデルに読み込むことはできます。これにより、メモリのオーバーヘッドが削減されます(DOMパーサーはメモリに少し貪欲になる可能性があるため)

「ただし、インストールをできるだけ簡単にしたいので、JDBCを使用した本格的なデータベースを避けようとしています。」

私はこの分野でもう少し研究をしたいと思います。私は(個人的に)大量のデータを保存するためにH2HSQLDBを頻繁に使用しています。これらは、追加のインストール(プログラムにリンクされたJarファイル)や特別なサーバー/サービスを必要としない小さな個人用データ​​ベースシステムです。

これらを使用すると、データストア全体で複雑な検索を簡単に作成できます。そうしないと、自分で作成する必要があります。

XMLを使用する場合、私はおそらく3つのことのいずれかを実行します

1-XMLドキュメントをメモリに保持する場合は、検索用のXPath(簡単なチュートリアルJavaのAPI )に慣れているでしょう。

2-オブジェクトを使用してデータの「モデル」を作成し、さまざまなノードを表し、SAXを使用して読み取ります。書くのはもう少し難しいかもしれません。

3-単純なSQLDB(およびオブジェクトモデル)を使用します-プロセス全体(IMHO)を単純化します

追加

私があなたに十分に捨てなかったかのように;)

あなたが本当にXMLをしたいのなら(そして繰り返しますが、私はあなたをそれから落胆させません)、あなたはXMLデータベーススタイルのソリューションを見てみるのを検討するかもしれません

Apache Xindice(明らかに引退)

またはあなたは他の人が考えるのを見ることができます

例えば ​​;)

于 2012-08-09T00:25:55.503 に答える