背景:以下来自Graph Databases一书,其中涵盖了Neo4j in Action一书中提到的性能测试:
图中的关系自然形成路径。查询或遍历图形涉及以下路径。由于数据模型从根本上面向路径的性质,大多数基于路径的图形数据库操作与数据的布局方式高度一致,因此非常高效。在他们的《Neo4j in Action》一书中,Partner 和 Vukotic 使用关系存储和 Neo4j 进行了实验。
比较表明,对于连接数据,图形数据库比关系存储要快得多。Partner 和 Vukotic 的实验试图在社交网络中找到朋友的朋友,最大深度为 5。给定随机选择的任意两个人,是否有一条连接他们的路径最多有五个关系长?对于一个包含 1,000,000 人的社交网络,每个人大约有 50 个朋友,结果强烈表明图形数据库是连接数据的最佳选择,如表 2-1 所示。
表 2-1。在关系数据库中查找扩展朋友与在 Neo4j 中高效查找
Depth RDBMS Execution time (s) Neo4j Execution time (s) Records returned 2 0.016 0.01 ~2500 3 30.267 0.168 ~110,000 4 1543.505 1.359 ~600,000 5 Unfinished 2.132 ~800,000
在深度 2(朋友的朋友)中,关系数据库和图形数据库的表现都足够好,我们可以考虑在在线系统中使用它们。虽然 Neo4j 查询的运行时间是关系查询的三分之二,但最终用户几乎不会注意到两者之间的毫秒差异。然而,当我们到达深度三(friend-of-friend-of-friend)时,很明显关系数据库无法再在合理的时间范围内处理查询:完成所需的 30 秒将是完全不可接受的对于在线系统。相比之下,Neo4j 的响应时间保持相对平稳:执行查询只需几分之一秒——对于在线系统来说绝对足够快。
在深度 4,关系数据库表现出严重的延迟,使其对在线系统几乎毫无用处。Neo4j 的时序也有所恶化,但这里的延迟对于响应式在线系统来说是可以接受的。最后,在深度 5 中,关系数据库完成查询所需的时间太长。相比之下,Neo4j 在大约两秒内返回结果。在深度 5 中,几乎整个网络都是我们的朋友:对于许多现实世界的用例,我们可能会调整结果和时间。
问题是:
- 这是一个合理的测试来模仿除了在社交网络中找到的东西吗?(意思是真正的社交网络通常有大约 50 个朋友的节点;似乎“富变得更富有”的模型对于社交网络来说更自然,尽管可能是错误的。)
- 不管仿真的自然性如何,是否有理由相信结果是错误的或不可重现的?