2015-06-27 84 views
1

我需要顯示最新的帖子。將來,將會有大約數十億個職位。索引或標籤在Neo4j中最好

那麼哪個是顯示最新帖子列表的優化方式。

  1. 通過將每個帖子的月份存儲爲201506並將其編入索引。或

  2. 通過創建標籤爲201506 .. 201508並將帖子存儲在其特定標籤中。

然後根據每個月以降序來回顧帖子,或者是否有任何其他方式來做到這一點。

此外,如果我有更多的標籤,是否會影響性能與否。

+1

你有沒有考慮過使用[graphaware timetree?](https://github.com/graphaware/neo4j-timetree)聽起來像是一個完美的用例... – drewmoore

+0

謝謝,我沒有使用java,反正我會查看節點架構 – Dheena

+0

如果您使用年份,月份,日期的單個屬性並對其進行索引,然後從今天和可能在昨天檢索帖子,應該很容易。 –

回答

1

如果你想擁有的所有帖子的有序列表,在您的系統(無論作者的),你可能會安排它作爲一個鏈表表示你的時間表:

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

所以PREV_POST關係連接的最最近發佈到前一個。

此外,您可能有一個timetree(請參閱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 

請注意,我沒有實際測試過的查詢,所以可能有一些錯別字。目的是演示模型,而不是完整的解決方案。

+1

在這裏,我們正在連接更多的節點,這個查詢性能如何,10億個帖子。 – Dheena

+0

取決於您獲取的帖子數量。在理想情況下,Neo4j每個核心可以每秒傳遞數百萬個關係。如果您想在每個用戶上下文中組織帖子,請參閱Graphity模型http://www.rene-pickhardt.de/graphity-an-efficient-graph-model-for-retrieving-the-top-k-新聞提要換用戶功能於社會網絡/ –