【问题标题】:Tinkerpop3 connect to remote TitanDB serverTinkerpop3 连接到远程 TitanDB 服务器
【发布时间】:2016-12-09 09:18:12
【问题描述】:

我正在尝试使用 Java 中的 Tinkerpop3 作为客户端从已经运行的 TitanDB 服务器获取 Graph 对象(我不想创建服务器)。

换句话说,我正在尝试实现这样的功能:

public Graph obtainGraph(String serverIp, String graphName);

我试图这样做: AWS Lambda + Tinkerpop/Gremlin + TitanDB on EC2 + AWS DynamoDB in cloud

但据我了解,TitanFactory.open() 启动服务器,我不想这样做 - 我只想连接到现有服务器。

文档以及 Internet 中的大多数材料都使用内存图作为示例,但我找不到显示如何:

  • 创建新图表并将其保存在远程服务器上

  • 从远程服务器检索现有图表

  • 更新此类远程 Graph,因此在添加/删除边后提交更改

  • 删除整个图

我不想通过 Gremlin 语言(字符串)做上述事情,而是通过 Java API(TinkerpopBlueprins)。 这个人正在接近我需要的东西: Add vertices to TitanDB Graph in Java 但是,他的方法已经将Graph 作为参数。

我在 Internet 的很多地方都看到 GraphFactory.open() 获取属性文件的路径,但是我没有看到此类文件的内容示例,尤其是 TitanDB 相关数据,所以我更喜欢使用 @ 987654327@对象。

Graph graph = GraphFactory.open(new BaseConfiguration())

说,没有 gremlin.graph 属性。

Configuration configuration = new BaseConfiguration();
configuration.setProperty("gremlin.graph", "titan");

Graph graph = GraphFactory.open(configuration);

GraphFactory 找不到 [titan] - 确保 jar 在类路径中

是否有任何带有枚举和常量的静态类型构建器,而不是 Map<String, Object>,它会告诉我,我必须提供哪些属性以及它们的类型是什么? 是否有任何开源项目,它使用 Tinkerpop3 作为客户端连接到远程 TitanDB 服务器,我可以用作示例?

我希望看到完整的工作示例,而不是带有外部配置的内存。

【问题讨论】:

标签: java titan gremlin tinkerpop3 tinkerpop-blueprint


【解决方案1】:

这是一个连接到正在运行的 Titan 服务器的 Titan 驱动程序示例。 https://github.com/pluradj/titan-tp3-driver-example 正如您所指出的,这会将 Gremlin 作为字符串传递给远程 Titan 服务器。

如果您不想这样做,因为您想直接使用 Java API,您应该使用TitanFactory.open() 直接连接到您的图表。 TitanFactory.open() 创建一个 TitanGraph 实例,您可以对其执行图形 API 调用。 它不会启动 Titan 服务器。 在幕后,它会创建与后端存储和索引的客户端连接。

您可以参考此示例了解没有 Titan 服务器的 Titan Java 程序https://github.com/pluradj/titan-tp3-java-example

您可以使用属性文件(这里是使用 Cassandra 和 Elasticsearch 的 example configuration)或通过代码构造 Configuration 对象(基本上设置与属性文件中相同的键值对)来配置它。

  • 如果在初始连接之前图表不存在,Titan 将在 Cassandra 中创建图表键空间并在 Elasticsearch 中创建索引。

  • 记下 storage.hostnameindex.search.hostname,因为它们分别是您的 Cassandra 和 Elasticsearch 集群。 这些本质上是您的“图形服务器”。您不需要运行单独的 Titan 服务器。

  • Titan 没有任何 API 可以从后端存储中删除图形。要删除整个图,您需要通过Java client driver 连接到 Cassandra,并执行 API 以删除密钥空间。同样,您需要通过其Indices API 连接到 Elasticsearch,并删除索引。

【讨论】:

  • 它使用普通的 Gremlin -“g.V().hasLabel('software').has('name',n).in('created').values('name')”。我想在不使用字符串查询的情况下与服务器通信,更接近 JPA。
  • 是的,它有点帮助,我终于确定 TitanFactory.open() 不会启动服务器(文档不清楚,至少对我来说)。但是,我不知道应该写什么作为 storage.backend 的值 - 简单的“titan”和“titandb”不起作用。
  • 你想使用什么后端? Titan 1.0 开箱即用的可能值为:cassandracassandrathrifthbaseberkeleyje。如果你想使用 DynamoDB,它看起来是 com.amazon.titan.diskstorage.dynamodb.DynamoDBStoreManager。我建议您查看 Titan 存储后端文档。很多内容都在那里。 s3.thinkaurelius.com/docs/titan/1.0.0/storage-backends.html
  • 嗯,是的,最终后端将是 DynamoDB,但是为什么客户端必须知道呢?客户不应该只知道他连接到 TitanDB 吗?无论如何,将其添加为 DynamoDB 会给我相同的警告和执行暂停,因为我在我的问题 stackoverflow.com/questions/38592053/… 中进行了编辑,所以基本上将两个问题合并为一个 :)
  • @JasonPlurad 使用 Titan 服务器有什么好处?假设我想从 Java 访问图形,只使用 Java API 不是更方便吗?
猜你喜欢
  • 2016-01-22
  • 2014-09-19
  • 1970-01-01
  • 2017-09-16
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多