Tinkerpop多个数据库的通用版本

时间:2018-04-19 04:37:33

标签: neo4j tinkerpop tinkerpop3 janusgraph gremlin-server

摘要

我正在开发一个能够跨越tinkerpop支持的多个图形数据库工作的应用程序

详情

根据我的研究,相同版本的tinkerpop库(gremlin-python)不能与所有图形数据库的最新版本一起使用。这种情况的最佳方法是什么?我打算测试的数据库是

  1. JanusGraph 0.2.0支持gremlin-python 3.2.7
  2. NEO4J 3.3.3支持gremlin-python 3.3.2
  3. 我仍在尝试整合更多数据库,例如orientDB和亚马逊海王星你知道他们会支持哪个版本。

1 个答案:

答案 0 :(得分:5)

这个问题可能有点棘手,尤其是非开源系统没有明确发布版本和功能支持。对于开源系统,您通常可以通过查看项目的pom.xml找到它们支持特定版本的TinkerPop版本。对于OrientDB,这意味着找到你想要的版本(在本例中为3.2.3.0),然后寻找gremlin-core依赖:

https://github.com/orientechnologies/orientdb-gremlin/blob/3.2.3.0/driver/pom.xml#L47

版本指向一个属性,所以进一步检查pom,你会看到上面定义的那个数字:

https://github.com/orientechnologies/orientdb-gremlin/blob/3.2.3.0/driver/pom.xml#L14

因此OrientDB 3.2.3.0支持TinkerPop 3.2.3。使用封闭源系统,你只能搜索到你找到你想要的答案或直接询问供应商我猜 - 我已经看到海王星在3.3.x上,但我不确定是什么版本" x"。

仅仅因为所有这些系统都支持不同版本的TinkerPop,并且一般建议使用匹配的TinkerPop版本连接到它们并不意味着您无法获得3.3.x驱动程序进行连接到基于3.2.x的服务器。你可能没有最好的经验,你需要知道一些事情,但我认为可以做到。

从驱动程序的角度来看,这项工作的关键是确保为要连接的图形提供正确的序列化配置。无论您是否尝试连接到同一版本系统,都是如此。默认情况下,TinkerPop确保同一版本中的这些配置对齐,以便它们开箱即用。这就是为什么我们倾向于建议您尽可能使用相同的版本。如果不可能,您需要手动进行这些对齐。

例如,如果您将此链接向下滚动到"序列化"你会发现海王星支持的格式:

https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-differences.html

只要您将驱动程序配置为匹配其中一种格式,它就适合您。同样可以说JanusGraph,与Neptune相比,不支持Gryo或GraphSON 3.0,因为它绑定到3.2.x线。序列化器的配置可以在JanusGraph的Gremlin Server包装中找到:

https://github.com/JanusGraph/janusgraph/blob/v0.2.0/janusgraph-dist/src/assembly/static/conf/gremlin-server/gremlin-server.yaml#L15-L21

关于如何配置python驱动程序进行序列化?不可否认,目前还没有很多内容。关键是在配置message_serializer时设置Client(来自gremlinpython 3.3.2):

https://github.com/apache/tinkerpop/blob/3.3.2/gremlin-python/src/main/jython/gremlin_python/driver/client.py#L44-L45

你可以看到默认设置为GraphSON 3.0。所以,这对海王星来说是完美的,但不是JanusGraph。对于尚不支持GraphSON 3.0的JanusGraph,您只需更改配置即可使用GraphSON 2.0序列化程序:

https://github.com/apache/tinkerpop/blob/3.3.2/gremlin-python/src/main/jython/gremlin_python/driver/serializer.py#L149

所以,这只是让连接工作 - 那么还有其他事情需要考虑:

  1. 如果您对较旧的服务器使用新版本的gremlinpython,则需要确保您了解服务器上不支持的任何功能(例如,不要使用{{1从你的3.3.x客户端步骤,因为它不能在3.2.x服务器上工作)
  2. CosmosDB可能允许您连接3.3.x,但它没有完整的Gremlin支持,此时不支持基于字节码的遍历 - 只有字符串
  3. 在这些版本的GraphSON序列化中修复了许多错误,有时某些类型可能有一个修订的序列化方案,可能会阻止3.3.x与3.2.x交谈 - 我无法想到任何像这样的大问题会立即跳出来,但我很确定它已经发生了 - 也许是math()的序列化以及某些扩展类型的事情。您可以随时查看GraphSON类型here的完整列表,并在遇到问题时比较已发布的版本。