首页 图数据库 GDB SDK参考 Gremlin SDK参考 配置Gremlin请求超时时间

配置Gremlin请求超时时间

图数据库GDB支持修改客户端向图数据库GDB发送请求数据时的超时时间,您可以根据业务场景和数据量等修改超时时间。本文介绍不同语言环境中配置Gremlin请求超时时间的方法。

超时时间简介

  • 客户端向图数据库GDB发送请求数据时,如果请求时间超过图数据库GDB设置的超时时间(默认为1800毫秒),则会发生超时现象,造成结果无法返回的现象。

  • 超时时间的值为Long类型,单位为毫秒。

  • 建议您不要配置过大的超时时间。

    说明

    复杂任务中需要设置过大的超时时间时,您可以使用图数据库GDB的图分析功能代替。

  • 当客户端和图数据库GDB的连接在请求超时前断开时,会导致新的请求不生效。

使用各种语言配置超时时间

以下介绍各语言接入使用scripts请求的超时时间配置,示例配置超时时间为5000毫秒。

  • Java

    1. 在客户端安装Java和Maven工具。

      1. 执行如下命令,安装Java(以1.8.0版本为例)。

        sudo yum install java-1.8.0-devel
      2. 执行如下命令,添加具有Maven程序包的存储库。

        wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
      3. 执行如下命令,设置存储库的版本号(以4.0.0为例)。

        sudo sed -i s/4.0.0/6/g /etc/yum.repos.d/epel-apache-maven.repo
      4. 执行如下命令,安装Maven工具。

        sudo yum install -y apache-maven
        说明

        如果回显信息中报类似XXX的错误,您可以执行以下任意一种命令安装Maven。

        • sudo yum install -y apache-maven --skip-broken
        • sudo yum install -y apache-maven --nobest
    2. 创建用于连接图数据库GDB实例的配置文件(以pom.xml为例)。

      1. 执行如下命令,创建并进入配置文件所在目录。

        mkdir gdb-gremlin-test
        cd gdb-gremlin-test
      2. 执行如下命令,创建pom.xml文件。

        touch pom.xml
      3. 执行如下命令,编辑pom.xml文件。

        vi pom.xml

        输入i,将以下内容复制至pom.xml文件中。

        <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
          <modelVersion>4.0.0</modelVersion>
          <groupId>com.gdb.alibaba</groupId>
          <artifactId>GdbGremlinExample</artifactId>
          <packaging>jar</packaging>
          <version>1.0-SNAPSHOT</version>
          <name>GdbGremlinExample</name>
          <url>http://maven.apache.org</url>
          <dependencies>
            <dependency>
               <groupId>org.apache.tinkerpop</groupId>
               <artifactId>gremlin-driver</artifactId>
               <version>3.4.0</version>
            </dependency>
          </dependencies>
          <build>
             <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.0.2</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.3</version>
                    <configuration>
                        <mainClass>com.gdb.alibaba.Test</mainClass>
                        <complianceLevel>1.8</complianceLevel>
                    </configuration>
                </plugin>
            </plugins>
          </build>
        </project>

        按Esc键,输入:wq退出vi编辑器。

    3. 创建用于连接Java客户端的配置文件(以Test.java为例)。

      1. 执行如下命令,创建并进入配置文件所在目录。

        mkdir -p src/main/java/com/gdb/alibaba/
        cd src/main/java/com/gdb/alibaba
      2. 执行如下命令,创建Test.java文件。

        touch Test.java
      3. 执行如下命令,编辑Test.java文件。

        vi Test.java

        输入i,将以下内容根据业务需求在本地修改完成后复制粘贴至Test.java文件中。

        package com.gdb.alibaba;
        import org.apache.tinkerpop.gremlin.driver.Cluster;
        import org.apache.tinkerpop.gremlin.driver.Client;
        import org.apache.tinkerpop.gremlin.driver.Result;
        import org.apache.tinkerpop.gremlin.driver.ResultSet;
        import org.apache.tinkerpop.gremlin.driver.RequestOptions;
        import java.util.List;
        import java.util.Map;
        import java.util.HashMap;
        import java.io.File;
        public class Test
        {
            public static void main( String[] args )
            {
              try {
                if(args.length != 1) {
                    System.out.println("gdb-remote.yaml path needed");
                    return;
                }
                String yaml = args[0];
        
                // 1. 初始化客户端。
                Cluster cluster = Cluster.build(new File(yaml)).create();
                Client client = cluster.connect().init();
        
                // 2. 配置超时时间为5000毫秒。
                RequestOptions.Builder options = RequestOptions.build().timeout(5000);
                options.addParameter("G___id", "sand131_id_5_99");
                String dsl = "g.V(G___id)";
        
                // 3. 发送Gremlin请求到图数据库GDB服务端。
                ResultSet results = client.submit(dsl, options.create());
                List<Result> result = results.all().join();
                result.forEach(p -> System.out.println(p.getObject()));
        
                // 4. 关闭客户端。
                cluster.close();
              } catch (Exception e) {
                System.out.println(e.getMessage());
              }
          }
        }

        按Esc键,输入:wq退出vi编辑器。

    4. 创建用于连接Java客户端和图数据库GDB实例的配置文件(以gdb-remote.yaml为例)。

      1. 执行如下命令,创建gdb-remote.yaml文件。

        touch gdb-remote.yaml
      2. 执行如下命令,编辑gdb-remote.yaml文件。

        vi gdb-remote.yaml

        输入i,将以下内容按照业务需求在本地修改完成后复制粘贴至gdb-remote.yaml文件中。

      3. hosts: <your_gdb_endpoint> //<your_gdb_endpoint>为图数据库GDB实例的连接地址。
        port: <port> //<port>为图数据库GDB实例的端口号。
        username: <username> //<username>为图数据库GDB实例的账号。
        password: <password> //<password>为图数据库GDB实例的账号密码。
        serializer: {
          className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1,
          config: { serializeResultToString: false }
        }
    5. 编译并执行Java程序。

      1. 执行如下命令,进入pom.xml文件所在目录(即用于连接图数据库GDB实例的配置文件所在目录)。

        cd /root/gdb-gremlin-test
      2. 执行如下命令,编译并执行Java程序。

        mvn compile exec:java  -Dexec.args="/root/apache-tinkerpop-gmlin-console-3.4.0/conf/gdb-remote.yaml"
  • Python

    1. 在客户端安装Python。

      1. 执行如下命令,下载Python。

      2. 执行如下命令,

    2. (可选)在客户端安装pip。

    3. 连接Python客户端和图数据库GDB实例。

      1. 执行如下命令,安装gremlinpython程序包。

      2. 执行如下命令,创建用于连接Python客户端和图数据库GDB实例的配置文件(以test.py为例)。

      3. 执行如下命令,编辑test.py文件。

      4. 执行如下命令,运行test.py文件。

  1. 执行如下命令,初始化客户端。

    client = client.Client('ws://${your-gdb-endpoint}:8182/gremlin', 'g', username="${username}", password="${password}")
  2. 执行如下命令,配置超时时间为5000毫秒。

    dsl = "g.V(G___id)"
    parameters = {}
    parameters["G___id"] = "sand131_id_5_99"
    message = RequestMessage('', 'eval', {'gremlin': dsl, 'scriptEvaluationTimeout': 5000, 'bindings': parameters})
  3. 执行如下命令,发送请求至图数据库GDB服务端。

    results = client.submit(message).all().result()
  4. 执行如下命令,关闭客户端。

    client.close()
  5. .Net

    1. 执行如下命令,初始化客户端。

      var gremlinServer = new GremlinServer(endpoint, port, username: username, password: password); 
      var gremlinClient = new GremlinClient(gremlinServer);
    2. 执行如下命令,配置超时时间为5000毫秒。

      string dsl = "g.V(G___id)";
      Dictionary<string, object> bindings = new Dictionary<string, object> {{"G___id", "sand131_id_5_99"}};
      var msgBuilder = RequestMessage.Build(Tokens.OpsEval).AddArgument(Tokens.ArgsGremlin, dsl)
      .AddArgument(Tokens.ArgsBindings, bindings).AddArgument("scriptEvaluationTimeout", 5000);
    3. 执行如下命令,发送请求至图数据库GDB服务端。

      await gremlinClient.SubmitAsync<T>(msgBuilder.Create()).ConfigureAwait(false);
    4. 执行如下命令,关闭客户端。

  6. Go

    1. 执行如下命令,初始化客户端。

      settings := &goClient.Settings{
              Host:     host,
              Port:     port,
              Username: username,
              Password: password,
          }
      client := goClient.NewClient(settings)
    2. 执行如下命令,配置超时时间为5000毫秒。

      parameters := make(map[string]interface{})
      parameters["G___id"] = "sand131_id_5_99"
      options := graph.NewRequestOptionsWithBindings(bindings)
      options.SetTimeout(5000)
    3. 执行如下命令,发送请求至图数据库GDB服务端。

      dsl := "g.V(G___id)"
      results, err := client.SubmitScriptOptions(dsl, options)
    4. 执行如下命令,关闭客户端。

      client.Close()

其他方法配置超时时间

Java bytecode

  1. 执行如下命令,初始化客户端。

    Cluster cluster = Cluster.build(new File(yaml)).create();
    Client client = cluster.connect().init();
  2. 执行如下命令,配置超时时间为5000毫秒。

    g.with('scriptEvaluationTimeout', 5000).V().limit(1).toList();
  3. 执行如下命令,发送请求至图数据库GDB服务端。

    List<Vertex> list = g.V().has("person","name","marko").out("knows").toList();
  4. 执行如下命令,关闭客户端。

    cluster.close();

Java 请求超时时间配置

// 1. 初始化客户端 client

// 2. 配置请求参数,包括超时时间,bindings参数化
RequestOptions.Builder options = RequestOptions.build().timeout(5000);
options.addParameter("G___id", "sand131_id_5_99");

String dsl = "g.V(G___id)";
// 3. 发送请求到GDB服务端,同时提供请求的配置
ResultSet results = client.submit(dsl, options.create());

// 4. 结束任务后关闭客户端 client
说明

将sand131_id_5_99替换为实际请求参数。

Gremlin-console 请求超时时间配置

:remote config timeout 5000

Python 请求超时时间配置

from gremlin_python.driver.request import RequestMessage

# 1. 初始化客户端 client

dsl = "g.V(G___id)";
parameters = {}
parameters["G___id"] = "sand131_id_5_99"

# 2. 配置请求,包括超时时间,bindings参数化,请求语句
message = RequestMessage('', 'eval', {'gremlin': dsl, 'scriptEvaluationTimeout': 5000, 'bindings': parameters})

# 3. 发送请求到GDB服务端,同时包含有请求的配置
results = client.submit(message).all().result()

# 4. 结束任务后关闭客户端 client
说明

将sand131_id_5_99替换为实际请求参数。

.Net 请求超时时间配置

// 1. 初始化客户端 client

string dsl = "g.V(G___id)";
Dictionary<string, object> bindings = new Dictionary<string, object> {{"G___id", "sand131_id_5_99"}};

// 2. 配置请求,包括超时时间,bindings参数化,请求语句
var msgBuilder = RequestMessage.Build(Tokens.OpsEval).AddArgument(Tokens.ArgsGremlin, dsl)
        .AddArgument(Tokens.ArgsBindings, bindings).AddArgument("scriptEvaluationTimeout", 5000);

// 3. 发送请求到GDB服务端,同时包含有请求的配置
await gremlinClient.SubmitAsync<T>(msgBuilder.Create()).ConfigureAwait(false);

// 4. 结束任务后关闭客户端 client
说明

将sand131_id_5_99替换为实际请求参数。

Go 请求超时时间配置

import "github.com/aliyun/alibabacloud-gdb-go-sdk/gdbclient/graph"

// 1. 初始化客户端 client

parameters := make(map[string]interface{})
parameters["G___id"] = "sand131_id_5_99"

// 2. 配置请求参数,包括超时时间,bindings参数化
options := graph.NewRequestOptionsWithBindings(bindings)
options.SetTimeout(5000)

// 3. 发送请求到GDB服务端,同时提供请求的配置
dsl := "g.V(G___id)"
results, err := client.SubmitScriptOptions(dsl, options)

// 4. 结束任务后关闭客户端 client
说明

将sand131_id_5_99替换为实际请求参数。

bytecode请求超时时间配置

图数据库支持bytecode请求的超时时间配置,Java 环境使用如下(其他环境暂不支持)。

g.with('scriptEvaluationTimeout', 2000).V().limit(1).toList()
阿里云首页 图数据库 GDB 相关技术圈