查询Neo4j中的节点的时间复杂度是多少?

huangapple go评论81阅读模式
英文:

What's the time complexity of query a node in neo4j?

问题

我对neo4j查询的工作原理感到困惑。

如果我的图数据库中有10个节点(7个客户节点+3个产品节点)

现在,我想查询一个客户节点(例如:C1),时间复杂度是多少?

查询的工作原理是怎样的?像哈希表O(1)一样吗?还是像二分查找O(logN)一样?

英文:

I'm confused how neo4j query work.

If I have 10 nodes in my graph DB (7 Customer nodes + 3 Product nodes)

Now, I want to query a customer node(ex: C1), what's the time complexity?

And how the query work ? Like hash table O(1)? Or like binary search O(logN) ?

答案1

得分: 1

示例

  1. MATCH (p:Person {name: '汤姆·汉克斯'})
  2. RETURN p

结果

  1. 规划器成本
  2. 运行时流水线化
  3. 运行时版本 5.8
  4. 批处理大小 128
  5. +------------------+----+------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
  6. | 操作符 | Id | 详细信息 | 预估行数 | 行数 | 数据库命中 | 内存(字节) | 页面缓存命中/未命中 | 时间(毫秒) | 流水线 |
  7. +------------------+----+------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
  8. | +ProduceResults | 0 | p | 6 | 1 | 3 | | | | |
  9. | | +----+------------------------+----------------+------+---------+----------------+ | | |
  10. | +Filter | 1 | p.name = $autostring_0 | 6 | 1 | 250 | | | | |
  11. | | +----+------------------------+----------------+------+---------+----------------+ | | |
  12. | +NodeByLabelScan | 2 | p:Person | 125 | 125 | 126 | 120 | 3/0 | 0.772 | 在流水线 0 中合并 |
  13. +------------------+----+------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
  14. 总数据库访问次数:379,总分配内存:184
  15. 1

正如您所见,当您搜索一个节点时,它将扫描所有节点,这意味着时间复杂度为 O(N)。

然而,您可以为节点创建索引,从而提高搜索速度。

更多信息:文档

英文:

Example

  1. MATCH (p:Person {name: 'Tom Hanks'})
  2. RETURN p

Result

  1. Planner COST
  2. Runtime PIPELINED
  3. Runtime version 5.8
  4. Batch size 128
  5. +------------------+----+------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
  6. | Operator | Id | Details | Estimated Rows | Rows | DB Hits | Memory (Bytes) | Page Cache Hits/Misses | Time (ms) | Pipeline |
  7. +------------------+----+------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
  8. | +ProduceResults | 0 | p | 6 | 1 | 3 | | | | |
  9. | | +----+------------------------+----------------+------+---------+----------------+ | | |
  10. | +Filter | 1 | p.name = $autostring_0 | 6 | 1 | 250 | | | | |
  11. | | +----+------------------------+----------------+------+---------+----------------+ | | |
  12. | +NodeByLabelScan | 2 | p:Person | 125 | 125 | 126 | 120 | 3/0 | 0.772 | Fused in Pipeline 0 |
  13. +------------------+----+------------------------+----------------+------+---------+----------------+------------------------+-----------+---------------------+
  14. Total database accesses: 379, total allocated memory: 184
  15. 1 row

As you can see, when you search a node, it will scan all nodes which mean the time complexity is O(N).

However you can create index for node that can improve search faster.

More info: document

huangapple
  • 本文由 发表于 2023年6月1日 10:05:22
  • 转载请务必保留本文链接:https://go.coder-hub.com/76378251.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定