Nebula Graph vient de sortir la v.2.6. Dans cette version, TOSS est certainement l’une des fonctionnalités importantes. Ici, une explication détaillée sur TOSS sera donnée.
Commençons par une déclaration GO
Comme nous le savons tous, il existe deux types d’arêtes : les arêtes dirigées et les arêtes non orientées. Lorsque vous traversez des arêtes dirigées, vous pouvez traverser en avant ou en arrière. Nebula Graph prend également en charge cette sémantique. Par exemple:
go from "101" over known reversely yield known.kdate, id($$);
L’instruction ci-dessus commence à partir du sommet 101 pour rechercher tous les voisins correspondants à l’envers. Cependant, lorsque vous insérez une arête dans Nebula Graph, la commande sera :
insert edge known(degree) VALUES "100" -> "101":(299792458);
Apparemment, la déclaration ci-dessus ne spécifie que le bord sortant. En effet, Nebula Graph spécifiera le bord entrant en arrière-plan lorsque vous insérez un bord.
Comment insérer une arête dans un graphique de nébuleuse
Prendre la INSERT
déclaration ci-dessus à titre d’exemple, le processus d’exécution en arrière-plan contient les éléments suivants :
-
Nebula Console envoie la requête INSERT au serveur Nebula Graph.
-
Une fois que le serveur Nebula Graph a reçu la demande, il ajoute un bord entrant pour chaque bord sortant et envoie
AddEdgeRequest
à leurs hôtes respectivement. -
Une fois que l’hôte (serveur de stockage Nebula) a reçu
AddEdgeRequest
, il insère le bord localement (via le protocole Raft) et renvoie le résultat au serveur Nebula Graph. -
Le serveur Nebula Graph renvoie ensuite les résultats des deux hôtes à la console Nebula à des fins d’interrogation.
L’organigramme est le suivant :
Si vous êtes familier avec la programmation réseau/distribuée, vous pouvez voir le problème maintenant. Le service graphique utilise RPC pour appeler les deux services de stockage. Lorsque l’opération INSERT est exécutée suffisamment de fois, un RPC réussit tandis que l’autre échoue en raison du délai d’attente. En d’autres termes, un INSERT
l’opération peut réussir sur le bord sortant tout en échouant sur le bord entrant.
Désormais, si un utilisateur a besoin de paramètres de propriété cohérents pour le bord sortant et le bord entrant, le client doit réessayer la requête à l’infini. Il est inapproprié pour Nebula Graph, en tant que produit de base de données, de s’appuyer sur le client pour l’atomicité des données.
Il apparaît alors un besoin d’assurer l’atomicité du bord sortant et du bord entrant. Cela signifie que le bord sortant et le bord entrant doivent être mis à jour avec succès ou échouer en même temps. Et TOSS (Transaction On Storage Side) est la fonctionnalité qui assure la cohérence éventuelle des bords sur INSERT
, UPDATE
, et UPSERT
opérations.
Comment utiliser TOSS
Avec la sortie de Nebula Graph v2.6.0, la fonction TOSS a également été lancée. La fonctionnalité est définie sur Disabled
par défaut pour des raisons de performances et de stabilité. Vous pouvez trouver le enable_experimental_feature
dans le fichier de configuration du serveur Nebula Graph et définissez-la sur True
. Ensuite, vous devez redémarrer le service graphd pour que la fonctionnalité prenne effet. La commande est la suivante :
--enable_experimental_feature=true
Puis les opérations CREATE SPACE
/ CREATE EDGE
/ INSERT
/ UPDATE
permettra d’atteindre la cohérence éventuelle des arêtes dans Nebula Graph. (Il suffit d’exécuter les opérations comme précédemment).
Remarque : la fonction TOSS ne sera appliquée aux données incrémentielles qu’une fois activée.