为什么关系型数据库不能满足大数据的规模?

Jer*_*ard 17 scalability

人们经常重复说,大数据问题是关系数据库无法扩展以处理现在正在创建的海量数据。

但是,Hadoop 等大数据解决方案不受哪些可扩展性限制?为什么 Oracle RAC 或 MySQL 分片或像 Teradata(等)这样的 MPP RDBMS 不能实现这些壮举?

我对技术限制感兴趣 - 我知道集群 RDBMS 的财务成本可能令人望而却步。

Dav*_*kle 15

MS 刚刚在荷兰进行了一次技术演讲,他们讨论了其中的一些内容。它开始缓慢,但在 20 分钟左右进入 Hadoop 的核心部分。

其要点是“视情况而定”。如果你有一个合理安排的,(至少在某种程度上)易于分区的数据集(至少在某种程度上)是同质的,那么使用 RDBMS 扩展到那些高数据量应该相当容易,这取决于你在做什么.

Hadoop 和 MR 似乎更适合您被迫对数据进行大规模分布式扫描的情况,尤其是当这些数据不一定像我们在 RDBMS 世界中发现的那样同构或结构化时。

大数据解决方案不受哪些限制?对我来说,他们不受约束的最大限制是必须提前制定严格的模式。使用大数据解决方案,您现在可以将大量数据放入“盒子”中,稍后将逻辑添加到您的查询中以处理数据缺乏同质性的问题。从开发人员的角度来看,权衡是项目前端的易于实施和灵活性,而不是查询的复杂性和不太直接的数据一致性。

  • @HLGEM:我对此的回应是“嗯”。最有效的开发人员将是理解堆栈两边的人——认为有一个优秀的“应用程序开发人员”一直在使用 RDBMS 而不知道它是如何工作的这种想法是一种谬论. 同样,认为存在不了解 ORM 或其应用程序方面的优秀“数据库开发人员”这样的想法在 IMO 也是一种谬论。 (3认同)
  • 没有什么能让 RDBMS 集群执行此类工作变得不可行,并且您*可以*配置 RDBMS 以横向扩展以执行此类操作。RDBMS 的问题在于,为了做到这一点,您必须非常小心如何构建架构和分区才能使其正常工作。当您的数据结构不足以在 RDBMS 中轻松或有效地进行分区和优化时,大数据架构就会获胜。 (2认同)

小智 6

数据库先驱和研究员 Michael Stonebraker 共同撰写了一篇论文,讨论了传统数据库架构的局限性。通常,它们可以使用更昂贵的硬件进行扩展,但难以并行扩展更多的商品硬件,并且受到为旧时代设计的遗留软件架构的限制。他认为,大数据时代需要多个新的数据库架构,以利用现代基础设施并针对特定工作负载进行优化。例如,C-store 项目产生了商业数据库 Vertica Systems,H-store 项目产生了 VoltDB,这是一种为高速大数据工作负载设计的内存中 OLTP SQL 数据库。(完全披露,我为 VoltDB 工作)。

您可能会发现本次网络研讨会对这个主题很有趣。它回应了随着 NoSQL 数据库的成功而出现的一些神话。基本上,他认为 SQL 不是问题,没有必要为了获得性能而放弃诸如一致性之类的传统数据库特性。

  • 为了有资格完全披露,您可能还应该提到 [您的联合创始人兼首席技术官 Michael Stonebraker](http://voltdb.com/company/leadership) 也是您所有示例的共同架构师。而 [VoltDB 的 SQL 支持是一个令人尴尬的小子集](http://community.voltdb.com/docs/UsingVoltDB/sqlref_select)。 (6认同)

小智 5

RDBMS 不能扩展并不完全正确。然而,声明中的部分真理取决于架构。在您提供的列表中,Oracle RAC 与其他(分片 MySQL 和 Teradata)不同。主要区别在于共享磁盘与不共享架构。

像 Oracle RAC 这样的共享磁盘架构受到扩展的影响,因为在某个时间点或其他时候,所有运行的机器应该在某些部分数据上同步。例如,全局锁管理器是一个杀手。您可以在一定程度上对其进行微调,但最终会碰壁。如果您不能轻松添加机器,您应该拥有更少但功能强大的机器,这可能会烧掉您的口袋。在无共享架构(或分片数据)的情况下,每台机器都拥有一些数据的所有权。如果它想更新一些数据,它不需要与其他机器同步。

然后是 NoSQL 数据库的品种。我会将它们视为传统 RDBMS 数据库的一个子集。并非这个世界上的所有应用程序都需要 RDBMS 提供的所有功能。如果我想使用数据库作为缓存,我不会关心持久性。可能在某些情况下我也不会关心一致性。如果我所有的数据查找都基于一个键,我就不需要支持范围查询。我可能不需要二级索引。我不需要所有传统数据库都有的整个查询处理/查询优化层。