这是对《stackoverflow》上问题“无法重现/验证图形数据库和Neo4j在实际书籍中的性能要求”https://dev59.com/OnTYa4cB1Zd3GeqPx7eE的跟进。我已更新设置和测试,并且不想太大改动原问题。
整个故事(包括脚本等)可在https://baach.de/Members/jhb/neo4j-performance-compared-to-mysql找到。
简短版本:在试图验证《图形数据库》一书中所作的性能要求时,我得出了以下结果(查询包含n个人,每个人有50个朋友的随机数据集):
My results for 100k people
depth neo4j mysql python
1 0.010 0.000 0.000
2 0.018 0.001 0.000
3 0.538 0.072 0.009
4 22.544 3.600 0.330
5 1269.942 180.143 0.758
"*": 仅限单次运行
My results for 1 million people
depth neo4j mysql python
1 0.010 0.000 0.000
2 0.018 0.002 0.000
3 0.689 0.082 0.012
4 30.057 5.598 1.079
5 1441.397* 300.000 9.791
"*": 只运行一次
在64位Ubuntu上使用1.9.2版本,我已经设置了neo4j.properties文件中的这些值:
neostore.nodestore.db.mapped_memory=250M
neostore.relationshipstore.db.mapped_memory=2048M
使用neo4j-wrapper.conf中的:
wrapper.java.initmemory=1024
wrapper.java.maxmemory=8192
我的neo4j查询看起来是这样的(使用REST API):
start person=node:node_auto_index(noscenda_name="person123") match (person)-[:friend]->()-[:friend]->(friend) return count(distinct friend);
Node_auto_index已经就位,显然
我能做些什么来加速neo4j(使其比mysql更快)?
start person=node(100) match (person)-[:friend]->()-[:friend]->()-[:friend]->()-[:friend]->(friend) return count(friend);
需要28.9秒。非常奇怪... - Joerg Baach