通过在节点上添加多个索引来减少查询时间 - Neo4j

时间:2018-01-12 12:24:38

标签: indexing neo4j apache-kafka cypher nodes

我有一个应用程序可以传输Twitter数据并将其发送到两个Kafka主题。这些Kafka主题由两台不同的机器读取,这些机器将数据发送到Neo4j数据库(放置在两台机器中的一台上)。

某些数据插入查询具有MERGE子句,这使得查询在数据增长时非常慢。现在,我试图减少查询时间。

在节点上添加多个索引(它们已经有一个)是不错的做法,以便每次执行MERGE时都有较小的节点模式?这有点意义吗?下面是一个查询示例:

MERGE (t:Tweet{tweet_id:{tweet_id}})
SET t.text={text}, t.language={language}, 
t.created_at={created_at}, t.retweetcount={retweetcount}, 
t.likecount={likecount}, t.location={location}

查询计划:

enter image description here

1 个答案:

答案 0 :(得分:3)

根据查询计划,您应在字段UNIQUE CONSTRAINT上为tweet_id标签创建Tweet

CREATE CONSTRAINT ON (n:Tweet) ASSERT n.tweet_id IS UNIQUE

所以,不是执行NodeByLabelScanFilter,而是NodeUniqueIndexSeek女巫真的更好

此外,您给数据库的工作量越少,表现越好:)

因此,如果您只需要更新字段favorite_count& retweet_count当节点已经存在时,您应该使用ON CREATE SET的{​​{1}}和ON MATCH SET这样的子命令:

MERGE