Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Invio di query al server come bytecode anziché come stringhe
L'utilizzo di bytecode anziché di una stringa durante l'invio di query comporta dei vantaggi:
Possibilità di rilevare sintassi di query non valida in anticipo: l'uso della variante bytecode consente di rilevare sintassi di query non valida in fase di compilazione. Se utilizzi la variazione basata su stringa, non individuerai sintassi non valida fino a quando la query non viene inviata al server e viene restituito un errore.
-
Evita un peggioramento delle prestazioni basato su stringhe: qualsiasi invio di query basato su stringhe, indipendentemente dal fatto che tu stia utilizzando WebSockets oHTTP, genera un vertice separato, il che implica che l'oggetto Vertex sia composto dall'ID, dall'etichetta e da tutte le proprietà associate al vertice (vedi Proprietà degli elementi).
Questo può generare calcoli non necessari nel server nei casi in cui le proprietà non sono richieste. Ad esempio, se il cliente è interessato a ottenere il vertice con l'ID "hakuna#1" utilizzando la query
g.V("hakuna#1")
. Se la query viene inviata come un invio basato su stringa, il server deve recuperare l'ID, l'etichetta e tutte le proprietà per questo vertice. Se la query viene inviata come un invio bytecode, il server deve recuperare l'ID e l'etichetta del vertice.
In altre parole, anziché inviare una query come questa:
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(); }
Invia le query utilizzando bytecode, come questa:
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(); }