gpt4 book ai didi

neo4j - 用于多个数据库的 Tinkerpop 通用版本

转载 作者:行者123 更新时间:2023-12-05 00:48:17 26 4
gpt4 key购买 nike

总结

我正在开发一个应用程序,该应用程序旨在跨 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-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,因为它绑定(bind)到 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。所以,这对 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

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

  • 如果您在旧服务器上使用新版本的 gremlinpython,您需要确保了解服务器上不支持的任何功能(例如,不要使用 3.3.x 客户端中的 math() 步骤因为它不适用于 3.2.x 服务器)
  • CosmosDB 可能允许您连接 3.3.x,但它没有完整的 Gremlin 支持,目前不支持基于字节码的遍历 - 仅支持字符串
  • 在这些版本的 GraphSON 序列化中已经修复了许多错误,有时某些类型可能具有修订的序列化方案,这可能会阻止 3.3.x 与 3.2.x 通信——我想不出任何像这样的大问题那会立即跳出来,但我很确定它已经发生了——也许是在 Tree 的序列化中也许还有一些扩展类型。您可以随时查看 GraphSON 类型的完整列表 here如果遇到麻烦,可以在已发布的版本之间进行比较。
  • 关于neo4j - 用于多个数据库的 Tinkerpop 通用版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49912830/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com