Neo4j Tinkerpop多数据库通用版本

Neo4j Tinkerpop多数据库通用版本,neo4j,tinkerpop,tinkerpop3,janusgraph,gremlin-server,Neo4j,Tinkerpop,Tinkerpop3,Janusgraph,Gremlin Server,摘要 我正在开发一个应用程序,旨在跨tinkerpop支持的多个图形数据库工作 详细信息 根据我的研究,同一版本的tinkerpop库(gremlin python)不适用于所有图形数据库的最新版本。解决这种情况的最佳方法是什么。我打算测试的数据库是 JanusGraph 0.2.0支持gremlin python 3.2.7 NEO4J 3.3.3支持gremlin python 3.3.2 我仍在尝试集成更多的数据库,如orientDB和Amazon Neptune。您知道它们将支持什么版本

摘要

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

详细信息

根据我的研究,同一版本的tinkerpop库(gremlin python)不适用于所有图形数据库的最新版本。解决这种情况的最佳方法是什么。我打算测试的数据库是

  • JanusGraph 0.2.0支持gremlin python 3.2.7
  • NEO4J 3.3.3支持gremlin python 3.3.2

  • 我仍在尝试集成更多的数据库,如orientDB和Amazon Neptune。您知道它们将支持什么版本吗。

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

    版本指向一个属性,因此进一步检查pom,您将看到上面定义的数字:

    因此OrientDB 3.2.3.0支持TinkerPop 3.2.3。对于封闭源代码系统,您只能四处搜索,直到找到您要寻找的答案,或者直接询问供应商,我猜-我已经看到Neptune在3.3.x上,但我不确定“x”的版本是什么

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

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

    例如,如果您在此链接中向下滚动一点到“序列化”部分,您将找到Neptune支持的格式:

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

    至于如何为序列化配置python驱动程序?诚然,这方面的文章并不多。关键是在配置
    客户端
    时设置
    消息_序列化程序
    (来自gremlinpython 3.3.2):

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

    因此,这只是让连接正常工作-然后还有其他需要考虑的事情:

  • 如果在旧服务器上使用新版本的gremlinpython,则需要确保了解服务器上不支持的任何功能(例如,不要从3.3.x客户端使用
    math()
    step,因为它在3.2.x服务器上无法工作)
  • CosmosDB可能允许您连接3.3.x,但它没有完全的Gremlin支持,目前不支持基于字节码的遍历-仅支持字符串
  • GraphSON序列化在这些版本中修复了许多错误,有时某些类型可能会有一个修改的序列化方案,可能会阻止3.3.x与3.2.x对话-我想不出会立即跳出的任何大问题,但我很确定这已经发生了——也许是
    树的序列化中的某些东西,也许是一些扩展类型。如果遇到问题,您可以查看GraphSON类型的完整列表,并在发布的版本之间进行比较

  • 是的,我会调查这个…很好的解释