几十年来,使用SQL的关系数据库管理系统 ( RBDMS )一直用于存储应用程序信息。作为医疗保健和金融等主要行业的支柱,将数据组织到表格中的关系模型被证明是可靠和高效的,表格的每一行都有一个识别键。包括MySQL和PostgreSQL在内的现代SQL数据库 仍然是当今最流行的数据库之一。但是SQL数据库什么时候不够用呢?

从2000年代后期开始的NoSQL(不仅仅是SQL)数据库的兴起与许多其他进步同时发生。在多核处理器和虚拟化变得司空见惯的同时,云正在起飞,全球数百万用户首次使用智能手机上网。一切都需要增长,而实现这种急需的规模的最实用方法是水平扩展。我们经常看到将SQL与NoSQL过分简化为“SQL 可以垂直扩展,NoSQL可以水平扩展”,但这是不完整和不正确的。
水平缩放
当我们谈论水平扩展时,我们的意思是通过添加更多节点或机器来扩展我们的环境。虽然SQL数据库可以通过向单个节点添加更多RAM 和计算来相对轻松地垂直扩展,但将数据集分布到多个节点更具挑战性。这可以通过称为分片的技术来完成。在处理大型数据集和高吞吐量时,分片有助于减少单个服务器上的负载,并根据需要通过添加或删除服务器来实现扩展。
MySQL分片和限制
SQL数据库可以通过分片进行水平扩展。方法和支持的功能在数据库之间会有很大差异,但需要考虑一些注意事项。让我们关注一个更常见的例子——使用NDB存储引擎的MySQL。MySQL支持NDB集群,可以将单个大表拆分为多个较小的表,拆分表的过程称为分区。当存储在多个服务器上时,这些较小的表构成了分片。集群中的每个数据库都存储一个分片,集群中的数据库共同构成了完整的数据集。
在SQL数据库中使用分片可以提供非常高的数据集大小扩展,但它也会使您的应用程序逻辑更加复杂。我们需要仔细配置如何将数据划分为多个分片,因为此决定会影响整体数据库性能。除了复杂性和高时间要求外,还需要考虑技术障碍。为了应对一个常见的限制,可以将 MySQL配置为跨多个分片执行连接操作,但以牺牲更大规模的性能为代价。这会使分析功能在这些环境中变得不切实际。
进入NoSQL
自2000年代后期出现以来,许多不同类型的NoSQL数据库的使用呈爆炸式增长。对于此示例,我们将重点关注最流行的NoSQL数据库MongoDB。MongoDB(源自“humongous”一词)是面向文档的。数据存储在类似于JSON对象的文档中,每个文档都包含成对的字段和值。这与使用表和行来格式化数据的SQL数据库相反。我们可能已经读到,像MongoDB这样的NoSQL数据库通常更适合水平扩展,但让我们深入了解为什么会这样。
请注意,MongoDB专门使用一种称为BSON的格式,它源自JSON,但这会因每个数据库而异。
模式和分片
MongoDB是无模式的(或无模式的),这意味着它不需要在数据库级别定义组织结构。该模式是在应用程序级别内置到我们的代码中的,这为我们提供了很大的灵活性,可以在以后更改结构同时保留我们的数据。虽然它们缺乏符合ACID的SQL数据库的严格强制一致性,但 MongoDB和其他NoSQL数据库在可用性和分区容错性方面表现出色。
当我们研究水平扩展SQL数据库时,我们回顾了将表拆分为碎片的过程。虽然可能,但由于数据库中内置的刚性结构,它带来了很多限制。另一方面,MongoDB和其他NoSQL数据库旨在适应结构级别的分片。分片是数据的一个子集,MongoDB允许我们通过将分片部署为副本集来水平扩展。副本集是至少三个节点的集群,具有相同数据的冗余副本。当它们分布在大型环境中并且不受预定方案的限制时,它们提供可用性和冗余。
从这里,我们可以立即看到NoSQL数据库为可扩展性所做的让步。NoSQL数据库通常使用比SQL数据库多得多的存储,因为在大型水平部署中实现可用性需要大量冗余数据。NoSQL写入速度往往优于 SQL 数据库,但查询速度较慢。由于缺乏定义的结构,NoSQL数据库本质上不符合 ACID,这使得它们不太适合处理大量金融交易的应用程序。或者,我们可以配置保持性能的大规模分布式NoSQL集群,使其成为大数据和分析的理想候选者。
那么SQL数据库什么时候不够用呢?正如我们所料,答案并不简单,但我们在设计应用程序时可以考虑一些通用准则。我们的应用程序需要做什么,它需要多大?从那里,我们可以决定我们的第一要务。说“SQL 垂直扩展而 NoSQL 水平扩展”是不正确的,但我们可以说“大多数 SQL 数据库在设计时都考虑了一致性,而大多数NoSQL数据库在设计时都考虑了扩展性。”
总结:我们可以水平扩展MySQL,MongoDB开始支持多文档ACID事务。我们对这些数据库的设计方式了解得越多,我们就越有洞察力来选择最适合工作的工具。
Copyright © 2013-2020. All Rights Reserved. 恒讯科技 深圳市恒讯科技有限公司 粤ICP备20052954号 IDC证:B1-20230800.移动站


