[英]Neo4j core: Load RelationShips with order
我正在嘗試開發和應用程序,需要數百萬個關系。 但是,當嘗試使用cypher查詢或基於創建時間(時間戳)的核心java(解析所有關系)來獲取最后的關系時,會花費大量時間。
通常,用戶將訪問從最后一個到第一個的數據,並且可能只需要訪問最后一個50的數據。 因此,我如何在加載數據時更改Neo4j的行為,以便從最后一個開始(即使對於緩存中的數據也是如此),因此無需重新排序。
問候。
您可以為每個節點提供一個帶有其創建時間的timestamp
屬性(可以使用Cypher timestamp()
函數獲得)。
然后,您可以匹配使用此子查詢創建的最后50個查詢(可以將其放置在實際查詢之前):
MATCH (n)
ORDER BY n.timestamp DESC
LIMIT 50
WITH n
// Place your actual query here. The variable 'n' will be a collection of the last 50 nodes created.
不幸的是,這並不是很快,因為neo4j將遍歷每個節點以找到timestamp
值最高的節點。 如果只需要某些節點具有時間戳,則應考慮向所有這些節點添加標簽(例如,“時間戳”),並將MATCH (n)
更改為MATCH (n:Timestamped)
。
如果您在事件節點上有時間,可以將它們放在時間樹中,請參見此處:
在Java API中,您可以將舊索引用於節點或關系,將時間戳索引為數字值,然后使用lucene范圍查詢。
看起來像這樣:
Index<Node> timeIndex = db.index().forNodes("time");
timeIndex.add(node,"timestamp",ValueContext.indexNumeric(node.getProperty("timestamp"));
timeIndex.query(QueryContext.numericRange("timestamp",from,to));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.