【发布时间】:2018-10-08 08:20:19
【问题描述】:
我正在使用海王星的图形数据库和通过 python 的 gremlin 查询,将地址存储在数据库中。大多数查询执行良好,但一旦我尝试以下查询海王星返回内部失败异常:
g.V(address).outE('isPartOf').inV().
dedup().as_('groupNode').
inE('isPartOf').outV().dedup().as_('children').
addE('isPartOf').to(group).
select('groupNode').drop().
fold().
coalesce(__.unfold(),
g.V(address).addE('isPartOf').to(group)).next()
每个地址都有可能属于一个组。当地址已经分配给一个组时,我尝试获取分配给该组的所有地址并将它们分配给一个新组,同时删除旧组。如果地址尚未分配给组,我只想立即将地址分配给新组。
如果我自己尝试这个查询,一切都会完美执行(尽管查询有点慢)。但是,一旦我尝试在更多地址上并行执行此查询,此查询将失败并出现以下错误:
Traceback (most recent call last):
File "/usr/lib64/python2.7/threading.py", line 804, in __bootstrap_inner
self.run()
File "gremlinExample.py", line 30, in run
processTx(self.tx, self.g, self.parentBlock)
File "gremlinExample.py", line 152, in processTx
g.V(address).outE('isPartOf').inV().dedup().as_('groupNode').inE('isPartOf').outV().dedup().as_('children').select('children').addE('isPartOf').to(group).select('groupNode').drop().fold().coalesce(__.unfold(), g.V(address).addE('isPartOf').to(group)).next()
File "/home/ec2-user/.local/lib/python2.7/site-packages/gremlin_python/process/traversal.py", line 70, in next
return self.__next__()
File "/home/ec2-user/.local/lib/python2.7/site-packages/gremlin_python/process/traversal.py", line 43, in __next__
self.traversal_strategies.apply_strategies(self)
File "/home/ec2-user/.local/lib/python2.7/site-packages/gremlin_python/process/traversal.py", line 346, in apply_strategies
traversal_strategy.apply(traversal)
File "/home/ec2-user/.local/lib/python2.7/site-packages/gremlin_python/driver/remote_connection.py", line 143, in apply
remote_traversal = self.remote_connection.submit(traversal.bytecode)
File "/home/ec2-user/.local/lib/python2.7/site-packages/gremlin_python/driver/driver_remote_connection.py", line 54, in submit
results = result_set.all().result()
File "/usr/lib/python2.7/site-packages/concurrent/futures/_base.py", line 405, in result
return self.__get_result()
File "/usr/lib/python2.7/site-packages/concurrent/futures/_base.py", line 357, in __get_result
raise type(self._exception), self._exception, self._traceback
GremlinServerError: 500: {"requestId":"a42015b7-6b22-4bd1-9e7d-e3252e8f3ab6","code":"InternalFailureException","detailedMessage":"Can not get the attachable from the host vertex: v[64b32957-ef71-be47-c8d7-0109cfc4d9fd]-/->neptunegraph[org.apache.commons.configuration.PropertiesConfiguration@6db0f02]"}
据我所知,并行执行应该不是问题,因为每个查询都只是在数据库中排队(正是出于这个原因,我试图创建一个一次执行整个任务的查询)。
请原谅英语不好,这不是我的母语
【问题讨论】:
-
显然查询失败了,因为我调用了 next() 而不是 iterate()。尽管错误消息似乎是随机的,但将 next 替换为 iterate 暂时解决了该问题。
-
两件事:(1) 错误很有趣 - 您能否将代码包含在并行发出请求的代码中? (2) 我认为您的遍历没有按照您的描述进行 - 请包含一个 Gremlin 脚本,该脚本创建一些示例数据,如下所示:stackoverflow.com/questions/51388315/…
-
@JvVuuren 你有这个更新吗?当您按照斯蒂芬的要求获得更多详细信息时,也许现在将您的工作作为答案?
-
最终我们最终使用了 Neo4j。由于海王星数据库不断返回无法解释的错误。这可能与我们的设置有关,但我无法提供更多信息,因为我们不再开发此项目。
-
@JvVuuren 你介意接受这个答案以便可以关闭这个问题吗?
标签: python gremlin amazon-neptune