4

XML を含む DataModule があり、検索を行う必要があります...

残念ながら、300,000 を超えるレコードがあり、1 つずつ確認するループを作成できません。

データベースを使わずにクエリを作成することはできますか?

別の解決策はありますか?

4

6 に答える 6

3

XML は少量の情報には問題ありませんが、それほど大きなデータセットの場合、特にクエリを実行できるようにする必要がある場合は、リレーショナル データベースが唯一の適切な選択肢です。

于 2009-10-06T02:24:47.930 に答える
3

XPath のようなものを使用して検索できます: ただし、これは XPath 実装がユーザーに代わって検索を行うことを意味するだけです (必ずしもパフォーマンスが向上するとは限りません)。

于 2009-10-06T02:31:17.977 に答える
2

なぜXMLを使用して300kレコードを保存しているのかを尋ねることはおそらく重要だと思います。。XMLは、データを操作するための最も効率的な形式ではないためです。

XMLに固執している場合は、XMLファイルをある種のデータベースに読み込むのが最善かもしれません(メモリ内のテーブルを使用することはできますが、メモリが不足する可能性があります)。TXMLDocumentオブジェクトを使用してXMLファイルをロードすると、深刻なパフォーマンスの問題が発生するか、メモリが不足すると思います(しばらく前に、250kレコードのxmlファイルで遊んでいたときに問題が発生しました)。

MSXML DOMを直接使用する(おそらくタイプライブラリをインポートすることができます)か、SAXを使用して順次解析できる可能性がありますが、どちらも私はあまり経験がありません。

于 2009-10-06T03:29:17.710 に答える
1

有用なメモリ内データベースが多数あります。少なくとも、必要に応じてデータのインデックス作成とクエリを実行できます。私が知っているのは、components4developers.com のものです。デビッド

于 2009-10-06T02:51:46.817 に答える
0

Delphi 用の SAX パーサーについては、この Stackoverflow の質問を確認してください。

Delphi および Free Pascal 用の SAX パーサーはありますか?

于 2010-11-17T17:24:47.280 に答える
0

データソースをどのように実装しているかは言いません。私は TXMLTransformProvider 経由で接続された TClientDataSet を使用しました (300K レコードではなく OK) が、数千のレコードに対して使用しました。フィルターとフィルター処理されたプロパティを設定するだけで、「クエリ」のように見えます...

それとも私は何かを逃しましたか?

于 2009-10-06T16:08:18.927 に答える