2012-04-04 9 views
3

Ich bin neu in Marklogic Welt. Mein Programm verwendet eine benutzerdefinierte Java-App, um Abay.com abzurufen, um den XML-Daten-Feed alle 30 Sekunden abzurufen. Ergebnisse werden im XML-Format zurückgegeben. Die Java-App verwendet die XCC API (Marklogic API), um die abgerufenen Daten in einer einzigen XML-Datei in ML einzufügen. Die Größe der Daten beträgt 6 MB pro Minute, wenn die Anwendung für einen Tag ausgeführt wird oder so viele Daten in GBs wachsen. Mir ist keine Admin-Konfiguration bekannt, die ich machen muss, um diese Menge an riesigen Daten in eine einzige XML-Datei in MarkLogic zu schreiben. Kann jemand meinen Ansatz validieren oder vorschlagen, dass ich irgendwelche Konfigurationsänderungen auf Admin-Ebene vornehmen muss? Die Struktur von XML ist wie folgt ...Optimale Speicherung von XML-Daten in Marlogic

<?xml version="1.0" encoding="UTF-8"?>  
<moreovercontentdump>   
<article id="_6232903453">   
<description></description> 
<author></author>  
<source_category>Local</source_category>  
<genre>General</genre> 
<publisher></publisher> 
<media_type>text</media_type> 
<docurl>http://www.ilrestodelcarlino.it</docurl>  
<harvest_time>Apr 4 2012 4:28PM</harvest_time>  
<valid_time>May 14 2012 4:27PM</valid_time>  
</article> 
<article id="_6232903453">   
<description></description> 
<author></author>  
<source_category>Local</source_category>  
<genre>General</genre> 
<publisher></publisher> 
<media_type>text</media_type> 
<docurl>http://www.ilrestodelcarlino.it</docurl>  
<harvest_time>Apr 4 2012 4:28PM</harvest_time>  
<valid_time>May 14 2012 4:27PM</valid_time>  
</article> 
<article id="_6232903453">   
<description></description> 
<author></author>  
<source_category>Local</source_category>  
<genre>General</genre> 
<publisher></publisher> 
<media_type>text</media_type> 
<docurl>http://www.ilrestodelcarlino.it</docurl>  
<harvest_time>Apr 4 2012 4:28PM</harvest_time>  
<valid_time>May 14 2012 4:27PM</valid_time>  
</article> 
</moreovercontentdump>   

Antwort

2

Im Allgemeinen werden Sie viel besser gedient, wenn Sie jede Antwort von Moreover.com in Marklogic speichern, wie sein eigenes Dokument. In einigen Fällen sind Dokumente in MarkLogic wie Zeilen in einem RDBMS.

Auch wenn Sie eine dieser sehr 30 Sekunden einfügen, habe ich Probleme zu sehen, wie das zu 6MB pro Minute der Aufnahme kommt. Gibt es einige Details, die du weggelassen hast?

+0

1. jeder Treffer zu außerdem.com holen mich Tausende von Artikeln (d. H. Etwa 6 mb pro Minute). Ich habe nicht alle Tag-Details in Beispiel-XML oben angegeben. 2. Wenn das Ergebnis jedes Treffers als neue XML-Datei in marklogic gespeichert wird, gibt es jeden Tag 2880 Dateien in der marklogic DB und die Nummer wird jeden Tag wachsen. Gibt es ein Problem? – Pankaj

+0

Wenn Sie die Dokumente in Artikel aufteilen, können Sie möglicherweise eine Deduplizierung für Artikel durchführen, die sich nicht geändert haben, wodurch sich der Gesamteinzug pro Tag verringert. "Gibt es ein Problem?" ist eine schwierige Frage zu beantworten. Datenbanken können mit 2.880 Einsätzen pro Tag klar umgehen, solange Sie die Hardwarekapazität für diesen Durchsatz haben. – derickson

7

Mit Blick auf die Beispiel-XML, denke ich, dass Sie wahrscheinlich jeden Artikel in einem eigenen Dokument speichern möchten. Sie könnten einen FLWOR-Ausdruck schreiben, um xdmp:document-insert aufzurufen, oder xdmp:spawn anrufen, wenn Sie es vorziehen würden, jedes Dokument in eine asynchrone Aufgabe einzufügen.

Die einfachste Code könnte wie folgt aussehen:

for $article in xdmp:http-get($some-url, $options)/moreovercontentdump/article 
let $uri := concat('moreover/', $article/@id) 
return xdmp:document-insert($uri, $article) 

Sie diesen Code verbessern könnte durch einige der ursprünglichen XML neu zu schreiben. Beispielsweise möchten Sie die Elemente und valid_time im xs: dateTime-Format neu formatieren. Auf diese Weise können Sie einen Bereichsindex für diese Werte erstellen.