Envoyer des requêtes au serveur sous forme de bytecode plutôt que de chaînes - Amazon Neptune

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.

Envoyer des requêtes au serveur sous forme de bytecode plutôt que de chaînes

L'utilisation de bytecode plutôt que d'une chaîne lors de la soumission de requêtes présente plusieurs avantages :

  • Attrapez tôt la 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 les pénalités de performances basées sur des chaînes  Toute soumission de requête basée sur une chaîne, que vous utilisiez WebSockets ou HTTP, entraîne le détachement d'un vertex. Cela signifie que l'objet Vertex se compose de l'ID, de l'étiquette et de toutes les propriétés associées au vertex (consultezPropriétés des éléments).

    Cela peut entraîner des calculs inutiles sur le serveur lorsque les propriétés ne sont pas obligatoires. 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(); }