【问题标题】:Tinkerpop common version for multiple databases用于多个数据库的 Tinkerpop 通用版本
【发布时间】:2018-04-19 04:37:33
【问题描述】:

总结

我正在开发一个应用程序,旨在跨由 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,你知道它们会支持什么版本吗?

【问题讨论】:

    标签: neo4j tinkerpop tinkerpop3 janusgraph gremlin-server


    【解决方案1】:

    这个问题可能有点棘手,尤其是对于没有明确发布版本和功能支持的非开源系统。对于开源系统,您通常可以通过查看项目的 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。对于闭源系统,您只能四处搜索,直到找到您正在寻找的答案或直接询问供应商我猜 - 我已经看到 Neptune 在 3.3.x 上,但我不确定“x”的版本.

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

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

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

    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 驱动程序进行序列化?诚然,关于这方面的文章并不多。关键是在配置Client时设置message_serializer(来自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。所以,这对 Neptune 来说是完美的,但对 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,您需要确保了解服务器上不支持的任何功能(例如,不要使用 3.3 中的 math() 步骤.x 客户端,因为它无法在 3.2.x 服务器上运行)
    2. CosmosDB 可能允许您连接到 3.3.x,但它不支持完整的 Gremlin,并且目前不支持基于字节码的遍历 - 仅支持字符串
    3. 已在这些版本的 GraphSON 序列化中修复了许多错误,有时某些类型可能会修改序列化方案,这可能会阻止 3.3.x 与 3.2.x 通信 - 我想不出有什么大问题就像那种会立即跳出来的副手,但我很确定它已经发生了——也许是Tree的序列化,也许是一些扩展类型。如果遇到问题,您可以随时查看 GraphSON 类型的完整列表 here 并比较已发布的版本。

    【讨论】:

    • 是的,我会调查这个...很好的解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 2012-09-17
    相关资源
    最近更新 更多