匹配节点的最佳实践

问题描述 投票:0回答:1

我正在对重图进行一些测试,我想知道如果我具有这样的层次结构,匹配节点的最佳实践是什么:类别=>发表=>评论=>回复我在每个标签_id字段上都有索引,并且根据_id进行匹配第一种方法:通过一路匹配目标节点:

GRAPH.QUERY test "MATCH (:category {_id:1})-[:post]->(:post {_id:1})-[comment_rel_1:comment]->(c1:comment {_id:1}) SET c1.comment = 'changed'"

第二种方法:直接匹配节点

GRAPH.QUERY test "MATCH (c1:comment {_id:1}) SET c1.comment = 'changed'"

对于具有大量节点和边缘的大型数据库,哪种方法被认为是省时的?谢谢

performance cypher matching redisgraph
1个回答
0
投票

这里是每个查询的执行计划

127.0.0.1:6379> graph.explain test "MATCH (:category {_id:1})-[:post]->(:post {_id:1})-[comment_rel_1:comment]->(c1:comment {_id:1}) SET c1.comment = 'changed'"
1) "Update"
2) "    Filter"
3) "        Conditional Traverse | (anon_2:post)->(c1:comment)"
4) "            Filter"
5) "                Conditional Traverse | (anon_0:category)->(anon_2:post)"
6) "                    Index Scan | (anon_0:category)"

127.0.0.1:6379> graph.explain test "MATCH (c1:comment {_id:1}) SET c1.comment = 'changed'"
1) "Update"
2) "    Index Scan | (c1:comment)"

如果您只想更新注释节点,则无论其在图形中的状态如何,第二个查询都会更高效。如果您只想更新以您描述的模式连接的注释节点,则第一个查询是两者之间的解决之道。

© www.soinside.com 2019 - 2024. All rights reserved.