我是NEO4J的新手,我想知道它有多快。我开始测试它,我在MySQL和NEO4J中创建了一个表,具有这些属性(字段):
id random_number time_stamp
我写了一个程序来生成海量数据并插入大约1.5亿行(以及Neo4J中的节点)。我可以说写速度几乎相同。
所以,我在两个数据库中测试了一个select查询。 “我想得到其中一个行(节点),其random_id为255454”(我们从这个随机id中知道有超过30行)
的Neo4j:
match (t:testLabel {random_id: 255454}) RETURN t LIMIT 50;
MySQL的:
SELECT *
FROM test
WHERE random_id=255454 LIMIT 50
NEO4J耗时约47秒,MySQL花了约25秒才返回结果。
磁盘上的NEO4J大小变为~35GB,磁盘上的MySQL大小变为~5.2 GB
两个数据库都没有表格或属性的索引。
硬件: CPU: Corei7-4770 | RAM: 12GB | SSD硬盘
这是一个简单的测试,我的意思是两个数据库都是如此简单并具有基本结构,在测试之前我认为,NEO4J比MySQL更快。 我真的很喜欢NEO4J,我想找到一个解决方案并再次使用它。
根据我的简单测试,NEO4J对于大型和可扩展的项目来说并不合理。我想知道也许有一些方法可以让它惊人地快! 性能测试非常简单,无论数据建模如何,所有数据库都必须具备它。
那么磁盘上的大小呢?
+我发现JörgBaach的另一个比较question您可能希望看到。
答案 0 :(得分:1)
比较关系数据库和图形数据库是一项艰巨的任务。
我认为一个更有用的测试是检查具有多个连接和fk的多个表的查询的性能。与neo4j相比,你会发现,可能比mysql的性能要好得多。
执行此操作:使用您的测试模型设置4-5个可能的用例。 dba将要做的几件事,用户将要做的几件事等等。确定将要做多少人,确定他们这样做的频率。
选择简单任务和复杂任务。将MySQL性能与Neo4J进行比较。你会发现一个DB在不同的情况下胜过另一个。
尝试衡量您的优先事项。在具有特定属性的50个节点上进行匹配具有很好的性能对您来说有多重要。用户(数十万?)会有快速,安全的方法来创建广泛复杂的关系网络,这对您来说有多重要?一旦确定了对您来说重要的内容,请参考性能测试并确定哪个数据库更适合您的需求。
如果您要执行基本查询,您应该使用像sql这样的关系数据库模型。 Neo4j非常适合复杂的模式和查询,不仅从性能角度而且从可读性角度来看。
Neo4j以非常不同的方式存储数据,因此磁盘存储差异很大。
Cypher以图形模式为中心,这些模式是您的用例的核心,并在视觉上将其表示为查询语法的一部分。
This article非常有洞察力,展示了从关系数据库到图数据库的转变。
答案 1 :(得分:0)
testLabel
和属性random_id
上创建了索引?总的来说:查看单个节点对图表数据库来说不是一个合理的性能测试。您可能应该在几个连接之后进行一些查询以查看差异。