在Neo4j中索引或标记是最好的

时间:2015-06-27 07:44:35

标签: neo4j neo4j.rb

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

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

  1. 将每个帖子的月份存储为201506并将其编入索引。或

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

因此PREV_POST关系会将最新的帖子连接到上一个帖子。

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

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

enter image description here

要查询,例如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

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