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

时间:2017-11-06 08:01:16

标签: neo4j time-complexity graph-databases query-performance

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

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

1 个答案:

答案 0 :(得分:1)

根据要求查找特定卖家(或卖家,如果一次查找几个),遍历关系的复杂性与这些特定卖家(并非所有卖家)销售的产品成比例(让我们打电话) k),所以O(k)。

您可以按索引查找:Seller节点(该特定标签/属性索引的lucene索引查找,我认为是O(log(n)),其中n是该特定条目的条目数然后,将所有相关关系(:卖出?)遍历到:卖方销售的产品节点,然后收集每个卖家的产品。

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

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

这就是为什么尽可能创建索引并对起始节点使用索引查找至关重要。

编辑:

我澄清了上面的一点......通过lucene进行索引查找,虽然它可能不是查询中最昂贵的部分(鉴于销售的产品数量很多),但会随着索引节点的数量而增长(对于那个特定的标签/属性索引)。然而,可能有更严格的方法来描述lucene索引查找的复杂性。这种查找在大多数数据库中找到起始位置是相当常见的,它并不特定于Neo4j或图形dbs,因此在考虑图形数据库性能时,我不认为索引查找非常重要。