顶点删除问题

0

【以下的问题经过翻译处理】 你好,

我在 Neptune 中有 100 万+ 个顶点,其中各有一个属性:('__graph','db8db2af-8b0c-49fb-bcf1-c44cae2d2e95')。

我想清空数据库中的所有 100 万个顶点。我知道我必须分段删除顶点,否则查询会超时。每个分段将负责删除 1000 个顶点,通常需要约 2 秒钟。下面是分段查询的样子:

g.V().has('__graph','db8db2af-8b0c-49fb-bcf1-c44cae2d2e95').limit(1000).drop()

以下是执行操作两次后的分析结果:

gremlin> g.V().has('__graph','db8db2af-8b0c-49fb-bcf1-c44cae2d2e95').limit(1000).drop().profile() ==>Traversal Metrics Step Count Traversers Time (ms) % Dur

NeptuneGraphQueryStep(Vertex) 1 1 2020.007 99.99

NeptuneDropStep 0.101 0.01

TOTAL - - 2020.109 -


gremlin> g.V().has('__graph','db8db2af-8b0c-49fb-bcf1-c44cae2d2e95').limit(1000).drop().profile() ==>Traversal Metrics Step Count Traversers Time (ms) % Dur

NeptuneGraphQueryStep(Vertex) 1 1 57883.392 100.00

NeptuneDropStep 0.130 0.00

TOTAL - - 57883.522 -

为什么删除如此不一致?通常应该花费 2000 毫秒,但我们看到像第二个示例中的时间大幅波动。很多时候查询在 2 分钟后完全超时。

请提供帮助, 谢谢 Austin

profile picture
专家
已提问 8 个月前23 查看次数
1 回答
0

【以下的回答经过翻译处理】 你好 Austin,

对于每个你要删除的顶点,它们连接到的边的数量是否有所不同?当在 Neptune 中删除顶点时,连接的边也必须被删除。没有顶点的边是无法存在的。

我们有一个多线程删除的示例实现,可能会有所帮助。它是用 Python 编写的,但是你可以将其移植到任何支持一些线程/多进程库的语言中:https://github.com/awslabs/amazon-neptune-tools/blob/master/drop-graph/drop-graph.py

该示例的目的是删除整个图形,但是你可以将其扩展为仅删除图形的某个子集。为了让其性能优化,该示例首先获取并删除边,以避免在删除顶点时查询并删除边所带来的额外开销。

profile picture
专家
已回答 8 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则