2012-01-20 14 views
2

私はJavaプログラミングの初心者です。私の最初のデスクトップアプリケーションを作成していますが、このアプリケーションは独自のisbnをとり、そのすべてがローカルDBに保持されているかどうかを確認します。ローカルDBから読み込み、isbndb.comからデータを要求し、ローカルDBがXML形式であるDBに入力します。次に、エントリがすべて準備が整っているかどうかを確認するときに、次の2つの方法のどれが最小のオーバーヘッドを作成するのか不思議です。JAVA:ファイルが存在する大規模なXMLデータベースを検索する場合

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

上記のDBエントリの作成時に、アプリケーションはisbn number.xml(つまり、3846504937540.xml)という名前のすべてのisbn番号に対して別ファイルを作成し、ファイル存在メソッドを使用して、ユーザーはisbnを提供しました。

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

すべてのエントリが1つの大きなXMLファイルに入力され、既存のエントリをチェックするときにSAX XMLパーサがファイルの解析に使用され、isbnが提供されたユーザがXML DBのもの。

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

すべての情報をいただければ幸いです。

+0

レコードが存在するかどうかを確認するためにdbとwhere clausuleは使用できません。 – designerrr

答えて

1

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

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

私はあまりそのタスク用のファイルシステムに頼るのアイデアを好きではない
+0

私は当初、DBシステムを使わずに行きたいと思っていましたが、そうでないと確信しており、おそらくJavaDB(Derby)の組み込みDBを使用する可能性があります。 –

+0

@CourtenayRogers JavaDB/Derbyは素晴らしい製品です。 SQLiteは、興味のある詳細な[SQLiteとDerbyの比較](http://www.sqlite.org/cvstrac/wiki?p=SqliteVersusDerby)を投稿しました。 –

0

:フォルダ場合、私はあなたのアプリケーションがいかに重要かわからないが、多くのものは、これらのXMLファイルに発生する可能性があり:)プラス非常に大きくなると、これらのファイルを階層構造のフォルダ構造に分割して、適切なパフォーマンスを得ることを検討する必要があります。

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

私はリレーショナルデータベースを使用し、各エントリのテーブルにisbn_numberカラムのインデックスを持つ新しいレコードを追加します。

もしあなたが千レコードであれば、sqliteと一緒に行くことができます。必要ならばより強力な非埋め込みDBで置き換えることができます。

0

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

クエリ:Javaは異なるアプローチが休止状態ようORMを使用することができ、"select XMLString from cacheTable where isbn='"+ isbn +"'"

を免れました。
つの列にXML文書全体を保存する代わりに、各要素および属性ごとに異なる列を使用し、簡単な長期的な設計のために文書を複数の表に分割することもできます。

0

私はあなたの2つの方法の代わりにDBMSを使うべきだと思います。

0

存在を確認するためのオーバーヘッドを最小限に抑えたい場合、オプション1はおそらくあなたが望むものです。それはダイレクトルックアップです。チェックのたびにXMLを解析すると、最悪の場合にXMLファイル全体を渡す必要があります。オプション2でキャッシュすることはできますが、オプション1よりも複雑になりますが、オプション1よりも複雑になります。

オプション1では、ディレクトリの下に保存できるファイルの数に制限があることに注意する必要があります。 XMLファイルを複数のレイヤーで格納します(例:/xmldb/38/46/3846504937540.xml)。

あなたの選択肢のどちらも長期的にデータを保存するのに適しているとは言えませんが、データが大きくなるにつれてそれらを非常に制限的に管理することは困難です。

既にDBMSを使用している人は、私は同意します。さらに、データベースとしてMongoDBのような文書ベースのデータベースを調べることをお勧めします。

関連する問題