图数据库性能

时间:2015-04-14 14:22:49

标签: neo4j graph-databases

我正在阅读Neo4j网站上推荐的一本书:http://neo4j.com/books/graph-databases/关于图形数据库的性能,它说:

"与关系数据库相比,连接密集型查询性能恶化 随着数据集变得越来越大,图表数据库的性能趋于保持不变 即使数据集增长,也相对恒定。这是因为查询已本地化为 图表的一部分因此,每个查询的执行时间仅成比例 遍历的图形部分的大小,以满足该查询,而不是大小 整体图表。"

所以,例如我想只返回带有标签" Doctor的节点,这些节点已经本地化为图形的一部分。但我的问题是数据库本身如何知道这些节点在哪里?换句话说,是否不需要遍历所有节点以查明它们是否满足查询并基于此做出决定?

2 个答案:

答案 0 :(得分:1)

Neo4j对节点标签有一个特殊的索引,因此它可以找到标签的所有节点而无需搜索所有节点。除此之外,你可以:

  • 根据节点属性(架构索引或旧索引)创建自己的索引,以便将节点作为起点
  • 按节点ID查询以找到起点(但如果您需要更永久地识别节点,我建议您使用自己的属性和索引)

答案 1 :(得分:1)

一般来说,本地化搜索意味着:您从一小组起点开始,可以是人,产品,地点,订单等。

用标签注释的图表的一部分通常不属于该类别,即所有医生并不是一小部分起点。

如果您从所有医生走到他们的社区,您的查询可能会触及图表的大部分内容。

像这样的查询将是本地图表:

MATCH (:City {name:"SFO"})<-[:RESIDES_IN]-(d:Doctor)-[presc:PRESCRIBES]->(m:Medicine)
RETURN d.name, m.name, sum(presc.amount) as amount