2012-04-11 9 views
2

ファイルあたり50KBのサイズのXMLファイルが約50000個あります。これらのファイルでデータを検索したいのですが、これまでの私の解決策は非常に遅いです。検索のパフォーマンスを向上させる方法はありますか?何千ものXMLファイルで検索する

+0

データをデータベースに移動する可能性はありますか?そうでない場合は、クエリの高速化に役立つインデックスを作成できますか? –

+0

検索する必要がある新しいファイルを追加していますか?検索の理由は何ですか(ちょうど高レベル...常に顧客情報などを抽出する必要があります)。評価に役立つかもしれません。前述したように、Lucene、Loading to DBなどは助けになるかもしれませんが、あなたの望む結果に合わないかもしれません。 – scarpacci

答えて

1

ファイルの内容をデータベースに常に索引付けし、そこで検索を実行できます。データベースは検索の面でかなり優れています。

6

軽量で高速のフラットファイル検索インデックスエンジンLucene.NETを使用できます。

開始チュートリアルについては、http://codeclimber.net.nz/archive/2009/09/02/lucene.net-your-first-application.aspxを参照してください。

+0

Luceneはこのようなもののために作られました。人々は常にデータベースに頼っていますが、フルテキストインデックスはほぼ確実に質問者が本当に必要としています。 – Chris

+0

それはむしろ彼らが何を探しているかによって異なります。テキスト内の単語を検索している場合、Luceneは問題ありません。あなたがウルグアイのトマトの平均価格を知りたければ、フリーテキストシステムはあなたに言いません。 –

0

多くの場合、これらのXMLファイルの性質によって異なります。再生成されない50,000のXMLファイルですか?または彼らは絶えず変化していますか? XMLファイル内に、検索のためにインデックスを付ける特定の要素だけがありますか?

確かに50KBのファイルハンドルを開いて内容を読み、テキストを検索するのは非常に遅くなります。私はPavelに同意します。データをデータベースに格納すると多くのパフォーマンスが得られますが、XMLファイルが頻繁に変更される場合は、データベースとの同期を維持するための方法が必要です。

独自のソリューションを展開する場合は、すべてのファイルをスキャンして単語インデックスを作成することをお勧めします。ファイルが頻繁に変更された場合は、「最終変更日」を記録しておき、ファイルが最近変更された場合は、インデックスを更新してください。このようにして、ginormous wordインデックスが1つだけ作成され、 "foo"の検索が行われている場合は、ファイル39209.xml、file57209、およびfile01009.xmlにその単語が含まれていることがわかります。 XMLの性質に応じて、要素をインデックスファイルに格納することもできます(基本的に、すべてのXMLファイルを1つにまとめるようになります)。

1

私はあなたがWindowsを使用していると仮定しており、Windowsデスクトップ検索を使用してファイルをすばやく検索することができます。ファイルが変更されたときに更新されるWindowsインデックスを使用します。 .NETから使用できるSDK is available here

0

Splunkインスタンスをスピンアップしてファイルにインデックスを付けることができます。これは主にログパーサーとして課金されますが、依然としてお客様のニーズに対応します。ファイルを単語にトークン化し、それらの単語を索引付けし、複雑な検索基準をサポートするWebベースの検索ツールとCLIベースの検索ツールの両方を提供します。

+0

ありがとう、あなたの返信のために、実際にはxmlファイルはデータベースに変換することはできませんが、私は1つのテーブル内のすべてのユニークな単語をインデックスし、それらをファイルIDにリンクします。本当に事前に感謝します。 –

0

XMLデータベースを使用します。通常の推奨事項はオープンソース、MarkLogicを商用したい場合はeXistですが、マイクロソフトにとって重要なことであり、XML機能の究極を望んでいない場合はSQL Serverを使用できます。そして、あなたがそれらを評価したいなら、他にもたくさんのものがあります。すべてのデータベース製品は学習曲線が急峻ですが、これらのデータボリュームでは適切なソリューションです。

関連する問題