跳到主要内容
博客数据库当SQL不够用时

当SQL不够用时

当SQL不够用时

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

2000年代末开始,NoSQLNotOnlySQL)数据库的兴起与许多其他进步相吻合。在多核处理器和虚拟化变得普遍的同时,正在起飞,世界各地数以百万计的用户第一次用智能手机上网。一切都需要增长,而完成这种急需的规模的最实际的方法是 横向扩展.我们经常看到SQL与NoSQL的对比被过度简化为 "SQL可以纵向扩展,NoSQL可以横向扩展",但这是不完整和不正确的。

水平缩放

当我们谈论横向扩展时,我们的意思是通过添加更多的节点或机器来增长我们的环境。虽然SQL数据库可以通过在单个节点上增加更多的内存和计算量来相对容易地进行纵向扩展,但在多个节点上传播你的数据集则更具挑战性。这可以通过一种技术来实现,称为 分片.在处理大型数据集和高吞吐量时,分片有助于减少单个服务器上的负载,并根据需要通过增加或删除服务器来实现扩展。

MySQL的分片和限制

SQL数据库可以通过分片来进行横向扩展。不同数据库的方法和支持的功能会有很大的不同,但需要考虑到一些注意事项。让我们关注其中一个比较常见的例子--使用NDB存储引擎的MySQL。MySQL支持NDB集群,可以将一个大表分割成多个小表。分割一个表的过程被称为分区。当跨多个服务器存储时,这些较小的表构成了分片。你的集群中的数据库各自存储一个分片。集群中的数据库共同构成了你的完整数据集。 

在SQL数据库中使用分片可以提供非常高的数据集大小的扩展,但它也会使你的应用逻辑更加复杂。你需要仔细配置你的数据如何被分割成多个分片,因为这个决定会影响整个数据库的性能。 除了复杂性和高时间要求外,还有一些技术障碍需要考虑。为了应对一个通常所说的限制,MySQL可以被配置为在多个分片上执行连接操作,但在更大的规模上要以性能为代价。这可能使分析功能在这些环境中不切实际。

进入NoSQL

许多不同类型的NoSQL数据库自2000年代末诞生以来,在使用上出现了爆炸性增长。在这个例子中,我们将专注于最流行的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交易。我们越是了解这些数据库是如何设计的,我们就越能获得洞察力,为工作挑选最好的工具。

在Linode上部署数据库

了解有关 Linode 受管数据库的更多信息,或注册以接收有关您首选数据库引擎的更新。您还可以从 LinodeMarketplace部署MongoDB等数据库管理系统,或按照我们的指南在各种 Linux 发行版上安装数据库,如在 CentOS 7 上安装 MongoDB


注释

留下回复

您的电子邮件地址将不会被公布。 必须填写的字段被标记为*