如何远程连接到JanusGraph服务器?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何远程连接到JanusGraph服务器?相关的知识,希望对你有一定的参考价值。

我想使用Java API来操作远程服务器上的图形,服务器实际上在localhost中托管。我用来连接服务器的代码是:

JanusGraphFactory.Builder b = JanusGraphFactory.build();
b.set("hosts", "[localhost]");
JanusGraph graph = b.open();

但是在我运行程序之后,它抛出了这样的异常:

线程“main”中的异常java.lang.IllegalStateException:需要设置配置值:root.storage.backend

那么如何使用Java API连接到远程JanusGraph服务器?

答案

我发现的文档建议创建一个EmtpyGraph并从中获取远程遍历:

EmptyGraph.instance().traversal().withRemote(config);

其中config是具有远程属性的配置对象,例如:

    config.setProperty("clusterConfiguration.hosts", HOST);
    config.setProperty("clusterConfiguration.port", PORT);
    config.setProperty("clusterConfiguration.serializer.className", "org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0");
    config.setProperty("clusterConfiguration.serializer.config.ioRegistries", ioRegistries); // (e.g. [ org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry) ]
    config.setProperty("gremlin.remote.remoteConnectionClass", "org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection");
    config.setProperty("gremlin.remote.driver.sourceName", "g");

但是,我遇到了使用JanusGraph特定功能(例如提交事务)的问题,因为图形实例是EmptyGraph本身,而不是JanusGraph。所以,试试:

GraphTraversalSource g = JanusGraphFactory.open("inmemory").traversal().withRemote(config);

这将为您提供远程gremlin-server的遍历源,您可以执行g.addV(“vertexLabel”).... ,g.tx()。commit();等等。

另一答案

这是一个简单的方法:

graph = JanusGraphFactory.open("conf/janusgraph-cassandra-solr.properties") juno = graph.addVertex() //Automatically opens a new transaction juno.property("name", "juno") graph.tx().commit() //Commits transaction

Janus User Doc

Janus使用现有的存储解决方案,如cassandra,hbase,berkelydb来存储数据。

您可以通过两种方式连接:1 - 连接到远程gremlin服务器并远程执行遍历/查询。这是通过使用tinkerpop gremlin 2的Cluster和EmptyGraph - 使用我在上面的帖子中建议的技术直接从您的应用程序连接。

连接到远程gremlin服务器的优点/缺点

优点

  • 服务器具有更多控制权,所有查询都是集中式的。
  • 由于每个人都通过远程gremlin服务器运行遍历/查询,因此所有服务器都受事务保护。远程gremlin服务器默认在事务中运行遍历/查询。
  • 中央战略管理
  • 中央模式管理

缺点

  • 艰难做手动交易管理
  • 您必须使用groovy脚本作为字符串并将其发送到删除(集群提交)以进行代码的事务执行。

通过直接从客户端代码连接(避免远程连接),您可以获得更多控制权。

此外,您可以直接在代码中使用JanusGraph实例,这仍然是gremlin投诉,以充分利用JanusGraph API。

另一答案

试试这个:

JanusGraphFactory.Builder builder = JanusGraphFactory.build().
            set("storage.hostname", "localhost").
            set('storage.backend', 'cassandra') //or whatever you are using as backend
builder.open();
另一答案

在janusgraph例子中查看RemoteGraph

您可以在Class RemoteGraphApp下找到如何连接到远程janusgraph服务器(Cluster)。

 conf = new PropertiesConfiguration(propFileName);

    // using the remote driver for schema
    try {
        cluster = Cluster.open(conf.getString("gremlin.remote.driver.clusterFile"));
        client = cluster.connect();
    } catch (Exception e) {
        throw new ConfigurationException(e);
    }

    // using the remote graph for queries
    graph = EmptyGraph.instance();
    g = graph.traversal().withRemote(conf);

集群配置文件包含的位置:

 hosts: [127.0.0.1]
 port: 8182
 serializer: {
   className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0,
   config: {
    ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry]
   } 
 }

以上是关于如何远程连接到JanusGraph服务器?的主要内容,如果未能解决你的问题,请参考以下文章

使用 SSH 连接到远程服务器的 Visual Studio Code - 如何将代码库与 github 同步?

如何从 Android 应用程序通过 JDBC 连接到远程 MySQL 服务器

Janusgraph 库无法在 kerberos 环境中与 hbase 通信(无法指定服务器的 Kerberos 主体名称)

fastdfs能在本地远程连接到服务器吗?

JanusGraph Server配置

JanusGraph与Cassandra集成模式