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

Neo4j中搜索查询的时间复杂度是多少?,neo4j,time-complexity,graph-databases,query-performance,Neo4j,Time Complexity,Graph Databases,Query Performance,Neo4j数据库中有500万个产品和10万个卖家的数据。卖家在所有产品组合中都有一些常见的产品。这些产品和销售者是节点,它们之间的关系是Neo4j数据库中的边 搜索查询在Neo4j数据库中查找每个卖家的所有产品的时间复杂度是多少?按照查找特定卖家(或卖家,如果一次查找多个卖家)的要求,遍历关系的复杂度与这些特定卖家销售的产品成比例(并非所有卖家)(我们称之为k),所以O(k) 您可以按索引查找:Seller节点(lucene索引查找该特定标签/属性索引,我认为是O(log(n)),其中n是该特定

Neo4j数据库中有500万个产品和10万个卖家的数据。卖家在所有产品组合中都有一些常见的产品。这些产品和销售者是节点,它们之间的关系是Neo4j数据库中的边


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

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

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

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

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

这就是为什么在可能的情况下,创建索引并对起始节点使用索引查找是至关重要的

编辑:


我稍微澄清了一下上面的内容……通过lucene进行索引查找,虽然它可能不是查询中最昂贵的部分(考虑到销售的产品数量很多),但它将随着索引节点的数量(对于一个特定的标签/属性索引)而增长然而,对于Lucene索引查找的复杂性可能有更严格的描述。这种查找对于大多数数据库中的起始位置来说是相当常见的,它不是针对NeN4J或图DBS的,因此我不认为索引查找对于考虑图形DB性能非常重要。d关于您的查询的更多信息。您的产品和卖家已经通过关系连接起来。您的输入是什么?单个产品?多个?单个卖家?如果您试图找到,给定一个卖家,所有其他拥有相同产品的卖家(只是数量,还是实际卖家?),他们需要所有相同的产品,还是只需要一些?@InverseFalcon,我已经做了你要求的必要更改。你现在能帮我解决时间复杂性吗?那么你想要返回的数据是500万个产品中的每一个以及每一个产品收集到的卖家?这真的是一个有用的查询吗?你打算如何处理这么多的产品f data?Neo4j在缩小查询范围以触及图形中更小、更相关的部分时效果最佳。返回500万行似乎太多了,这就是您真正查询的内容吗?@InverseFalcon,我已更改搜索查询。至少是特定卖家的产品列表?