我有一個XML格式的DataModule中,我需要做一個搜索...如何搜索大型XML數據集?
不幸的是有超過30萬條的記錄,我不能讓一個循環來檢查一個接一個。
是否可以在不使用數據庫的情況下進行查詢?
有沒有另一種解決方案?
我有一個XML格式的DataModule中,我需要做一個搜索...如何搜索大型XML數據集?
不幸的是有超過30萬條的記錄,我不能讓一個循環來檢查一個接一個。
是否可以在不使用數據庫的情況下進行查詢?
有沒有另一種解決方案?
XML對少量信息很好,但對於一個數據集大,關係數據庫確實是唯一明智的選擇,especially if you need to be able to query it.
您可以使用類似的XPath查詢:然而,這只是意味着XPath實現代表您進行搜索(這不一定會提高性能)。
有許多內存數據庫可能有用。至少你可以根據需要索引和查詢數據。我所知道的是來自components4developers.com。 David
我認爲這可能很重要,請問爲什麼使用XML存儲300k記錄?。由於XML不是用來處理數據的最有效的格式。
如果您遇到了XML問題,那麼您最好將XML文件讀入某種數據庫(您可能會忘記內存表中的內容,但是可能會再次耗盡內存)。我認爲如果你使用TXMLDocument對象來加載XML文件,你會遇到嚴重的性能問題或內存不足(當我在播放250k記錄XML文件時,我遇到了麻煩)。
您可以直接使用MSXML DOM(您可以導入類型庫),也可以使用SAX,這樣可以順序解析它,這兩者我都沒有多少經驗。
是,SAX是要走的路。它曾經是MSXML的一部分。現在還不確定。 – 2009-10-06 10:20:11
你不說你是如何實現數據源的。我已經使用TClientDataSet通過TXMLTransformProvider(確定不是300K記錄)連接,但數千。並簡單地設置過濾器和過濾的屬性似乎「查詢」它就好了...
或者我錯過了什麼?
我讀過它。你知道一個簡單的例子,所以我可以理解嗎? – Leo 2009-10-06 17:51:39
1.在DM上配置TClientDataSet。在DM上配置一個TXMLTransformProvider。將Tranform設置爲提供者。從工具菜單啓動XML Mapper - 學習如何使用它:(這不是很直觀,一旦文件通過XTR文件進行映射並連接,就像往常一樣使用TDatasoure。 – Despatcher 2009-10-07 17:28:24
對於SAX解析器德爾福,檢查此#1問題:
我剛剛讀了喬爾的軟件後,這是很對的話題 - 即使它是寫於2001年 – Alister 2009-10-06 03:14:51