你应该知道的7个数据库概念之 05. 扩展很难

很多关于数据库的知识。它们是复杂的关键任务应用程序,有时需要专业的主题专家来维护它们,但这并不意味着它们也是某种神奇的黑匣子。数据库是我们应用程序的支柱,您对它们的工作方式了解得越多,您就越能更好地使用它们、针对它们编写应用程序以及在不可避免地出现问题时解决问题。
因此,让我们深入探讨您应该(可能)了解的有关数据库的七件事。
注意:除非特别说明,否则我通常会讨论 PostgreSQL 或 MySQL 等关系数据库,而不是 NoSQL 数据库。

5. 扩展很难

在尝试扩展数据库时,数据库提出了独特的挑战。因为他们保存状态,因此本质上有状态的应用,要想办法复制的方式是一致的,安全的,并足够快的是透明的任何应用程序在多个数据库实例这种状态很难。这就是为什么扩展数据库(尤其是关系数据库)的最常见方法是使用垂直扩展。
让我们暂停一下,花点时间谈谈两种尺度:垂直和水平。要正确理解每种方法,需要单独写一整篇文章(这不是一个坏主意,实际上……),但现在,我们可以相当简单地分解它。我认为我可以用一个类比来解释这一点的最好方法是这样的:假设你有一壶一加仑的水,但里面有一个小洞,所以你需要将水移到另一个容器中. 但是,您所拥有的只是小于一加仑的较小容器。您可以使用两种方法:
使用大量较小的容器(如水杯)并将一加仑的水分配到这些容器中。
使用少量的一夸脱容器并将水分配到几个较大的容器上。
使用许多较小的容器是水平扩展,其中工作负载(或水)分布在许多较小的容器中。使用几个较大的容器是垂直扩展,其中负载分布在少数大型容器上。通过水平扩展,当您需要添加额外容量时,您可以添加更多容器。通过垂直扩展,您可以增加已有的几个容器。
对于数据库,通常的做法是通过添加 CPU 和 RAM 容量来垂直扩展数据库实例。这避免了必须跨大量实例复制状态的问题,但仍允许您的数据库承担额外的负载。
一些数据库——尤其是 NoSQL 数据库——可以进行大规模水平扩展,但它们通常会在一致性方面进行权衡。这些数据库往往最终一致,其中数据最终会在整个集群中保持一致,但复制可能对访问该数据的任何应用程序不透明。也就是说,从数据库节点 A 读取的应用程序将获得一个版本的数据,而从节点 D 读取的应用程序将获得另一个版本,直到集群可以更新所有节点上的数据。虽然这听起来像是一个交易破坏者,但如果您在设计和构建应用程序时考虑到这一点,那么它就不会成为问题。

加入我们一起学习SwiftUI

QQ:3365059189
SwiftUI技术交流QQ群:518696470
教程网站:www.openswiftui.com

发表回复