Heim >Backend-Entwicklung >Golang >Gremlin-Go: Baumschritte nicht serialisierbar
php-Editor Apple Gremlin-Go ist eine neue Art verteilter Datenbank, die die nicht serialisierbare Technologie von Baumschritten nutzt, um Benutzern eine effizientere und zuverlässigere Lösung zur Datenspeicherung und -verarbeitung zu bieten. Durch das Speichern von Daten in einer Baumstruktur und die Verwendung nicht serialisierbarer Schritte zum Lesen und Schreiben von Daten ist Gremlin-Go in der Lage, die Datenkonsistenz und -zuverlässigkeit in einer verteilten Umgebung aufrechtzuerhalten. Dieses innovative Designkonzept macht Gremlin-Go zu einer der derzeit führenden verteilten Datenbanken und bietet leistungsstarke Datenunterstützung für Unternehmen jeder Größe.
Ich führe eine Abfrage aus, um alle „In“-Kanten hinter einer bestimmten Beschriftung zu durchlaufen. Später werde ich eine ähnliche Abfrage für die „Out“-Kanten durchführen. Ich möchte daraus einen Baum machen, da möglicherweise ein Scheitelpunkt mit mehreren Kanten zu durchlaufen ist und dies in meinem Client widergespiegelt werden muss, sodass ich hier nicht einfach tolist()
verwenden kann.
Ich verwende derzeit das Gremlin-Go-SDK, erhalte jedoch einen Deserialisierungsfehler, wenn ich den Schritt tree()
aufrufe. Hier ist ein Ausschnitt meines Client-Codes:
res, err := g.v(id). emit(). repeat(__.in(label)). tree(). next() // other terminal steps produce same issue
Dies führt zu einem Deserialisierungsfehler beim Datentyp 0x2b
, bei dem es sich um den Graphbinary-Kerndatentyp „Baum“
2023/02/28 12:23:05 Error occurred during operation gremlinServerWSProtocol.readLoop(): 'E0408: unknown data type to deserialize 0x2b' 2023/02/28 12:23:05 Read loop error 'E0408: unknown data type to deserialize 0x2b', closing read loop. 2023/02/28 12:23:05 Connection error callback invoked, closing protocol.
Die Gremlin-Go-Referenzdokumentation scheint nichts über spezifische Serialisierungsunterstützung zu erwähnen. Laut gremlin-go
Readme unterstützt es alle wichtigen graphbinären Datentypen. Ich habe meine Abfrage in der Gremlin-Konsole getestet, um Abfrage und Server zu überprüfen:
g.v(<id>).emit().repeat(__.in(<label>)).tree().next()</label></id>
.
Für zusätzlichen Kontext entwickle ich lokal gegen gremlin-server:3.5.3
, um mit dem Ziel zu experimentieren, Abfragen mit Unterstützung für AWS Neptune abzuschließen. Ich weiß, dass diese nicht vollständig austauschbar sind und der Neptun-Gremlin-Referenz folgen werden. Die neueste Version von Neptune gibt an, dass die neueste unterstützte Version von Gremlin 3.5.3 ist.
Im Allgemeinen sind nur Java (und andere JVM-basierte Clients) in der Lage, Strukturen wie Untergraphen oder Bäume zu deserialisieren. Dies liegt daran, dass dies die einzigen Gremlin-Clients sind, die über native Implementierungen derzeit verfügbarer Datenstrukturen verfügen (z. B. JVM-Clients verfügen über TinkerGraph).
Das ist etwas, was die TinkerPop-Community sehr gut weiß, und es steht auf der Liste der Dinge, die es wert sind, verbessert zu werden.
Eine mögliche Problemumgehung (nicht sehr schön) besteht darin, einen HTTP-Endpunkt zu verwenden (der die Abfrage als Text sendet) und den zurückgegebenen GraphSON zu verarbeiten (falls eine solche Datenstruktur zurückgegeben werden muss).
Das obige ist der detaillierte Inhalt vonGremlin-Go: Baumschritte nicht serialisierbar. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!