Maison  >  Article  >  développement back-end  >  Gremlin-Go : étapes d'arborescence non sérialisables

Gremlin-Go : étapes d'arborescence non sérialisables

王林
王林avant
2024-02-09 10:51:19992parcourir

Gremlin-Go : étapes darborescence non sérialisables

éditeur php Apple Gremlin-Go est un nouveau type de base de données distribuée qui utilise la technologie non sérialisable des étapes arborescentes pour fournir aux utilisateurs une solution de stockage et de traitement de données plus efficace et plus fiable. En stockant les données dans une structure arborescente et en utilisant des étapes non sérialisables pour lire et écrire des données, Gremlin-Go est capable de maintenir la cohérence et la fiabilité des données dans un environnement distribué. Ce concept de conception innovant fait de Gremlin-Go l'une des principales bases de données distribuées actuellement, offrant un support de données puissant aux entreprises de toutes tailles.

Contenu de la question

J'exécute une requête pour parcourir tous les bords "in" derrière une étiquette spécifique, plus tard j'effectuerai une requête similaire pour les bords "out". Je veux en faire un arbre car il peut y avoir un sommet avec plusieurs arêtes à parcourir et je dois le refléter dans mon client, donc je ne peux pas simplement utiliser tolist() ici.

J'utilise actuellement le SDK gremlin-go, mais j'obtiens une erreur de désérialisation lors de l'appel de l'étape tree(). Voici un extrait de mon code client :

    res, err := g.v(id).
        emit().
        repeat(__.in(label)).
        tree().
        next() // other terminal steps produce same issue

Cela produira une erreur de désérialisation sur le type de données 0x2b qui est le type de données de base graphbinaire "arbre"

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.

La documentation de référence gremlin-go ne semble rien mentionner sur la prise en charge spécifique de la sérialisation. Selon le gremlin-go readme, il prend en charge tous les principaux types de données graphbinary. J'ai testé ma requête dans la console Gremlin pour vérifier la requête et le serveur : g.v(<id>).emit().repeat(__.in(<label>)).tree().next()</label></id>.

Pour un contexte supplémentaire, je développe localement contre gremlin-server:3.5.3 pour expérimenter dans le but de compléter des requêtes avec la prise en charge d'AWS Neptune. Je sais que ceux-ci ne sont pas complètement interchangeables et suivront la référence Neptune-gremlin. La dernière version de Neptune spécifie que la dernière version prise en charge de Gremlin est la 3.5.3.

Solution de contournement

En général, seul Java (et d'autres clients basés sur JVM) est capable de désérialiser des structures telles que des sous-graphes ou des arbres. En effet, ce sont les seuls clients Gremlin qui disposent d'implémentations natives des structures de données actuellement disponibles (par exemple, les clients JVM disposent de TinkerGraph).

C'est quelque chose que la communauté TinkerPop connaît très bien, et cela fait partie de la liste des choses qui méritent d'être améliorées.

Une solution de contournement possible (pas très agréable) consiste à utiliser un point de terminaison HTTP (envoyant la requête sous forme de texte) et à gérer le GraphSON renvoyé (si une telle structure de données doit être renvoyée).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer