【发布时间】:2022-07-06 07:46:35
【问题描述】:
目标
我想了解 JanusGraph 处理同步 gremlin 查询的方式。它是顺序的还是并行的?它是如何决定的?
潜在的兴趣是我需要进行大量的计算和图形遍历。我的机器上的所有内容都在本地,虽然我已经并行化了 gremlinpython 脚本,但某处似乎存在瓶颈。
配置
- JanusGraph 0.6.1 完整版
- 本地图(默认使用
conf/remote.yaml文件)
我在做什么
每个线程都是用几个属性创建的,特别是,它们都得到一个AnonymousTraversalSource。然后他们将从起始顶点列表中弹出一个元素,执行以下代码,并重复直到列表为空。
def job(vertex_id:int, g:AnonymousTraversalSource, length:int, nb_walks:int) -> str:
random_walks = []
for _ in range(nb_walks):
random_walk = g.V(vertex_id).repeat(
__.local(__.both().sample(1))
).times(length).path().next()
random_walks.append(",".join([str(v.id) for v in random_walk]))
return "\n".join(random_walks)
遍历是这样定义的:
connection = DriverRemoteConnection(<URL>, "g")
g = traversal().with_remote(connection)
我尝试了什么
我试过了:
- 提供相同的
AnonymousTraversalSource对象 - 提供不同的
AnonymousTraversalSource对象,用相同的DriverRemoteConnection对象实例化 - 赋予不同的
AnonymousTraversalSource对象,这些对象由不同的DriverRemoteConnection对象构建
这些选项都没有明显快于其他选项,它们都在 20-25 秒内进行了大约 500 次随机游走
问题
我构建DriverRemoteConnection 或AnonymousTraversalSource 对象的方式是否存在问题?
有没有提高性能的方法?我是否达到了这种方式的极限?
【问题讨论】:
标签: python gremlin janusgraph gremlinpython