Funktionsweise der SPARQL-Abfrage-Engine in Neptune - Amazon Neptune

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Funktionsweise der SPARQL-Abfrage-Engine in Neptune

Um die Informationen zu verwenden, die das SPARQL-Feature explain bereitstellt, müssen Sie einige Details zur Funktionsweise der SPARQL-Abfrage-Engine von Amazon Neptune kennen.

Die Engine übersetzt jede SPARQL-Abfrage in eine Operatoren-Pipeline. Ab dem ersten Operator durchlaufen Zwischenlösungen, die als Bindungslisten bekannt sind, diese Operator Pipeline. Sie können sich eine Bindungsliste als eine Tabelle vorstellen, in der die Tabellenüberschriften eine Teilmenge der in der Abfrage verwendeten Variablen darstellen. Jede Zeile in der Tabelle steht für ein Ergebnis bis zur kompletten Bewertung.

Angenommen, zwei Namespace-Präfixe wurden für unsere Daten definiert,

@prefix ex: <http://example.com> . @prefix foaf: <http://xmlns.com/foaf/0.1/> .

dann ergäbe sich in diesem Kontext das folgende Beispiel einer einfachen Bindungsliste:

?person | ?firstName ------------------------------------------------------ ex:JaneDoe | "Jane" ex:JohnDoe | "John" ex:RichardRoe | "Richard"

Für alle drei Personen wird die ?person-Variable von der Liste an einen Bezeichner der Person und die ?firstName-Variable an den Vornamen der Person gebunden.

Im Allgemeinen können Variablen ungebunden bleiben, wenn beispielsweise eine OPTIONAL-Auswahl einer Variable in einer Abfrage vorliegt, für die kein Wert in den Daten vorhanden ist.

Der PipelineJoin-Operator ist ein Beispiel für einen Operator der Neptune-Abfrage-Engine in der explain-Ausgabe. Dabei wird als Eingabe ein eingehender Bindungssatz aus dem vorherigen Operator übernommen und einem Dreifachmuster, z. B. (?person, foaf:lastName, ?lastName) angefügt. Bei diesem Vorgang werden die Bindungen für die ?person-Variable im Eingabe-Stream verwendet und im Dreifachmuster ersetzt. Außerdem werden die Triplets in der Datenbank nachgeschlagen.

Bei der Ausführung im Kontext der eingehenden Bindungen aus der vorherigen Tabelle würde PipelineJoin die folgenden drei Suchvorgänge bewerten:

(ex:JaneDoe, foaf:lastName, ?lastName) (ex:JohnDoe, foaf:lastName, ?lastName) (ex:RichardRoe, foaf:lastName, ?lastName)

Dieser Ansatz wird als as-bound-Bewertung bezeichnet. Die Lösungen dieses Bewertungsprozess werden den eingehenden Lösungen zugeführt, sodass das erkannte ?lastName-Objekt in den eingehenden Lösungen aufgefüllt wird. Falls Sie einen Nachnamen für alle drei Personen finden, erstellt der Operator eine ausgehende Bindungsliste, die etwa wie folgt aussieht:

?person | ?firstName | ?lastName --------------------------------------- ex:JaneDoe | "Jane" | "Doe" ex:JohnDoe | "John" | "Doe" ex:RichardRoe | "Richard" | "Roe"

Diese ausgehende Bindungsliste dient anschließend als Eingabe für den nächsten Operator in der Pipeline. Am Ende definiert die Ausgabe des letzten Operators in der Pipeline das Abfrageergebnis.

Operator-Pipelines sind häufig linear. Da bedeutet, jeder Operator gibt Lösungen für einen einzelnen verbundenen Operator weiter. In einigen Fällen kann es jedoch zu komplexen Strukturen kommen. Beispiel: Ein UNION-Operator in einer SPARQL-Abfrage wird einer Copy-Operation zugeordnet. Dieser Vorgang dupliziert die Bindungen und leitet die Kopien an zwei Unterpläne weiter; einer für die linke Seite und der andere für die rechte Seite der UNION.

Weitere Informationen zu Operatoren finden Sie unter Neptune SPARQL-Operatoren für explain.