我正在尝试开发和应用,需要数百万人的关系。但是,当尝试根据创建时间(时间戳)使用cypher query或core java (解析所有关系)来获取最后一个关系时,它会花费很多时间。
一般来说,用户会从最后一个到第一个访问数据,可能只需要访问最后50个数据。那么我如何在加载数据时改变Neo4j的行为,以便从最后一个开始(即使是缓存中的数据),这样我就不需要对它们重新排序了。
致以问候。
发布于 2014-05-16 02:16:45
您可以为每个节点提供一个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值的节点。如果您只需要某些节点具有时间戳,那么您应该考虑为所有这些节点添加一个标签(比如‘timestamp’),并将MATCH (n)更改为MATCH (n:Timestamped)。
发布于 2014-05-16 03:43:28
如果你有事件节点上的时间,你可以把它们放在时间树中,请看这里:
在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
https://stackoverflow.com/questions/23678766
复制相似问题