Neo4j 中搜索查询的时间复杂度是多少?

What is the Time Complexity of search query in Neo4j?

作为 Neo4j 中的数据,我有 500 万种产品和 10 万个卖家 database.The 卖家在所有产品组合中有一些共同的产品。这些产品和卖家是节点,它们之间的关系是 Neo4j 数据库中的边。

在 Neo4j 数据库中查找每个卖家的所有产品的搜索查询的时间复杂度是多少?

按照查找特定卖家(或多个卖家,如果一次查找多个卖家)的要求,遍历关系的复杂性与这些特定卖家(并非所有卖家)销售的产品成正比(我们称之为 k),所以 O(k).

您可以按索引查找 :Seller 节点(针对特定 label/property 索引的 lucene 索引查找,我认为它是 O(log(n)),其中 n 是该特定索引中的条目),然后遍历所有相关关系(:销售?)到这些卖家销售的:产品节点,然后收集每个卖家的产品。

遍历仅遍历图表的相关部分,因此如果您的查询是针对 1 个卖家及其 100 种产品,则无论这些是图表中唯一的节点,还是您正在使用,查询时间都不应改变您建议的 500 万种产品和 10 万个卖家的图表。

如果您没有使用索引来查找您的初始卖家,那当然会改变复杂性,因为您将改为在所有卖家节点上执行标签扫描,这将极大地影响您的查询与 :Seller 节点数成正比。

这就是创建索引并尽可能使用索引查找起始节点的重要性。

编辑:

我稍微澄清了上面的内容...通过 lucene 进行索引查找,虽然它可能不是查询中最昂贵的部分(考虑到销售的产品数量很多),但会随着索引节点的数量增加而增长(对于那个特定的 label/property 索引)。然而,可能有更严格的方法来描述 Lucene 索引查找的复杂性。这种查找对于在大多数数据库中寻找起点来说是相当常见的,它不是 Neo4j 或图形数据库所特有的,所以我认为索引查找在您考虑图形数据库性能时不是很重要。