让我们假设这个Cypher查询(Neo4j):
MATCH(m:Meeting)
WHERE m.startDate > 1405591031731
RETURN m.name
如果图中有数百万Meeting
个节点,我应该选择哪种策略来快速进行此类查询?
startDate
财产编制索引?LuceneTimeline
?我在查询范围时没有使用案例: FROM 此startDate TO 此endDate。
顺便说一下,似乎简单的索引只在处理相等时才起作用...(不像>
那样比较。)
有什么建议吗?
答案 0 :(得分:1)
看一下这个答案:How to filter edges by time stamp in neo4j?
使用关系运算符选择节点时,最好选择用于将meeting
节点分组为离散时间间隔的中间节点。将会议添加到数据库时,您将确定每个时间戳发生在哪个时间间隔内,并获取或创建表示该时间间隔的中间节点。
您可以在数百万个会议节点上从Neo4j shell运行以下查询,这会将会议组合在一起,间隔为10秒。假设你的时间戳是毫秒。
MATCH (meeting:Meeting)
MERGE (interval:Interval { timestamp: toInt(meeting.timestamp / 10000) }
MERGE (meeting)-[:ON]->(interval);
然后,您可以执行以下查询:
MATCH (interval:Interval) WHERE interval.timestamp > 1405591031731
WITH interval
MATCH (interval)<-[:ON]-(meeting:Meeting)
RETURN meeting