Envíe consultas al servidor como bytecode en lugar de como cadenas - Amazon Neptune

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Envíe consultas al servidor como bytecode en lugar de como cadenas

Existen ventajas con el uso Bytecode en lugar de una cadena al enviar consultas:

  • Detección temprana de sintaxis de consultas no válida: el uso de la variante Bytecode permite detectar la sintaxis de consultas no válidas en la fase de compilación. Si utiliza la variación basada en cadena, no detectará la sintaxis no válida hasta que la consulta se envíe al servidor y se devuelva un error.

  • Evitar la penalización de rendimiento basado en cadena: cualquier envío de consultas basadas en cadena, tanto si usa WebSockets como HTTP, se traduce en un vértice separado, que implica que el objeto de vértice consta de ID, etiqueta y todas las propiedades asociadas con el vértice (consulte Properties of Elements).

    Esto puede dar lugar a cálculos innecesarios en el servidor en casos en que las propiedades no son obligatorias. Por ejemplo, si el cliente está interesado en obtener el vértice con el ID "hakuna#1" utilizando la consulta ., g.V("hakuna#1"). Si la consulta se envía como envío basado en cadena, el servidor gastaría tiempo en recuperar el ID, la etiqueta y todas las propiedades de este vértice. Si la consulta se envía como un envío de Bytecode, el servidor solo dedica tiempo en recuperar el ID y la etiqueta del vértice.

En otras palabras, en lugar de enviar una consulta de esta manera:

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(); }

Envíe la consulta mediante Bytecode, tal y como se muestra a continuación:

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(); }