3

由此图形数据库执行相当于多表连接的速度要快得多。其次,无论表的大小如何,等价连接的速度都是相同的。

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 系统中实现它?我在想左连接和嵌套查询。

4

2 回答 2

1

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

我认为您不能在 SQL 中执行此操作,但您可以执行一些(递归)代码。这可能会导致大量查询,从而损害您的性能。

所以如果你真的想处理图形数据,你应该使用图形数据库。

于 2012-08-09T08:28:25.213 回答
0

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

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

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

于 2013-10-10T08:22:50.773 回答