针对C#开发人员的Neo4j和MSSQL的实用性能比较

时间:2014-09-22 09:52:36

标签: c# sql-server neo4j neo4jclient entity-framework-6.1

假设我们有一个网站,其中包含一个小社交图表,人们(比如~~ 1M用户)可以“喜欢”这些内容,互相关注,对彼此发帖评论......(通常情况)。

在.NET中,我们有两个选择:

  1. 使用EF(目前6.1)和MSSQL(v2012或更高版本)实现社交图(艰难的方式)
  2. 使用Neo4j(目前为2.1.4)和Neo4jClient(据我所知,它是.NET用户的最佳驱动程序)
  3. 鉴于上述情况以及Neo4j没有.NET的本机驱动程序,而当前版本的Neo4jClient(1.0.0.657)使用REST api连接到数据库引擎,哪一个问题会更快比如“谁喜欢我喜欢的东西”或“一个人想要的东西(基于它所关注的人)”以及关于社交图的一些其他常见问题?

1 个答案:

答案 0 :(得分:4)

您没有指明那么多信息;你的问题可能会引起很多意见,但我会试着给你一个公平的动摇。 (免责声明:我来自neo4j方面,但我已经与你提到的其他大部分内容合作过了)

你的问题有三个要分开的要素:

  1. 图表还是关系? (MySQL vs. Neo4J)
  2. 驱动程序/工程问题(Neo4jClient / REST vs EF / MySQL)
  3. 模拟实用性(在neo4j中实现社交图“艰难的方式”)
  4. 图表还是关系?

    您应该阅读another answer I posted有关图形数据库和图形数据库查询性能的一般参数。我不会回顾所有这些(因为它已经在SO上)但是这里是执行摘要:图形数据库在路径关联查询中非常好且快速,您需要遍历一堆边。这些操作对应于关系世界中的事物,在这些事物中,您将一堆表连接在一起,或者连接深度是可变的。在这些情况下,图表将优于关系图(性能明智)。如果你想对用户或单个联接进行批量扫描,你可能会更好地处理关系(再次,请参阅其他答案以获取更多详细信息)。所以在这个标准上,我推断你真的只想一次遍历一个边缘 - 例如“向我展示鲍勃喜欢的所有东西”,而你需要做更深层次的查询,例如“向我展示与鲍勃分开3-4度的所有人”。

    驱动程序/工程问题

    速度方面,众所周知,java API比neo4j的REST API更快。 REST API的性能可变,并且取决于许多其他因素,例如数据库是在同一台计算机上托管,还是“远离网络”。你总是有额外的REST开销,它带有HTTP和序列化/反序列化JSON之类的东西,如果你使用了java API,你将不会拥有它。因此,所有其他条件相同(免责声明:它们永远不会;)REST API通常比EF更慢。

    建模实用性

    在这里,neo4j将获胜很多。使用MySQL,你将拥有永远存在的object-relational impedance mismatch; neo4j减少(但不消除)那些阻抗不匹配问题。建模明智,neo4j是无模式的,具有很多优点和缺点。你可以用neo4j更快地拼凑一个工作模型,因为你的域基本上是图形的。