1

我需要显示最新的帖子。未来,将有大约数十亿个帖子。

那么这是显示最新帖子列表的优化方式。

  1. 通过将每个帖子的月份存储为 201506 并对其进行索引。或者

  2. 通过将标签创建为 201506 .. 201508 并将帖子存储在其特定标签中。

然后根据每个月按降序检索帖子,或者有没有其他方法可以做到这一点。

另外,如果我有更多标签,是否会影响性能。

4

1 回答 1

1

如果您想要系统中所有帖子的有序列表(无论作者如何),您可以将其组织为代表您的时间线的链接列表:

(post1:Post) -[:PREV_POST]-> (post2:Post) -[:PREV_POST]-> ...

因此,这种PREV_POST关系将最近的帖子与上一个帖子联系起来。

此外,您可能有一个时间树(参见http://graphaware.com/neo4j/2014/08/20/graphaware-neo4j-timetree.html作为示例实现)。由于您的最大域粒度为月,因此您在时间树中有年和月。

然后只有每个月的第一个帖子连接到时间树中的月份节点。请参阅下面的示例模型:

在此处输入图像描述

要查询例如 2014 年 12 月的降序帖子,我们首先在时间树中找到相应的月份(2014 年 12 月),然后转到下个月(2015 年 1 月)。从两个月的节点我们转到那个月的第一篇文章,然后找到介于两者之间的所有内容:

MATCH (:TimeRoot)-[:HAS_YEAR]->(startMonth:Year{year:2014})-[:HAS_MONTH]->(endMonth:Month{month:Dec}),
  (startMonth)<-[:FIRST_IN_MONTH]-(firstPost:Post),
  (endMonth)<-[:FIRST_IN_MONTH]-()-[:PREV_POST]->(lastPost:Post),
  path = (lastPost)-[:PREV_POST*]->(firstPost)
UNWIND nodes(path) as post
RETURN post

请注意,我没有实际测试过查询,所以可能有一些拼写错误。目的是演示模型,而不是完整的解决方案。

于 2015-06-27T08:55:26.023 回答