2016-04-15 23 views
3

多くのSPARQLシステムでは、トリプルをグラフパターンで並べ替えてクエリを最適化できます。MarkLogicでのSPARQLクエリの最適化

Jenaでは、クエリの初期段階で結果セットを最も制限するトリプルパターンを配置することでクエリを最適化することができます(そして常に言及するようにしてください既にバインドされている変数)。明らかに、Marklogic SPARQLはトリプルパターンの順序に敏感です(私はいくつかのクエリを再配置して、それらが実行されることを発見しました)より速くまたは遅く、10倍も)。しかし、私は、シーケンスがより速くまたは遅くなるような韻や理由を見つけることはできません。私がJenaとうまく使用した経験則は、MarkLogicでは動作しません。

私はGoogledについて、MarkLogicのドキュメントを見て、これについてのアドバイスは見つかりませんでした。 MarkLogicのクエリエンジンの作者のいずれかにこれに関するメモを付けましたか?

+0

"多くのSPARQLシステムでは、トリプルをグラフパターンで並べ替えることでクエリを最適化できます。"実際には、同等であるはずです。特定のパターンが見つかったことがありますか?たとえば一致回数の少ないトリプルを早くすると結果が速くなります。 –

+1

SPARQLの唯一の要件は、クエリの順序に関係なく結果が同じであることです。パフォーマンスはまったく別の問題です。 – scotthenninger

+0

ほとんどのApache Jenaストレージ・レイヤーは、バージョンによって部分的な並べ替えを実行します。しかしそれはかなり軽いです。部分的な並び替えに同じ重要度の2つのトリプルパターンがある場合、それらは指定された順序で残ります。 – AndyS

答えて

0

私はMarkLogicのPMチームとエンジニアリングチームの専門家に尋ねました。私たちは洗練されたクエリオプティマイザを持っているので、パターンに対してどのような順序であっても同じパフォーマンスを得なければならないと言われました。また、使用しているMarkLogicの特定のバージョン、何がoptimization level、およびいくつかのサンプルクエリを知ることは有用でしょう。

+1

ドキュメントは、最適化レベルが何をしているのか、「レベル0(オフ)、1および2が認識されます。デフォルトは1です。どのレベルを使用し、どのような最適化が期待できるのか? – scotthenninger

2

最適化レベルは、最適なクエリプランを見つけるために費やす時間をオプティマイザに伝えるヒントを提供します。 オプティマイザは、最適な計画を見つけるのにしばらく時間を費やしますが、最適な計画を使用することの良さとその計画を見つけるために費やされる時間のバランスをとる必要があります。私たちの多くは、実際にこのトレードオフを経験しました。(!)

最適化レベル1は「最適なプランを探していますが、狂ってはいけません。レベル2は「ベストプラクティスを見つけるためにもっと努力する」と述べています。レベル0では「そのままクエリを取る」と表示されます。

ほとんどのクエリでレベル1が適切です。これがデフォルトです。特に複雑なクエリを使用している場合は、レベル2で試して、クエリを高速化する計画を見つけるために余分な時間を費やしても、実際にはクエリ全体の時間がかかります。非常に単純なクエリーをお持ちの場合はレベル0を試してみてください。