代码之家  ›  专栏  ›  技术社区  ›  jjg

neo4.rb:节点子集的内存使用迭代

  •  0
  • jjg  · 技术社区  · 5 年前

    我有一个Neo4j模型,节点是人和鸟

    (jim:Person)-[:LIKES]->(pigeon:Bird)
    

    timestamp 属性,我想删除所有早于某个日期的关系。

    我有一个Ruby方法 delete_likes 它接受一个bird ActiveNode并执行这个关系删除,效果很好。在鸟儿身上反复我

    Bird.all.each { |bird| delete_likes(bird) }
    

    这是可行的,但速度很慢,因为有很多鸟不喜欢删除,但我还是迭代了它们。我想我也许可以用

    Bird
      .as(:bird)
      .liked_by(:person, :like)
      .where('like.timestamp < ?', cutoff)
      .pluck(:bird)
      .each { |bird| delete_likes(bird) }
    

    换句话说,执行查询以仅查找要应用函数的节点。尽管这段代码在单元测试中产生了相同的结果,但我发现,对于一个真实大小的图形,它使用了我(体面的)笔记本电脑上的所有内存,并使我的Rails服务器崩溃,这让我很难过。

    0 回复  |  直到 5 年前
    推荐文章