我读了一本在Neo4j网站上推荐的关于图形数据库性能的书:http://neo4j.com/books/graph-databases/,它说:
“与关系数据库不同,在关系数据库中,连接密集型查询性能随着数据集的增大而恶化,而图形数据库的性能往往保持相对不变,即使数据集不断增长,这是因为查询被本地化到图形的部分.因此,每个查询的执行时间仅与为满足该查询而遍历的图的大小成正比,而不是与整个图的大小成正比。”
例如,我只想返回一个标签为“医生”的节点,它是定位在图的一部分上的。但是我的问题是,数据库本身是如何知道这些节点在哪里的?换句话说,它不需要遍历所有节点来确定它们是否满足查询并在此基础上作出决定吗?
发布于 2015-04-14 15:36:36
Neo4j为节点标签设置了特殊的索引,这样就可以在不搜索所有节点的情况下找到标签的所有节点。除此之外,你可以:
发布于 2015-04-14 22:08:56
一般来说,本地化搜索意味着:您从一小部分起点开始,它可以是人员、产品、地点、订单等。
用标签标注的图的一部分通常不属于该类别,也就是说,all doctors并不是一个小的起点集。
如果您从所有的医生到他们的社区遍历,您的查询可能会触及图形的很大一部分。
这样的查询将是一个图形本地查询:
MATCH (:City {name:"SFO"})<-[:RESIDES_IN]-(d:Doctor)-[presc:PRESCRIBES]->(m:Medicine)
RETURN d.name, m.name, sum(presc.amount) as amounthttps://stackoverflow.com/questions/29629903
复制相似问题