Tinkerpop多个数据库的通用版本

Aks*_*hay 4 neo4j tinkerpop tinkerpop3 gremlin-server janusgraph

摘要

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

细节

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

  1. JanusGraph 0.2.0支持gremlin-python 3.2.7
  2. NEO4J 3.3.3支持gremlin-python 3.3.2

我仍在尝试集成更多数据库,如orientDB和Amazon Neptune,你知道他们将支持哪个版本.

ste*_*tte 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,则需要确保知道服务器上不支持的任何功能(例如,不要使用math()3.3.x客户端中的步骤,因为它赢了在3.2.x服务器上工作)
  2. CosmosDB可能允许您连接3.3.x,但它没有完整的Gremlin支持,此时不支持基于字节码的遍历 - 只有字符串
  3. 在这些版本的GraphSON序列化中已经修复了许多错误,有时某些类型可能有一个修订的序列化方案,可能会阻止3.3.x与3.2.x交谈 - 我无法想到任何像这样的大问题这会马上跳出来,但我很确定它已经发生了 - 也许是序列化的Tree一些东西,也许还有一些扩展类型.您可以随时看GraphSON类型的完整列表在这里,如果你遇到麻烦公布版本之间进行比较.