翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
文字列ではなくバイトコードとしてサーバーにクエリを送信する
クエリを送信する際、文字列ではなくバイトコードを使用する利点があります。
無効なクエリ構文を早期に検出する: バイトコードのバリアントを使用すると、コンパイル段階で無効なクエリ構文を検出することができます。文字列ベースのバリエーションを使用した場合は、クエリがサーバーに送信され、エラーが返るまで無効な構文を検出することはできません。
-
文字列ベースのパフォーマンスペナルティを避ける: 文字列ベースのクエリを送信すると、 WebSockets または のどちらを使用しているかにかかわらずHTTP、頂点がデタッチされます。これは、頂点オブジェクトが ID、ラベル、および頂点に関連付けられたすべてのプロパティで構成されていることを意味します (「要素のプロパティ
」を参照)。 プロパティが不要な場合には、これにより、サーバー上で不要な計算が生じる可能性があります。たとえば、顧客がクエリ
g.V("hakuna#1")
を使用して ID ("hakuna#1) の頂点を取得する場合。クエリが文字列ベースの送信として送信された場合、サーバーではこの頂点の ID、ラベル、およびすべてのプロパティの取得が行われます。クエリがバイトコード送信として送信された場合、サーバーでは頂点の ID とラベルの取得のみ行われます。
つまり、このようなクエリは送信しません。
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(); }
代わりに、次のようにバイトコードを使用してクエリを送信します。
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(); }