XML を含む DataModule があり、検索を行う必要があります...
残念ながら、300,000 を超えるレコードがあり、1 つずつ確認するループを作成できません。
データベースを使わずにクエリを作成することはできますか?
別の解決策はありますか?
XML を含む DataModule があり、検索を行う必要があります...
残念ながら、300,000 を超えるレコードがあり、1 つずつ確認するループを作成できません。
データベースを使わずにクエリを作成することはできますか?
別の解決策はありますか?
XML は少量の情報には問題ありませんが、それほど大きなデータセットの場合、特にクエリを実行できるようにする必要がある場合は、リレーショナル データベースが唯一の適切な選択肢です。
XPath のようなものを使用して検索できます: ただし、これは XPath 実装がユーザーに代わって検索を行うことを意味するだけです (必ずしもパフォーマンスが向上するとは限りません)。
なぜXMLを使用して300kレコードを保存しているのかを尋ねることはおそらく重要だと思います。。XMLは、データを操作するための最も効率的な形式ではないためです。
XMLに固執している場合は、XMLファイルをある種のデータベースに読み込むのが最善かもしれません(メモリ内のテーブルを使用することはできますが、メモリが不足する可能性があります)。TXMLDocumentオブジェクトを使用してXMLファイルをロードすると、深刻なパフォーマンスの問題が発生するか、メモリが不足すると思います(しばらく前に、250kレコードのxmlファイルで遊んでいたときに問題が発生しました)。
MSXML DOMを直接使用する(おそらくタイプライブラリをインポートすることができます)か、SAXを使用して順次解析できる可能性がありますが、どちらも私はあまり経験がありません。
有用なメモリ内データベースが多数あります。少なくとも、必要に応じてデータのインデックス作成とクエリを実行できます。私が知っているのは、components4developers.com のものです。デビッド
Delphi 用の SAX パーサーについては、この Stackoverflow の質問を確認してください。
データソースをどのように実装しているかは言いません。私は TXMLTransformProvider 経由で接続された TClientDataSet を使用しました (300K レコードではなく OK) が、数千のレコードに対して使用しました。フィルターとフィルター処理されたプロパティを設定するだけで、「クエリ」のように見えます...
それとも私は何かを逃しましたか?