假设我们有一个网站,其中包含一个小社交图表,人们(比如~~ 1M用户)可以“喜欢”这些内容,互相关注,对彼此发帖评论......(通常情况)。
在.NET中,我们有两个选择:
鉴于上述情况以及Neo4j没有.NET的本机驱动程序,而当前版本的Neo4jClient(1.0.0.657)使用REST api连接到数据库引擎,哪一个问题会更快比如“谁喜欢我喜欢的东西”或“一个人想要的东西(基于它所关注的人)”以及关于社交图的一些其他常见问题?
答案 0 :(得分:4)
您没有指明那么多信息;你的问题可能会引起很多意见,但我会试着给你一个公平的动摇。 (免责声明:我来自neo4j方面,但我已经与你提到的其他大部分内容合作过了)
你的问题有三个要分开的要素:
图表还是关系?
您应该阅读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更快地拼凑一个工作模型,因为你的域基本上是图形的。