

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 文字列ではなくバイトコードとしてサーバーにクエリを送信する
<a name="best-practices-gremlin-java-bytecode"></a>

クエリを送信する際、文字列ではなくバイトコードを使用する利点があります。
+ **無効なクエリ構文を早期に検出する:** バイトコードのバリアントを使用すると、コンパイル段階で無効なクエリ構文を検出することができます。文字列ベースのバリエーションを使用した場合は、クエリがサーバーに送信され、エラーが返るまで無効な構文を検出することはできません。
+ **文字列ベースのパフォーマンスのペナルティを回避する:** WebSocket または HTTP を使用しているかどうかにかかわらず、文字列ベースのクエリ送信では、頂点がデタッチされます。つまり、Vertex オブジェクトは、ID、Label、および Vertex に関連付けられているすべてのプロパティで構成されます ([要素のプロパティ](http://tinkerpop.apache.org/docs/current/reference/#_properties_of_elements)参照)。

  プロパティが不要な場合には、これにより、サーバー上で不要な計算が生じる可能性があります。たとえば、顧客がクエリ `g.V("hakuna#1")` を使用して ID ("hakuna\$11) の頂点を取得する場合。クエリが文字列ベースの送信として送信された場合、サーバーではこの頂点の 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();
  }
```