2013-02-21 66 views
2

我在uri中有大約15000條xml格式的記錄,比如說:「documents/products/specs/*.xml」。 每個xml大小約爲25千字節。我連接到該服務器marklogic uisng具有XCC client遠程Apache Tomcat服務器(爪哇),它試圖執行一個AdHocQuery它類似於這樣的事情:Marklogic:查詢響應時間非常高

let $a := cts:uri-match('documents/products/specs/*.xml') 
      for $xml in $a 
      return fn:doc($a) 

(for循環在Java中實現)。

這工作正常。但對於計數較大的記錄,如果記錄爲15000條,則需要60分鐘,所有服務器和Internet速度都非常好。 (uri中所有文檔的總大小約爲20 MB,不應超過20分鐘)。

有什麼解決方法嗎?

+1

15000 * 25 = 375000不是20 MB。 – mblakele 2013-02-21 17:07:36

回答

1

你正在做的是要求所有文件的全部內容。這不是一個典型的查詢,而是一個數據庫轉儲。您顯示的查詢將緩衝所有這些數據,然後通過tomcat發送它,然後再緩衝所有數據,然後將其發送給您。 這是一個要在一個請求中發送的大型數據集。

查詢的目的是什麼?如果你想獲得所有的文檔,你應該使用mlcp這樣的程序將其轉儲出來,或者通過首先收集URI然後獲取文檔來以較小的批量獲取它們。通過並行執行文檔讀取可以大幅提高速度。你可以看到在xmlsh Java源代碼,演示如何在XCC並行

取文件
http://xmlsh.svn.sourceforge.net/viewvc/xmlsh/extensions/marklogic/src/org/xmlsh/marklogic/get.java?revision=792&view=markup 

我的猜測(糾正我,如果我錯了)是您剛剛試驗和不實際需要的所有文檔的例子。在這種情況下,應該嘗試更現實的查詢。

+0

要求是使ms-excel兼容的csv文件代表目錄中的所有文件。 – 2013-02-21 12:31:14

+0

所以問這個問題:「我如何最好地製作一個兼容ms-excel的csv文件來代表MarkLogic目錄中的所有文檔?」 – mblakele 2013-02-21 17:03:50

+0

@mblakele:http://stackoverflow.com/questions/15016876/ms-excel-compatible-csv-file-representing-all-documents-in-a-marklogic-directory – 2013-02-22 04:33:24

0

查詢花費這麼長時間的原因是因爲Marklogic服務器正在從磁盤讀取大部分文件。除非你有一個非常大的樹高速緩存大小。你需要做的是降低你的查詢範圍。也許給文件添加一些索引。

所有這一切說,如果你想要做的是ETL的數據出來,那麼你可能想批量請求。

2

試試這個:

cts:search(
    fn:doc(), 
    cts:document-query(
     cts:uri-match('documents/products/specs/*.xml') 
    ), "unfiltered" 
)