7

是否可以从字节码生成 gremlin 脚本?

我正在开发一个 POC,我需要在其中通过 Gremlin API 查询图形 Azure CosmosDB 数据库。

目前,Azure CosmosDB 不支持字节码。Azure 开发团队已经开始着手这方面的工作,但到目前为止还没有发布发布时间表。

当字节码支持普遍可用时,我想准备将来需要最少重构的工作代码。

根据Apache TinkerPop 文档,提交 Gremlin 查询有两种方式:字节码和脚本

# script
client = Client('ws://localhost:8182/gremlin', 'g')
list = client.submit("g.V().has('person','name',name).out('knows')",{'name': 'marko'}).all()

# bytecode
g = traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','g'))
list = g.V().has("person","name","marko").out("knows").toList()

“字节码方式”在我看来效率更高(语法检查、IDE 智能感知等),而且我对创建DSL(域特定语言)很感兴趣。

是否可以使用 fluent api 并将其序列化为字符串,方式类似于:

client = Client('ws://localhost:8182/gremlin', 'g')
g = traversal()
q = g.V().has("person","name","marko").out("knows").toString()
list = client.submit(q).all()

我正在使用 python 3.5 和 gremlinpython 3.4.0

4

1 回答 1

2

绝对可以从字节码生成遍历的字符串表示。TinkerPop 已经为 Groovy 和 Python 脚本使用了它(出于各种原因,主要用于测试,但它还有其他用途,例如支持字节码中的 lambda 和其他实用目的)。我们通过ScriptTranslator实现来实现这一点,其中一个用于Groovy,两个用于Python(其中一个实际上用于Jython)。当然,问题是所有这些ScriptTranslator实例在技术上都是针对 JVM 的,听起来您需要一些用于原生 Python 的东西。

也许您可以检查PythonTranslator代码并在本机 Python 中实现它?它基本上只是一堆if-then字符串连接。

于 2019-03-20T20:56:41.607 回答