最新の投稿を表示する必要があります。将来的には、約数十億の投稿があるでしょう。
したがって、これは最新の投稿リストを表示する最適化された方法です。
すべての投稿の月を 201506 として保存し、インデックスを作成します。また
201506 .. 201508 としてラベルを作成し、投稿を特定のラベルに保存します。
次に、毎月に基づいて降順で投稿を取得します。または、これを行う他の方法があります。
また、ラベルが多い場合、パフォーマンスに影響するかどうか。
システム内のすべての投稿の順序付きリスト (作成者に関係なく) が必要な場合は、タイムラインを表すリンクされたリストとして整理できます。
(post1:Post) -[:PREV_POST]-> (post2:Post) -[:PREV_POST]-> ...
したがって、PREV_POST
関係は最新の投稿を前の投稿に接続します。
さらに、timetree がある場合もあります (実装例としてhttp://graphaware.com/neo4j/2014/08/20/graphaware-neo4j-timetree.htmlを参照してください)。ドメインの最大粒度は月であるため、タイムツリーには年と月があります。
各月の最初の投稿のみがタイム ツリーの月ノードに接続されます。サンプル モデルについては、以下を参照してください。
たとえば、2014 年 12 月の投稿を降順でクエリするには、まずタイムツリーでそれぞれの月 (2014 年 12 月) を見つけ、次の月 (2015 年 1 月) に移動します。2 つの月のノードから、その月の最初の投稿に移動し、その間のすべてを見つけます。
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
実際にクエリをテストしていないため、タイプミスがある可能性があることに注意してください。その意図は、完全なソリューションではなく、モデルのデモを行うことでした。