Graph Neo4j匹配和创建在10000节点图中花费的时间太长
我有这样一个数据模型:Graph Neo4j匹配和创建在10000节点图中花费的时间太长,graph,neo4j,graph-databases,py2neo,Graph,Neo4j,Graph Databases,Py2neo,我有这样一个数据模型: 人节点 电子邮件节点 拥有关系 列出关系 了解关系 每个人可以拥有一封电子邮件并列出多封电子邮件(如联系人列表,假设每人有200个联系人) 我试图执行的查询是查找所有拥有联系人列表中的电子邮件的人,并在他们之间创建一个相互了解的关系 MATCH(n:Person{uid:'123})-[r1:LISTS]->(m:Email)[l] 我当前数据库的计数如下所示: 人员节点数:10948 电子邮件节点数:1951481 注册人数:21882 列表相关编号:437634
- 人节点
- 电子邮件节点
- 拥有关系
- 列出关系
- 了解关系
MATCH(n:Person{uid:'123})-[r1:LISTS]->(m:Email)[l]
我当前数据库的计数如下所示:
- 人员节点数:10948
- 电子邮件节点数:1951481
- 注册人数:21882
- 列表相关编号:4376340(每个人有200个唯一列表相关编号)
profilematch(n:{uid:'4692'})-[:LISTS]->(:Email)(l)
“我的查询”上的“配置文件”命令将返回以下内容:
密码版本:密码2.2,计划者:规则。3919222 2713毫秒内的总db点击数。
是的,4.5秒来匹配索引中的一个人及其(m:电子邮件)[l] 有关详细信息,请参见。您可能还希望在强制使用一个或另一个基于成本和规则的查询计划器来比较其计划的同时,分析您的查询
CYPHER planner=cost
PROFILE
MATCH (n:Person {uid:'123'})-[:LISTS]->(m:Email)<-[:OWNS]-(l:Person)
MERGE (n)-[:KNOWS]->[l]
CYPHER planner=成本
轮廓
匹配(n:Person{uid:'123'})-[:列表]->(m:Email)[l]
有了这些,您就有希望找到并纠正问题,或者用这些信息更新您的问题,以帮助其他人帮助您找到问题。您是否有个人节点的uid属性索引<代码>在:个人(uid)上创建索引。此外,也许您可以分析查询并将结果添加到您的问题中(请参见,)。此外,您将希望使用
MERGE
而不是CREATE UNIQUE
。py2neo使用neo4j的REST接口,您应该尝试使用,嵌入式neo4j要快得多。@Supamiu我在web界面中也有相同的结果,但据我所知,这也会发送HTTP请求(发布到事务集合,然后提交到特定事务),对吗?是的,web界面也在使用HTTP。您是否尝试使用“合并”而不是“创建唯一”?我很想看到结果非常感谢,profile命令实际上帮助我了解了幕后发生的事情(执行计划)。索引uid并根据执行计划知识调整查询,可将查询时间缩短到
CYPHER planner=cost
PROFILE
MATCH (n:Person {uid:'123'})-[:LISTS]->(m:Email)<-[:OWNS]-(l:Person)
MERGE (n)-[:KNOWS]->[l]