为什么图遍历比连接更快? SQL中规范化数据的任何课程?

时间:2012-08-07 12:35:17

标签: sql graph nosql

this开始,图表数据库执行相当于多表连接的速度要快得多。第二,无论表的大小如何,连接等效都是相同的速度。

depth   seconds records
2         0.016 ~2,500 --mysql
3        30.267 ~125,000
4     1,543.505 ~600,000

2         0.010 ~2,500 --neo4j
3         0.168 ~110,000
4         1.359 ~600,000

我知道SQL使用笛卡尔连接,它实际上与表的大小和跳数相乘。而我所听说的图形数据库都是“一流的关系结构”。

什么是数据结构+算法,无论跳数和表大小如何,都能为图表数据库提供快速遍历?

如何在RDBMS系统中实现它?我在想左连接和嵌套查询。

2 个答案:

答案 0 :(得分:1)

图遍历通常比联接更快,因为图中的每个节点都会计算其邻居并将其计数添加到结果中。这可以通过多线程等轻松优化。

我认为你不能在SQL中这样做,但你可以做一些(递归)代码。这可能会导致大量查询,从而影响您的表现。

因此,如果您真的想使用图形数据,则应使用图形数据库。

答案 1 :(得分:0)

首先,我们假设我们讨论的是简单查询,导致与仅包含相等条件的ON子句连接(例如a JOIN b ON a.id = b.id)。我相信这些是图遍历所掌握的查询类型。

连接速度较慢,因为它们使用二进制搜索来查找满足连接的ON子句的对,而图遍历则完全避免了这些搜索。图数据库中的边连接(存储)其连接的节点的内存地址。类似地,节点存储其边缘的存储器地址。想要找到连接到节点1的节点?转到节点1的所有边缘(在内存/磁盘上),然后对于每个边缘,只需转到其他节点(在内存/磁盘上)。瞧! (免责声明:我不确定这一点。我没有查看源代码。但我有一个非常强烈的预感。)

我有一个想法是使用哈希索引模拟RDBMS中图遍历的速度,因为哈希索引的相等查找是O(1)(而不是二进制搜索的O(log n))。希望我会带着一些测试结果回到这篇文章。