Tinkerpop 多数据库通用版
Tinkerpop common version for multiple databases
总结
我正在开发一个旨在跨 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 确保同一版本中的这些配置是一致的,以便它们开箱即用。这就是为什么我们倾向于建议您尽可能使用相同的版本。如果不可能,您需要手动进行这些对齐。
例如,如果您在此 link 中向下滚动到 "Serialization" 部分,您会发现 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 的打包中找到:
关于您如何配置 python 驱动程序以进行序列化?不可否认,没有太多关于它的文章。关键是在配置Client
时设置message_serializer
(来自gremlinpython 3.3.2):
你可以看到默认设置为 GraphSON 3.0。所以,这对 Neptune 来说是完美的,但对 JanusGraph 来说不是。对于尚不支持 GraphSON 3.0 的 JanusGraph,您只需更改配置以使用 GraphSON 2.0 序列化程序:
所以,这只是让连接正常工作 - 然后还有其他事情需要考虑:
- 如果您对旧服务器使用新版本的 gremlinpython,您将需要确保了解服务器不支持的任何功能(例如,不要使用
math()
从您的 3.3.x 客户端开始,因为它不能在 3.2.x 服务器上运行)
- CosmosDB 可能允许您连接 3.3.x,但它没有完整的 Gremlin 支持,目前不支持基于字节码的遍历 - 仅支持字符串
- 这些版本的 GraphSON 序列化中的许多错误已得到修复,有时某些类型可能具有修改后的序列化方案,这可能会阻止 3.3.x 与 3.2.x 通信- 我想不出任何会立即跳出的大问题,但我很确定它已经发生了 - 也许是
Tree
的序列化以及一些扩展类型。如果您 运行 遇到麻烦,您可以随时查看 GraphSON 类型的完整列表 here 并比较已发布的版本。
总结
我正在开发一个旨在跨 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 确保同一版本中的这些配置是一致的,以便它们开箱即用。这就是为什么我们倾向于建议您尽可能使用相同的版本。如果不可能,您需要手动进行这些对齐。
例如,如果您在此 link 中向下滚动到 "Serialization" 部分,您会发现 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 的打包中找到:
关于您如何配置 python 驱动程序以进行序列化?不可否认,没有太多关于它的文章。关键是在配置Client
时设置message_serializer
(来自gremlinpython 3.3.2):
你可以看到默认设置为 GraphSON 3.0。所以,这对 Neptune 来说是完美的,但对 JanusGraph 来说不是。对于尚不支持 GraphSON 3.0 的 JanusGraph,您只需更改配置以使用 GraphSON 2.0 序列化程序:
所以,这只是让连接正常工作 - 然后还有其他事情需要考虑:
- 如果您对旧服务器使用新版本的 gremlinpython,您将需要确保了解服务器不支持的任何功能(例如,不要使用
math()
从您的 3.3.x 客户端开始,因为它不能在 3.2.x 服务器上运行) - CosmosDB 可能允许您连接 3.3.x,但它没有完整的 Gremlin 支持,目前不支持基于字节码的遍历 - 仅支持字符串
- 这些版本的 GraphSON 序列化中的许多错误已得到修复,有时某些类型可能具有修改后的序列化方案,这可能会阻止 3.3.x 与 3.2.x 通信- 我想不出任何会立即跳出的大问题,但我很确定它已经发生了 - 也许是
Tree
的序列化以及一些扩展类型。如果您 运行 遇到麻烦,您可以随时查看 GraphSON 类型的完整列表 here 并比较已发布的版本。