Tinkerpop3连接远程TitanDB服务器

7
我正在尝试使用Java中的Tinkerpop3作为客户端从已运行的TitanDB服务器获取Graph对象(我不想创建服务器)。
换句话说,我正在尝试实现这样一个函数:
public Graph obtainGraph(String serverIp, String graphName);

我试图像这里一样做: AWS Lambda + Tinkerpop/Gremlin + TitanDB on EC2 + AWS DynamoDB in cloud 但是我理解,TitanFactory.open()会启动服务器,而我不想这样做 - 我只想连接到现有的服务器。
文档以及大部分互联网材料都使用内存图进行示例,我找不到一个示例,显示如何:
  • 创建新图并将其保存在远程服务器上

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

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

  • 删除整个图形

我不想通过Gremlin语言(字符串)执行上述操作,而是通过Java API(TinkerpopBlueprins)执行。 这个人已经接近我所需的内容: Add vertices to TitanDB Graph in Java 但是,他的方法已经将Graph作为参数。
我在互联网上许多地方看到过GraphFactory.open()获取属性文件路径的方式,但我没有看到这种文件的内容示例,特别是与TitanDB相关的数据,因此我更喜欢使用Configuration对象。
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 服务器,我可以用作示例?

我想看到完全可工作的示例,而不是内存中的外部配置。


http://s3.thinkaurelius.com/docs/titan/1.0.0/storage-backends.html - Jason Plurad
1个回答

7
这是一个Titan驱动程序的示例,它连接到正在运行的Titan服务器。https://github.com/pluradj/titan-tp3-driver-example正如您所注意到的那样,它将Gremlin作为字符串传递给远程的Titan服务器。
如果您不想这样做,因为您想直接使用Java API,您应该使用TitanFactory.open()来直接连接到您的图形。 TitanFactory.open()创建一个TitanGraph实例,您可以对其执行图形API调用。它不会启动Titan服务器。在底层,它创建客户端连接到后端存储和索引。
你可以参考这个例子,了解如何编写一个没有Titan Server的Titan Java程序https://github.com/pluradj/titan-tp3-java-example
你可以使用属性文件进行配置(这里有一个使用Cassandra和Elasticsearch的示例配置),或者通过代码构建一个Configuration对象(基本上设置与属性文件中相同的键值对)。
  • 如果在您初始连接之前图形不存在,则Titan将在Cassandra中创建图形keyspace并在Elasticsearch中创建索引。

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

  • Titan没有任何API从后端存储中删除图形。要删除整个图形,您需要通过Java客户端驱动程序连接到Cassandra,并执行API以删除keyspace。同样,您需要通过其Indices API连接到Elasticsearch并删除索引。


它使用普通的Gremlin - “g.V().hasLabel('software').has('name',n).in('created').values('name')”。 我想要像JPA一样,不使用字符串查询与服务器进行通信。 - spam
是的,它有一点帮助,因为我终于确定TitanFactory.open()不会启动服务器(文档对我来说不太清楚)。但是,我不知道应该将什么作为storage.backend的值——简单的“titan”和“titandb”都不起作用。 - spam
1
你想使用哪个后端?Titan 1.0的开箱即用可能值包括:cassandracassandrathrifthbaseberkeleyje。如果你想使用DynamoDB,看起来它是com.amazon.titan.diskstorage.dynamodb.DynamoDBStoreManager。我建议你查阅Titan存储后端文档。很多内容都在那里涵盖了。http://s3.thinkaurelius.com/docs/titan/1.0.0/storage-backends.html - Jason Plurad
好的,最终后端将是DynamoDB,但客户端为什么要知道呢?客户端难道不应该只知道他连接到TitanDB吗?无论如何,将其添加为DynamoDB会给我带来与我在问题编辑中提到的相同的警告和执行暂停。所以基本上将两个问题合并成了一个 :) - spam
@JasonPlurad,使用Titan服务器有哪些优势?假设我想从Java访问图形,仅使用Java API是否总是更方便? - Reinoud van Santen
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接