小精灵:避免重复而不丢失性能

2024-06-28 20:52:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用gremlin python在尽可能短的时间内插入数百万个顶点和边。 我有两件事要考虑: 避免顶点和边重复 避免花费10小时插入所有数据

请求的主要时间用于查找现有顶点并创建关系。 如果我插入边而不检查顶点是否已经存在,脚本会更快

我也尝试过批量处理事务,如:

g.addV("person").property("name", "X").as_("p1")
 .addV("person").property("name", "Y").as_("p2")
 .addE("has_address").from("p1").to(g.V().has("address", "name", "street"))
 .addE("has_address").from("p2").to(g.V().has("address", "name", "street2")).iterate()

但我没有提高表现

对于重复项,我将在查询中获得相同的结果? 我想以后对于重复的查询会更昂贵没有

谢谢


Tags: tonamefromaddressas时间propertyperson
1条回答
网友
1楼 · 发布于 2024-06-28 20:52:33

我的{a1}对你的最后一个问题提供了一些关于如何快速加载数据的提示,现在我知道你的大小是百万的,我希望你能考虑这些策略。

如果您继续使用Gremlin和Python加载,则考虑以下几点:

  1. 我不确定您的副本是从哪里产生的,但我会寻找机会来清理源数据,并组织它和加载计划,以避免在第一时间加载它们,这将节省您以后的清理工作。我不能说重复的数据是否会在查询中留下相同的结果,因为我不知道您的数据,也不知道您的查询。在一些图表和查询中,我知道重复项是不相关的,是预期的,而在另一些图表和查询中,它可能是一场灾难
  2. 一定要尝试将您的负载组织到我在另一个答案中建议的blog post中的批处理模式中。这种方法比构建包含数百个addV()addE()的巨型链式小精灵遍历更快
  3. 与第1项相关,您已经看到了在插入之前查找图形元素的性能问题。考虑预排序数据,以避免重复的顶点查找。也许一种方法是首先加载所有顶点,以便知道它们的存在,然后对边加载进行分组/排序,这样可以一次找到顶点并加载该顶点邻域中的所有边
  4. 最后,如果您可以计算出1和3,那么您可能可以并行化负载

同样,在这样的论坛上不可能真正提供细节,但也许这些想法会激励你找到答案

相关问题 更多 >