Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
L'utilisation de bytecode plutôt que d'une chaîne lors de la soumission de requêtes présente plusieurs avantages :
Interception plus rapide d'une syntaxe de requête non valide : L'utilisation de la variante bytecode permet de détecter une syntaxe de requête non valide lors de l'étape de compilation. Si vous utilisez la variante basée sur une chaîne, vous ne pouvez pas identifier la syntaxe non valide tant que la requête n'est pas soumise au serveur et qu'une erreur n'est pas renvoyée.
-
Évitez de réduire les performances basées sur des chaînes : toute soumission de requête basée sur des chaînes, que vous utilisiez HTTP WebSockets ou HTTP, entraîne le détachement d'un sommet, ce qui implique que l'objet Vertex comprend l'ID, l'étiquette et toutes les propriétés associées au sommet (voir Propriétés des éléments).
Dans les cas où les propriétés ne sont pas obligatoires, cela peut entraîner des calculs inutiles sur le serveur. Par exemple, si le client souhaite obtenir le vertex portant l'ID « hakuna#1 » à l'aide de la requête
g.V("hakuna#1")
. Si la requête est envoyée sous la forme d'une soumission basée sur une chaîne, le serveur consacre du temps à la récupération de l'ID, de l'étiquette et de toutes les propriétés de ce vertex. Si la requête est envoyée sous la forme d'une soumission de bytecode, le serveur consacre du temps à la récupération de l'ID et de l'étiquette du vertex uniquement.
En d'autres termes, au lieu de soumettre une requête comme suit :
final Cluster cluster = Cluster.build("localhost")
.port(8182)
.maxInProcessPerConnection(32)
.maxSimultaneousUsagePerConnection(32)
.serializer(Serializers.GRAPHBINARY_V1D0)
.create();
try {
final Client client = cluster.connect();
List<Result> results = client.submit("g.V().has('name','pumba').out('friendOf').id()").all().get();
System.out.println(verticesWithNamePumba);
} finally {
cluster.close();
}
Soumettez la requête en bytecode comme suit :
final Cluster cluster = Cluster.build("localhost")
.port(8182)
.maxInProcessPerConnection(32)
.maxSimultaneousUsagePerConnection(32)
.serializer(Serializers.GRAPHBINARY_V1D0)
.create();
try {
final GraphTraversalSource g = traversal().withRemote(DriverRemoteConnection.using(cluster));
List<Object> verticesWithNamePumba = g.V().has("name", "pumba").out("friendOf").id().toList();
System.out.println(verticesWithNamePumba);
} finally {
cluster.close();
}