2016-04-15 14 views
3

In vielen SPARQL-Systemen können Sie Ihre Abfragen optimieren, indem Sie die Tripel in einem Diagrammmuster neu anordnen. In anderen können Sie nicht (die Abfrage-Engine optimiert sie mit einigen eigenen Heuristiken).Optimieren von SPARQL-Abfragen in MarkLogic

In Jena können Sie Abfragen optimieren, indem Sie dreifache Muster setzen, die die Ergebnismenge in der Abfrage am meisten einschränken (und dabei immer zu erwähnen eine Variable, die bereits gebunden ist). In anderen Abfrage-Engines funktioniert diese Strategie nicht (da sie die Abfrage anders verarbeiten)

Offenbar ist Marklogic SPARQL empfindlich auf die Reihenfolge der Dreifachmuster (Ich habe einige Abfragen neu angeordnet und festgestellt, dass sie gehen werden schneller oder langsamer, bis zu 10x). Aber ich kann keinen Reim oder einen Grund dafür finden, welche Sequenzen schneller oder langsamer werden. Die Heuristiken, die ich erfolgreich mit Jena verwendet habe, funktionieren nicht mit MarkLogic.

Ich habe über die MarkLogic-Dokumentation gegooglet und habe keine Hinweise dazu gefunden. Haben irgendwelche MarkLogic-Engine-Writer Anmerkungen dazu gemacht?

+0

"In vielen SPARQL-Systemen können Sie Ihre Abfragen optimieren, indem Sie die Tripel in einem Diagrammmuster neu anordnen." Das ist eigentlich etwas überraschend, wenn es stimmt. soll gleichwertig sein. Haben Sie bestimmte Muster gefunden (z. B. wenn Sie früher Tripel mit weniger Übereinstimmungen platzieren, erzielen Sie schnellere Ergebnisse)? –

+1

Die einzige Anforderung in SPARQL ist, dass die Ergebnisse unabhängig von der Reihenfolge in der Abfrage identisch sind. Leistung ist ein ganz anderes Thema. – scotthenninger

+0

Die meisten Speicherschichten von Apache Jena führen eine teilweise Neuordnung durch (abhängig von der Version). es ist jedoch ziemlich hell. Wenn die teilweise Neuordnung zwei Dreifachmuster von gleicher Wichtigkeit hat, belässt sie sie in der gegebenen Reihenfolge. – AndyS

Antwort

0

Ich fragte unsere Experten für die PM- und Engineering-Teams in MarkLogic. Mir wurde gesagt, "Sie sollten die gleiche Leistung erzielen, egal welche Reihenfolge Sie für Muster haben, da wir einen ausgefeilten Abfrageoptimierer haben. Wenn das nicht stimmt, dann reichen Sie bitte einen Fehler ein." Es wäre auch nützlich zu wissen, welche spezifische Version von MarkLogic Sie verwenden, was optimization level und einige Beispielabfragen sind.

+1

Die Dokumente sagen nicht, was die Optimierungsstufen tun, nur dass "Ebenen von 0 (aus), 1 und 2 erkannt werden. Der Standardwert ist 1." Welches Level sollte verwendet werden und welche Optimierungen sind zu erwarten? – scotthenninger

2

Die Optimierungsstufe gibt dem Optimierer einen Hinweis, wie viel Zeit es kostet, den besten Abfrageplan zu finden. Jeder Optimierer verbringt einige Zeit, um den besten Plan zu finden, muss aber die Zeit, die er damit verbracht hat, diesen Plan zu finden, gegen die Güte des bestmöglichen Plans abwägen. Die meisten von uns haben diesen Kompromiss im wirklichen Leben erlebt (!)

Optimierungslevel 1 sagt: "Arbeitet auf der Suche nach dem besten Plan, aber seid nicht verrückt". Level 2 sagt "tu mehr Arbeit, um den besten Plan zu finden". Level 0 sagt "nimm die Abfrage so wie sie ist".

Für die meisten Abfragen ist Level 1 geeignet, und das ist der Standardwert. Wenn Sie eine besonders komplexe Abfrage haben, versuchen Sie es mit Level 2 und sehen Sie, ob die zusätzliche Zeit, die Sie für die Suche nach einem Plan benötigen, um die Abfrage schneller zu machen, sich tatsächlich in der gesamten Abfragezeit auszahlt. Wenn Sie sehr einfache Abfragen haben, versuchen Sie es mit Level 0.