2009-10-06 48 views
4

我有一個XML格式的DataModule中,我需要做一個搜索...如何搜索大型XML數據集?

不幸的是有超過30萬條的記錄,我不能讓一個循環來檢查一個接一個。

是否可以在不使用數據庫的情況下進行查詢?

有沒有另一種解決方案?

回答

3

XML對少量信息很好,但對於一個數據集大,關係數據庫確實是唯一明智的選擇,especially if you need to be able to query it.

+1

我剛剛讀了喬爾的軟件後,這是很對的話題 - 即使它是寫於2001年 – Alister 2009-10-06 03:14:51

3

您可以使用類似的XPath查詢:然而,這只是意味着XPath實現代表您進行搜索(這不一定會提高性能)。

1

有許多內存數據庫可能有用。至少你可以根據需要索引和查詢數據。我所知道的是來自components4developers.com。 David

2

我認爲這可能很重要,請問爲什麼使用XML存儲300k記錄?。由於XML不是用來處理數據的最有效的格式。

如果您遇到了XML問題,那麼您最好將XML文件讀入某種數據庫(您可能會忘記內存表中的內容,但是可能會再次耗盡內存)。我認爲如果你使用TXMLDocument對象來加載XML文件,你會遇到嚴重的性能問題或內存不足(當我在播放250k記錄XML文件時,我遇到了麻煩)。

您可以直接使用MSXML DOM(您可以導入類型庫),也可以使用SAX,這樣可以順序解析它,這兩者我都沒有多少經驗。

+1

是,SAX是要走的路。它曾經是MSXML的一部分。現在還不確定。 – 2009-10-06 10:20:11

0

你不說你是如何實現數據源的。我已經使用TClientDataSet通過TXMLTransformProvider(確定不是300K記錄)連接,但數千。並簡單地設置過濾器和過濾的屬性似乎「查詢」它就好了...

或者我錯過了什麼?

+0

我讀過它。你知道一個簡單的例子,所以我可以理解嗎? – Leo 2009-10-06 17:51:39

+0

1.在DM上配置TClientDataSet。在DM上配置一個TXMLTransformProvider。將Tranform設置爲提供者。從工具菜單啓動XML Mapper - 學習如何使用它:(這不是很直觀,一旦文件通過XTR文件進行映射並連接,就像往常一樣使用TDatasoure。 – Despatcher 2009-10-07 17:28:24