学习所有关于数据库分片
出版者:必威平台,2019年5月24日在接下来的文章中,我们将了解什么是数据库分片,以及在各种场景中使用分片的目的。
简单地说,数据库分片可以定义为一种“无共享”的分区方案,用于存储在多个服务器上的大型数据库。分片实现了高水平的数据库性能,并实现了可伸缩性。简单地说,数据库分片就像打碎玻璃,所有被称为“碎片”的小块分散在许多分布式服务器上。
下面的文章将重点介绍一些要点,如数据库分片的需求、用于数据库分区的几种技术以及实现分片之前的主要考虑事项。
那么数据库分片到底是什么呢?
数据库分片是你
- 以一个大型单片数据库为例
- 将它分解成小块,跨多个服务器
- 并行运行它们
分片数据库的架构由部署在多个服务器上的多个节点组成。这将在任何硬件或网络故障的情况下提供持续的正常运行。当您执行数据库分片时,数据库被划分为更小的块,并分布在集群中的多个数据节点上,每个节点包含并负责其自己的数据子集,以创建一个无共享的环境。
在共享磁盘集群数据库中,数据可以从所有集群节点访问,因此在同步读写期间可能导致争用,而不共享磁盘集群数据库的节点则操作它们自己的数据子集。通过复制数据节点来提供冗余,从而提供高可用性和可伸缩性。在最坏的情况下,如果包含表子集数据的节点和复制的节点变得不可用,那么具有不同子集数据的其他节点将保持在线和可用。
用于数据分片的方法
关于分片,有许多方法,而哪一种方法是正确的取决于许多因素。在选择正确的技术(如共享技术)之前,有几个问题需要解决:分区方案必须设计为跨数据库节点分配数据。每当必须跨多个分区访问或修改数据时,就会出现另一个挑战。在这里,我们将回顾五种切分方法的调查,并深入研究是什么因素引导你采用每种方法。
算法的分片
算法分片数据库使用分片功能来定位数据。在这种方法中,数据仅通过其分片函数进行分布。这种方法的挑战在于它没有考虑有效载荷大小或空间利用率。因此,您需要确保每个分区的大小相同,以便均匀地分布数据。这种方法的另一个挑战是,没有分区键的查询需要搜索每个数据库节点。
算法切分可能会非常棘手,因为当你试图将新节点/服务器添加到数据库,年长的每个人都需要一个相应的散列值和最重要的是,你的其他条目需要重新映射到他们的新散列值迁移到新添加的服务器。如果不谨慎操作,无论是新的还是旧的哈希函数都将无效。这将停止向数据库写入任何新数据。
动态切分
动态分片使用外部定位器服务确定条目的位置。这有助于解决算法分片中出现的问题。外部定位器服务提供数据所在的分片的位置。这提供了将单个用户(而不是大量用户组)从一个分片迁移到另一个分片的能力,以缓解热点问题。
定位器服务成为争用和故障的单点。每个数据库操作都需要访问它,因此性能和可用性是必须的。但是,定位器不能简单地缓存或复制。过时的定位器将把操作路由到不正确的数据库。路由错误的写尤其糟糕——它们在路由问题解决后无法被发现。
目录的分片
在此方法中,您将创建一个查找表,该表负责使用分片键跟踪分片及其所持有的数据。查找表保存了一组关于在何处可以找到所需数据的静态信息。查找表中的shard键保存了必须写入或提取数据的各个行的值。这种方法比基于范围的分片更有效、更快,因为每个键都直接绑定到它自己的分片上。
如果将这种方法与其他分片技术进行比较,您会注意到这种方法在许多方面优于其他方法。这种方法允许您使用您想要的动态或算法系统进行分片,而且相对更简单。我们还必须注意到使用这种方法也有缺点。在每次查询或写入之前需要连接到查询表,这可能会对应用程序的性能产生不利影响。查找表的脆弱性可能使其成为单点故障。如果它失败了,就会影响用户写入新数据或访问现有数据的能力。
在选择数据分片之前需要考虑的几点
如果您觉得数据库正在以指数速度扩展,那么强烈建议您改进硬件基础设施。但是,如果您的硬件已经达到上限,那么数据分片可能是您需要考虑的唯一选择。数据库分片可以提高数据库的性能,并在许多方面对您有所帮助,但它也增加了操作成本。当您实现分片时,维护、访问和处理的成本会急剧增加。
分片可能是您业务的最佳解决方案,但您必须了解,与传统方法相比,它具有极大的复杂性,更容易失败。您必须分析所有选项,并选择适合您需求的正确选项。我们希望这篇文章能帮助您从概念上理解Sharding方法。