我正在维护一个小程序,它遍历 Neo4j 数据库中的文档并将 JSON 编码的对象转储到文档数据库。在 Neo4j 中——我想是出于性能原因——没有真实数据,只有 ID。想象一下这样的事情:posts: post: id: 1 tags: 1, 2 author: 2 similar: 1, 2, 3我不知道为什么要这样做,但这是我必须处理的。然后程序使用 ID 来获取每个数据结构的信息,从而产生正确的结构。取而代之的author是只是一个int,它是一个Author对象,有姓名,电子邮件,等等。similar在添加该功能之前,这一直运行良好。Similar由引用其他帖子的 ID 组成。由于在我的循环中我正在构建实际的 post 对象,我如何以有效的方式引用它们?我唯一能想到的是用我已经“转换”过的帖子创建一个缓存,如果引用的 ID 不在缓存中,则将当前帖子放在列表的底部。最终,它们都将被处理。
1 回答
BIG阳
TA贡献1859条经验 获得超6个赞
如果similar
存在可能存在的关系循环,您提出的方法将不起作用。
例如,您展示了一个1
类似于 post 的帖子2
。假设您1
首先遇到帖子。它指的2
是尚未在缓存中的 post ,因此您将 post 推1
回到队列的末尾。现在你可以发帖了2
。它指的1
是尚未在缓存中的 post ,因此您将 post 推2
回到队列的末尾。这将永远持续下去。
您可以通过分两次构建 post 对象来解决这个问题。在第一遍期间,您创建Post
对象并用除similar
引用之外的所有信息填充它们,然后构建一个map[int]*Post
将 ID 号映射到帖子的对象。在第二遍中,对于每个帖子,您迭代similar
ID 号,在地图中查找每个 ID 号,并使用结果*Post
值填充[]*Post
相似帖子的一部分。
- 1 回答
- 0 关注
- 182 浏览
添加回答
举报
0/150
提交
取消