2

私はJavaプログラミングにまったく慣れていないので、最初のデスクトップアプリを書いています。このアプリは一意のisbnを取り、最初にすべてがローカルDBに保持されているかどうかを確認します。 isbndb.com からデータを要求し、ローカル DB が XML 形式である DB に入力するのではありません。ここで疑問に思っているのは、次の 2 つの方法のどちらが、すべての準備ができているエントリが存在するかどうかを確認するときに、オーバーヘッドが最も少ない方法であるということです。

方法 1.) ファイルが存在します。

上記の DB エントリを作成すると、アプリは isbn number.xml (つまり、3846504937540.xml) という名前の isbn 番号ごとに個別のファイルを作成し、チェック時に file exists メソッドを使用して、ユーザーが提供した isbn を使用してすべての準備ができているエントリが存在するかどうかをチェックします。 .

方法 2.) SAX XML パーサー。

すべてのエントリは 1 つの大きな XML ファイルに入力され、既存のエントリをチェックするときは、SAX XML パーサーを使用してファイルを解析し、ユーザーが指定した isbn が XML DB 内のものと照合されて一致するかどうかがチェックされます。

注 : 結果のエントリは、時間の経過とともに数千になる可能性があります。

どんな情報でも大歓迎です。

4

5 に答える 5

1

どちらの方法もそれほど素晴らしいとは思いません。DBMS を使用してデータを格納することを強くお勧めします。システムに DBMS がない場合、または DBMS がインストールされていないシステムで実行できるアプリが必要な場合は、SQLiteの使用を検討してください。David Crawshawによる SQLiteJDBCを使用して Java から使用できます。

2 つの方法に関する限り、最初の方法では膨大な量のファイルが乱雑になり、メンテナンスと一貫性の頭痛の種は言うまでもありません。2 番目の方法は、基本的にクエリごとに (平均して) 半分のデータベースを読み取る必要があるため、かなりの数のエントリがあると遅くなります。DBMS では、すばやく検索する必要がある情報のインデックスを定義することで、これを回避できます。DBMS は自動的にインデックスを維持します。

于 2012-01-20T17:21:03.883 に答える
0

存在を確認するためだけにオーバーヘッドを最小限に抑えたい場合は、直接検索であるため、おそらくオプション 1 が必要です。チェックのために毎回 XML を解析すると、最悪の場合、XML ファイル全体を通過する必要があります。オプション 2 でキャッシングを行うことはできますが、オプション 1 よりも複雑になります。

ただし、オプション 1 では、1 つのディレクトリに格納できるファイル数に制限があることに注意する必要があるため、XML ファイルを複数のレイヤー (たとえば /xmldb/38/46/3846504937540.xml など) ごとに格納する必要がある可能性があります。 )。

とはいえ、どちらのオプションも長期的にデータを保存するのに適した方法ではありません。データが大きくなるにつれて、それらは非常に制限的になり、管理が難しくなることがわかります。

人々はすでに DBMS の使用を推奨しており、私も同意します。その上で、MongoDB のようなドキュメントベースのデータベースをデータベースとして検討することをお勧めします。

于 2012-01-20T17:27:48.877 に答える
0

そのタスクをファイル システムに依存するという考えはあまり好きではありません。アプリケーションがどれほど重要かはわかりませんが、これらの xml ファイルに多くのことが起こる可能性があります :) さらに、フォルダが非常に大きくなると、適切なパフォーマンスを得るには、これらのファイルを階層フォルダー構造に分割することを検討する必要があります。

一方、頻繁に更新する必要がある場合、xml ファイルをデータベースとして使用する理由がわかりません。

リレーショナル データベースを使用し、各エントリのテーブルに新しいレコードを追加し、isbn_number 列にインデックスを付けます。

数千のレコードがある場合は、sqliteを使用することをお勧めします。必要に応じて、コードを変更せずに (または少し :) )、より強力な非埋め込み DB に置き換えることができます。

于 2012-01-20T17:21:24.540 に答える
0

XML 文字列だけでなく ISBN 番号も含めるように db テーブルを拡張します。
次に、ISBN 列に基づいて XML 列を選択します。

クエリ: Java エスケープ、"select XMLString from cacheTable where isbn='"+ isbn +"'"

別のアプローチとして、 HibernateのようなORMを使用することもできます。 ORM では、XML ドキュメント全体を 1 つの列に保存する代わりに、要素と属性ごとに異なる列を使用し、長期的な設計を単純化するためにドキュメントを複数のテーブルに分割することもできます。

于 2012-01-20T17:23:05.957 に答える
0

2つの方法の代わりにDBMSを使用する方がよいと思います。

于 2012-01-20T17:26:48.443 に答える