Mysql 是';通过'连接;或';使用递归';甚至可以在高度连接的大数据场景中使用?
想象一下以下大数据情况: SQL数据库中存储了100万人。 他们每个人都跟着另外50个人 所以有这样一个表(有5000万个条目): 是否可以使用Oracle的Mysql 是';通过'连接;或';使用递归';甚至可以在高度连接的大数据场景中使用?,mysql,sql,oracle,bigdata,connect-by,Mysql,Sql,Oracle,Bigdata,Connect By,想象一下以下大数据情况: SQL数据库中存储了100万人。 他们每个人都跟着另外50个人 所以有这样一个表(有5000万个条目): 是否可以使用Oracle的connect by或MySQL的WITH RECURSIVE来确定一个人与另一个人之间是否存在连接(可能通过中介) 这些问题真的会永远存在吗?(数据高度连接) 还是有办法限制查询的深度?(在这种情况下:只有如果我是对的,像广度优先搜索这样的图形算法只会出现在算法尚未访问过的节点上。因此,在这种情况下不会出现循环问题。像广度优先搜索这样的图
connect by
或MySQL的WITH RECURSIVE
来确定一个人与另一个人之间是否存在连接(可能通过中介)
这些问题真的会永远存在吗?(数据高度连接)
还是有办法限制查询的深度?(在这种情况下:只有<3家中介机构)
上下文:这个例子将用来解释为什么图形数据库在某些情况下会更好,我想说明这是否可以用SQL解决 是否可以使用Oracle的
connect by
或MySQL的WITH
递归
以确定是否存在连接(可能超过
中间人)从一个人到另一个人
对。这就是这些特性的目的
这些问题真的会永远存在吗?(数据高度连接)
与所有SQL查询一样,适当的索引对于良好的性能至关重要
至于层次结构中的“永远”(也就是说,当数据打破了它是一个整体的假设时)
递归公共表表达式(在大多数非Oracle表服务器中)的递归受级别限制。看这个
使用图形数据库进行此类工作更好吗?那是意见的问题
- 您仍然需要循环检测
- 在生产中,将数据从一个数据库移动到另一个数据库,或在多个位置保留副本,成本很高。因此,您的实用设计选择将受到系统存储数据的位置的影响
在编程语言中,如C++或PHP递归调用通常是不好的,因为它们在大量的调用中堆叠并使用大量内存。不确定SQL引擎中如何实现
connectby
和WITH RECURSIVE
。。我假设这两个语句都可以使用索引,但您应该使用查询计划器语句(如EXPLAIN for MySQL)进行检查。在本例中,您的目的是为了证明图形数据库相对于关系数据库的优越性,因此我建议您以这样的方式构建数据库和查询,以获得所需的结果。除此之外,这里的所有内容都是观点。基本问题是可以用SQL解决的。但它不会扩展到数百万个节点和数千万条边。像Oracle这样的RDBMS以一种根本不同的方式将其数据存储到像Neo4J这样的图形数据库中。这就是为什么Oracle在中有一个扩展,它不仅是企业版的一个额外收费,而且还需要分区,另一个额外收费。所以比Neo4J贵很多:)问题是存在还是找到链接?可能会有很大的不同,两者都有。任务是找到一个存在的链接。“你仍然需要循环检测。”->如果我是对的,像广度优先搜索这样的图形算法只会出现在算法尚未访问过的节点上。因此,在这种情况下不会出现循环问题。像广度优先搜索这样的图算法只处理到目前为止算法尚未访问过的节点循环检测。
person1 | person2
0 | 1
0 | 2.341
0 | 212.881
.. | ..
999.999 | 421.111
999.999 | 891.129
999.999 | 920.917