我有一个应用程序可以传输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}
查询计划:
答案 0 :(得分:3)
根据查询计划,您应在字段UNIQUE CONSTRAINT
上为tweet_id
标签创建Tweet
:
CREATE CONSTRAINT ON (n:Tweet) ASSERT n.tweet_id IS UNIQUE
所以,不是执行NodeByLabelScan
加Filter
,而是NodeUniqueIndexSeek
女巫真的更好。
此外,您给数据库的工作量越少,表现越好:)
因此,如果您只需要更新字段favorite_count
& retweet_count
当节点已经存在时,您应该使用ON CREATE SET
的{{1}}和ON MATCH SET
这样的子命令:
MERGE