Verwenden von Neptune-Streams - 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.

Verwenden von Neptune-Streams

Mit dem Neptune-Streams-Feature können Sie eine vollständige Abfolge von Änderungsprotokolleinträgen generieren, die jede Änderung an Ihren Diagrammdaten aufzeichnen, sobald sie erfolgt. Eine Übersicht über diese Funktion finden Sie unter Erfassen von Diagrammänderungen in Echtzeit mit Neptune-Streams.

Verwenden von Neptune-Streams

Sie können Neptune-Streams jederzeit aktivieren oder deaktivieren, indem Sie den neptune_streams-DB-Cluster-Parameter festlegen. Wenn Sie den Parameter auf 1 setzen, wird Streams aktiviert, und wenn Sie ihn auf 0 setzen, wird Streams deaktiviert.

Anmerkung

Nach dem Ändern des neptune_streams-DB-Cluster-Parameters müssen Sie alle DB-Instances im Cluster neu starten, damit die Änderungen wirksam werden.

Mittels des DB-Cluster-Parameters neptune_streams_expiry_days können Sie festlegen, wie viele Tage (von 1 bis 90) Stream-Datensätze auf dem Server gespeichert werden, bevor sie gelöscht werden. Der Standardwert ist 7.

Neptune Streams wurde ursprünglich als experimentelles Feature eingeführt, das Sie im Labormodus mittels des DB-Cluster-Parameters neptune_lab_mode aktivieren oder deaktivieren konnten (sieheNeptune-Labor-Modus). Die Verwendung des Labormodus zum Aktivieren von Streams ist jetzt veraltet und wird in Zukunft deaktiviert.

Deaktivieren von Neptune-Streams

Sie können Neptune-Streams jederzeit während der Ausführung deaktivieren.

Um Streams zu deaktivieren, aktualisieren Sie die DB-Cluster-Parametergruppe so, dass der Wert des Parameters neptune_streams auf 0 gesetzt wird.

Wichtig

Sobald Streams deaktiviert ist, können Sie nicht mehr auf die Änderungsprotokolldaten zugreifen. Lesen Sie unbedingt, was für Sie wichtig ist, bevor Sie Streams deaktivieren.

Aufrufen der Neptune-Streams-REST-API

Sie greifen auf Neptune-Streams über eine REST-API zu, die eine HTTP-GET-Anforderung an einen der folgenden lokalen Endpunkte sendet:

  • Für eine SPARQL-Diagramm-DB:   https://Neptune-DNS:8182/sparql/stream.

  • Für eine Gremlin- oder openCypher-Diagramm-DB: https://Neptune-DNS:8182/propertygraph/stream oder https://Neptune-DNS:8182/pg/stream.

Anmerkung

Ab Engine-Version 1.1.0.0 ist der Gremlin-Stream-Endpunkt (https://Neptune-DNS:8182/gremlin/stream) zusammen mit dem zugehörigen Ausgabeformat (GREMLIN_JSON) veraltet. Aus Gründen der Abwärtskompatibilität wird er weiter unterstützt, wird jedoch in zukünftigen Versionen möglicherweise entfernt.

Es ist nur eine HTTP-GET-Operation zulässig.

Neptune unterstützt die gzip-Komprimierung der Antwort, vorausgesetzt, dass die HTTP-Anforderung einen Accept-Encoding-Header enthält, der gzip als akzeptiertes Komprimierungsformat angibt (d. h. "Accept-Encoding: gzip").

Parameter
  • limit   –   long, optional. Reichweite: 1–100 000. Standard: 10.

    Gibt die maximale Anzahl der zurückzugebenden Datensätze an. Es gibt auch eine Größenbeschränkung von 10 MB für die Antwort, die nicht geändert werden kann und Vorrang vor der Anzahl der Datensätze hat, die im limit-Parameter angegeben ist. Die Antwort enthält einen Schwellenwertüberschreitungsdatensatz, wenn das 10 MB-Limit erreicht wurde.

  • iteratorType   –   String, optional.

    Folgende Parameterwerte sind möglich:

    • AT_SEQUENCE_NUMBER(Standard)   –   Gibt an, dass der Lesevorgang ab der Ereignissequenznummer beginnen soll, die von beiden Parametern commitNum und opNum angegeben wird.

    • AFTER_SEQUENCE_NUMBER   –   Gibt an, dass der Lesevorgang direkt nach der Ereignissequenznummer beginnen soll, die von beiden Parametern commitNum und opNum angegeben wird.

    • TRIM_HORIZON   –   Gibt an, dass der Lesevorgang mit dem letzten nicht gekürzten Datensatz im System beginnen soll. Dies ist der älteste nicht abgelaufene (noch nicht gelöschte) Datensatz im Änderungsprotokoll-Stream. Dieser Modus ist während des Anwendungsstarts nützlich, wenn Sie keine bestimmte Startsequenznummer haben.

    • LATEST   –   Gibt an, dass der Lesevorgang mit dem neuesten Datensatz im System beginnen soll. Dies ist der letzte nicht abgelaufene (noch nicht gelöschte) Datensatz im Änderungsprotokoll-Stream. Dies ist nützlich, wenn Datensätze aus den aktuellen Top-Streams gelesen werden müssen, ohne ältere Datensätze zu verarbeiten, z. B. bei einer Notfallwiederherstellung oder einem Upgrade ohne Ausfallzeiten. Beachten Sie, dass in diesem Modus höchstens ein Datensatz zurückgegeben wird.

  • commitNum   –   long, erforderlich, wenn iteratorType AT_SEQUENCE_NUMBER oder AFTER_SEQUENCE_NUMBER ist.

    Die Commit-Nummer des Startdatensatzes, der aus dem Änderungsprotokoll-Stream gelesen werden soll.

    Dieser Parameter wird ignoriert, wenn iteratorType den Wert TRIM_HORIZON oder LATEST hat.

  • opNum   –   long, optional (Standardwert ist 1).

    Die Operationssequenznummer innerhalb des angegebenen Commitments, ab der in den Änderungsprotokoll-Streamdaten gelesen werden soll.

Operationen, die SPARQL-Diagrammdaten ändern, generieren in der Regel nur einen einzigen Änderungsdatensatz pro Operation. Operationen, die Gremlin-Diagrammdaten ändern, können jedoch mehrere Änderungsdatensätze pro Operation generieren, wie in den folgenden Beispielen dargestellt:

  • INSERT   –   Ein Gremlin-Eckpunkt kann mehrere Bezeichnungen und ein Gremlin-Element kann mehrere Eigenschaften haben. Für jede Bezeichnung und Eigenschaft wird ein separater Änderungsdatensatz generiert, wenn ein Element eingefügt wird.

  • UPDATE   –   Wenn eine Gremlin-Elementeigenschaft geändert wird, werden zwei Änderungsdatensätze generiert: einer zum Entfernen des vorherigen Werts und einer zum Einfügen des neuen Werts.

  • DELETE   –   Für jede gelöschte Elementeigenschaft wird ein eigener Änderungsdatensatz generiert. Wenn beispielsweise eine Gremlin-Grenze mit Eigenschaften gelöscht wird, wird für jede der Eigenschaften ein Änderungsdatensatz generiert. Danach wird ein Änderungsdatensatz zum Löschen der Grenzbezeichnung generiert.

    Wenn ein Gremlin-Eckpunkt gelöscht wird, werden zuerst alle eingehenden und ausgehenden Grenzeigenschaften gelöscht, dann die Grenzbezeichnungen, dann die Eckpunkteigenschaften und schließlich die Eckpunktbezeichnungen. Jeder dieser Löschvorgänge generiert einen Änderungsdatensatz.

Neptune-Streams-API-Antwortformat

Eine Antwort auf eine Neptune-Streams-REST-API-Anforderung enthält die folgenden Felder:

  • lastEventId   –   Sequenz-ID der letzten Änderung in der Stream-Antwort. Eine Ereignis-ID besteht aus zwei Feldern: Ein commitNum identifiziert eine Transaktion, die das Diagramm geändert hat, und ein opNum identifiziert eine bestimmte Operation innerhalb dieser Transaktion. Dies wird im folgenden Beispiel veranschaulicht.

    "eventId": { "commitNum": 12, "opNum": 1 }
  • lastTrxTimestamp   –   Der Zeitpunkt, zu dem das Commit für die Transaktion angefordert wurde, in Millisekunden ab der Unix-Epoche.

  • format   –   Serialisierungsformat für die zurückgegebenen Änderungsdatensätze. Die möglichen Werte sind PG_JSON für Gremlin- oder openCypher-Änderungsdatensätze und NQUADS für SPARQL-Änderungsdatensätze.

  • records   –   Ein Array serialisierter Änderungsprotokoll-Stream-Datensätze, die in der Antwort enthalten sind. Jeder Datensatz im records-Array enthält die folgenden Felder:

    • commitTimestamp   –   Der Zeitpunkt, zu dem das Commit für die Transaktion angefordert wurde, in Millisekunden ab der Unix-Epoche.

    • eventId   –   Die Sequenz-ID des Stream-Änderungsdatensatzes.

    • data— Der serialisierte Gremlin-, SPARQL- oder Change-Datensatz. OpenCypher Die Serialisierungsformate für jeden Datensatz werden im nächsten Abschnitt (Serialisierungsformate in Neptune-Streams) ausführlicher beschrieben.

    • op   –   Die Operation, die die Änderung erstellt hat.

    • isLastOp   –   Nur vorhanden, wenn diese Operation die letzte in ihrer Transaktion ist. Wenn vorhanden, ist sie auf true festgelegt. Nützlich, um sicherzustellen, dass die gesamte Transaktion genutzt wird.

  • totalRecords   –   Die Gesamtanzahl der Datensätze in der Antwort.

Die folgende Antwort gibt beispielsweise Gremlin-Änderungsdaten für eine Transaktion zurück, die mehr als eine Operation enthält:

{ "lastEventId": { "commitNum": 12, "opNum": 1 }, "lastTrxTimestamp": 1560011610678, "format": "PG_JSON", "records": [ { "commitTimestamp": 1560011610678, "eventId": { "commitNum": 1, "opNum": 1 }, "data": { "id": "d2b59bf8-0d0f-218b-f68b-2aa7b0b1904a", "type": "vl", "key": "label", "value": { "value": "vertex", "dataType": "String" } }, "op": "ADD" } ], "totalRecords": 1 }

Die folgende Antwort gibt SPARQL-Änderungsdaten für die letzte Operation in einer Transaktion zurück (die Operation, die EventId(97, 1) in Transaktionsnummer 97 identifiziert hat).

{ "lastEventId": { "commitNum": 97, "opNum": 1 }, "lastTrxTimestamp": 1561489355102, "format": "NQUADS", "records": [ { "commitTimestamp": 1561489355102, "eventId": { "commitNum": 97, "opNum": 1 }, "data": { "stmt": "<https://test.com/s> <https://test.com/p> <https://test.com/o> .\n" }, "op": "ADD", "isLastOp": true } ], "totalRecords": 1 }

Neptune-Streams-API-Ausnahmen

Die folgende Tabelle beschreibt Streams-Ausnahmen.

Fehlercode HTTP-Code Erneut versuchen? Fehlermeldung

InvalidParameterException

400

Nein

Ein ungültiger out-of-range Wert oder wurde als Eingabeparameter angegeben.

ExpiredStreamException

400

Nein

Alle angeforderten Datensätze überschreiten das maximal zulässige Alter und sind abgelaufen.

ThrottlingException

500

Ja

Die Anforderungsrate übersteigt den maximalen Durchsatz.

StreamRecordsNotFoundException

404

Nein

Die angeforderte Ressource wurde nicht gefunden. Der Stream ist möglicherweise nicht korrekt angegeben.

MemoryLimitExceededException

500

Ja

Die Anforderungsverarbeitung war nicht erfolgreich, weil nicht genügend Arbeitsspeicher vorhanden ist. Sie kann aber wiederholt werden, wenn der Server nicht mehr so stark ausgelastet ist.