2016-03-18 15 views
1

セサームのセイルインターフェイスがSPARQLの更新ステートメント(ADD、COPY、...)に関してどのように機能するのか、そしてこれが実際の実装にどのように伝播するのかを理解したいと思っています。そのインタフェース。RDFセイルの実装のためのゴマの戦略

たとえば、SPARQL ADD文がSailUpdateExecutorクラスのexecuteAddメソッドによって実装されていることは間違いありませんか? https://bitbucket.org/openrdf/sesame/src/aa0dd3b04738e707c582e4dda14a0a0c5a77ab51/core/repository/sail/src/main/java/org/openrdf/repository/sail/helpers/SailUpdateExecutor.java?at=master&fileviewer=file-view-defaultを参照してください。

これが正しい場合は、SAILレイヤーがソースグラフからトリプル抽出ごとに3倍であり、ターゲットグラフに挿入されていることを修正しますか?

もしそうなら、SAIL実装のこの動作を上書きすることは可能ですか? たとえば、この操作はネイティブの一括インデックス操作によってnativeRDFストアで効率的に実装できると思いますか?一般的な実装では、内部データ構造の利点を得ることができないため、実行は最適ではありません。

帆インターフェイスでこれが予期されていない場合は、この戦略を適用するSESAMEクエリインターフェイスがありますか?可能な限りクエリをストアにプッシュしますか?または、戦略が逆の場合:クエリを調べることができる場合はすぐに実行されます。

最後に、クエリ実行戦略を調整できますか?私はソースコード参照でクエリの除外オプティマイザを見つけましたが、ストアインスタンスごとに設定できるかどうかはわかりません。

フィードバックが

答えて

1

SPARQLはSailUpdateExecutorクラスのexecuteAddメソッドによって実装されたステートメントを追加することを正しいことを高く評価していますか?

これは間違いありません。

Iはい、それはデフォルトの実装であるソース・グラフからSAIL層が三重抽出当たり三重あることinterprete修正及び目標グラフ

に挿入します。

ただし、実際に挿入されたデータを実際に処理する方法は、これによって規定されていないことに注意してください。トリプルをトリプルで追加するだけで済みますし、特定のストアで最も効率的な方法でバッチ処理を選択することもできます。このため、実際の挿入に合わせてUpdateContextオブジェクトが提供されています。これは、これらの挿入が同じ全体的な更新操作に属していることを基礎となるストアに通知するマーカーオブジェクトです。

もしそうなら、SAIL実装のこの動作を上書きすることは可能ですか?たとえば、この操作はネイティブ・バルク・インデックス操作によってnativeRDFストアに効率的に実装できますか?一般的な実装では、内部データ構造の利点を得ることができないため、実行は最適ではありません。

としては、基礎となるストアがそのパラメータの1つとしてUpdateContextオブジェクトを有するSailConnectionメソッドの実装でこれを行うことができ、上記述べました。

SailUpdateExecutorは、単に論理レベルで更新を実行します。その実行を最適化することは、依然として基礎となるストアまでです。

帆インターフェイスでこれが予期されていない場合は、この戦略を適用するSESAMEクエリインターフェイスがありますか?できるだけストアにクエリをプッシュしますか?または、戦略が逆の場合:クエリを調べることができる場合はすぐに実行されます。

私は従わかなりわからないんだけど、クエリは、常に完全に根本的なストアにプッシュされます。事前に行われる唯一のことは、クエリが解析されて代数モデルに変換されることです。その代数モデルは、それが好きな方法で最適化/変換/実行する完全な自由を持つ、基礎となる店舗に送られます。もちろん、便宜のためにデフォルトの評価戦略が提供されていますが、それは無効にすることができます。

最後に、クエリ実行戦略を調整できますか?私はソースコード参照でクエリの除外オプティマイザを見つけましたが、ストアインスタンスごとに設定できるかどうかはわかりません。

ほとんどのセイルストアインスタンスでは、これらのオプティマイザを構成可能にすることはできません。これは、SailConnection.evaluateメソッド(通常はAbstractSailConnection.evaluateInternal)で発生します。これは、ストア実装が使用する評価戦略(デフォルトまたは独自の最適化戦略のいずれか)を選択する場所です。

+0

ストアで実行を上書きする方法の例がありますか? SailUpdateExecutor.executeUpdateはスピン内のSailConnectionUpdateだけです(そしてデフォルト実装を使用するだけです)。 –

+0

「オーバーライド」は正しい用語ではないかもしれません。 'SailUpdateExecutor'自体は決してオーバーライドされません。エグゼキュータからの出力が処理されることを決定するのは、受信セイルの実装であり、_that_はストア固有の最適化が行われる場所です。 –

+0

脇の下として、私はもちろん喜んでお手伝いしますが、セサミフレームワークの内部に関するこの種の実装固有の質問は、「通常の使用」を少し上回っているため、セサミユーザーグループにとってはおそらくより適していますStackOverflowよりも。 https://groups.google.com/d/forum/sesame-usersをご覧ください。 –

関連する問題