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

vwoqyblh  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(382)

我有一个应用程序流推特数据,并将其发送到两个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}

查询计划:

mnowg1ta

mnowg1ta1#

根据查询计划,您应该创建一个 UNIQUE CONSTRAINT 在球场上 tweet_id 对于标签 Tweet :

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

所以与其表演 NodeByLabelScan 加上 Filter ,你会做一个 NodeUniqueIndexSeek 女巫真的更好。
此外,您对数据库所做的工作越少,性能越好:)
所以如果你只需要更新字段 favorite_count & retweet_count 当节点已经存在时,应该使用sub命令 ON CREATE SET 以及 ON MATCH SETMERGE 这样地:

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

相关问题