我有一个带有7340个节点的Neo4j数据库。每个节点都有一个标签(肿瘤)和2个属性(conceptID和fullySpecifiedName)。在两个属性上都启用了Autoindexing,并且我已经在肿瘤上创建了一个模式索引:conceptID和neoplasm:fullySpecifiedName。节点是术语树中的概念。有一个单独的根节点,其他节点经常通过多条路径下至多达13层的深度。从SQL Server实现,层次结构如下...Neo4j数据库添加关系非常缓慢
Depth Relationship Count
0 1
1 37
2 360
3 1598
4 3825
5 6406
6 7967
7 7047
8 4687
9 2271
10 825
11 258
12 77
13 3
我使用的是C#程序和neo4jclient这contructs并执行这样一个暗号查询添加关系...
MATCH (child:neoplasm), (parent:neoplasm)
WHERE child.conceptID = "448257000" AND parent.conceptID="372095001"
CREATE child-[:ISA]->parent
将关系增加到第3级的速度非常快,而第4级本身并不差,但是在第5级,事情开始变得非常缓慢,每个关系平均超过9秒。
上面的示例查询是通过http://localhost:7474/browser/
接口执行的,耗时12917ms,所以执行时间很差并不是C#代码和neo4jclient API的一个特性。
我认为图形数据库应该是非常快速的,性能与大小无关。
到目前为止,我在35362个关系中只添加了9033个。即使随着关系数量的增加,速度也不会进一步下降,但需要三天时间才能添加剩余的数量!
任何人都可以提出为什么这个表现如此糟糕?或者这种性质的写作表现是正常的,而且它只是读取性能非常好。一个样本Cypher查询返回一个5级节点的父母返回一个23个fullySpecifiedName属性列表,比我用秒表可以测量的时间少! (远低于一秒)。
你有一个索引:肿瘤(conceptId)?遍历很便宜,但通过id查找仍然需要索引等方法。 –
要验证该指数是真正使用您可以张贴在 “PROFILE MATCH(儿:肿瘤),(家长:肿瘤) WHERE child.conceptID = ”打印查询计划448257000“ AND parent.conceptID =” 372095001" CREATE孩子 - [:ISA] - >父母“在shell中执行? –