新闻资讯

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻资讯列表

SQL数据库甚么时候不够用呢?

发布时间:2023-03-24 08:17:30

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


SQL数据库什么时候不够用呢?.png


从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事务。我们对这些数据库的设计方式了解得越多,我们就越有洞察力来选择最合适工作的工具。