簡體   English   中英

Neo4j核心:按順序加載RelationShips

[英]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));

請參閱QueryContext API

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM