Neo4j中最好使用索引或标签

Neo4j中最好使用索引或标签,neo4j,neo4j.rb,Neo4j,Neo4j.rb,我需要展示最新的帖子。未来,将有大约数十亿个职位 那么,哪种方式是显示最新帖子列表的最佳方式呢 通过将每个帖子的月份存储为201506并编制索引。或 通过创建标签201506。。201508,并在其特定标签中存储帖子 然后根据每个月按降序检索帖子,或者是否有其他方法可以做到这一点 此外,如果我有更多标签,是否会影响性能。如果您希望系统中所有帖子的有序列表(无论作者是谁),您可以将其组织为表示时间线的链接列表: (post1:Post) -[:PREV_POST]-> (post2:Post

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

那么,哪种方式是显示最新帖子列表的最佳方式呢

  • 通过将每个帖子的月份存储为201506并编制索引。或

  • 通过创建标签201506。。201508,并在其特定标签中存储帖子

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


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

    如果您希望系统中所有帖子的有序列表(无论作者是谁),您可以将其组织为表示时间线的链接列表:

    (post1:Post) -[:PREV_POST]-> (post2:Post) -[:PREV_POST]-> ...
    
    因此,
    PREV\u POST
    关系将最近的POST连接到上一个POST

    此外,您可能有一个时间树(请参见示例实现)。由于最大域粒度为月,因此时间树中有年和月

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

    例如,要查询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
    
    匹配(:TimeRoot)-[:HAS_YEAR]->(起始月:年{年:2014})-[:HAS_YEAR]->(结束月:月{月:12月}),
    (起始月)(第一邮政)
    将节点(路径)作为post展开
    回程站
    

    请注意,我实际上还没有测试这个查询,所以可能有一些输入错误。其目的是演示模型,而不是完整的解决方案。

    您是否考虑过使用听起来像是一个完美的用例…谢谢,我没有使用java,无论如何,如果您使用年、月、日的单个属性并对其进行索引,然后从今天甚至可能是昨天检索帖子,那么节点架构应该很容易,我们正在连接更多的节点,10亿个帖子的查询性能如何。取决于您获取的帖子数量。在理想情况下,Neo4j每秒可以遍历每个核心数百万个关系。如果要在每个用户上下文中组织帖子,请参见Graphity模型