什么是数据库分片?
数据库分片是在多台机器上存储大型数据库的过程。一台计算机或数据库服务器只能存储和处理有限数量的数据。数据库分片通过将数据拆分为更小的块(称为分片)并将其存储在多个数据库服务器上来克服此限制。所有数据库服务器通常都具有相同的底层技术,它们协同工作以存储和处理大量数据。
为什么数据库分片很重要?
随着应用程序的增长,应用程序用户的数量及其存储的数据量会随着时间的推移而增加。如果数据量变得太大,并且有太多用户试图使用应用程序同时读取或保存信息,数据库将成为瓶颈。应用程序速度会变慢并影响客户体验。数据库分片是解决此问题的一种方法,因为它支持跨分片并行处理较小的数据集。
数据库分片有什么好处?
组织使用数据库分片获得以下好处:
缩短响应时间
单个大型数据库的数据检索需要更长的时间。数据库管理系统需要搜索许多行才能检索到正确的数据。相比之下,数据分片的行数少于整个数据库。因此,从分片数据库中检索特定信息或运行查询所需的时间更短。
避免服务完全中断
如果托管数据库的计算机出现故障,那么依赖数据库的应用程序也会失败。数据库分片通过将数据库的一部分分发到不同的计算机来防止这种情况。其中一台计算机出现故障不会关闭应用程序,因为它可以与其他功能分片一起运行。 分片通常还与跨分片的数据复制结合使用。因此,如果一个分片不可用,则可以从备用分片访问和还原数据。
高效扩展
不断增长的数据库会消耗更多计算资源,并最终达到存储容量。组织可以使用数据库分片来添加更多计算资源,以支持数据库扩展。他们可以在运行时添加新的分片,而无需关闭应用程序进行维护。
数据库分片的工作原理
数据库将信息存储在由列和行组成的多个数据集中。数据库分片将单个数据集拆分为分区或分片。每个分片都包含独特的信息行,您可以跨多台计算机(称为节点)单独存储这些信息。所有分片都在单独的节点上运行,但共享原始数据库的架构或设计。
例如,包含客户记录数据集的未分片数据库可能如下所示。
客户 ID |
名称 |
省/市/自治区 |
1 |
John |
加利福尼亚州 |
2 |
Jane |
华盛顿州 |
3 |
Paulo |
亚利桑那州 |
4 集 |
Wang |
佐治亚州 |
分片涉及从表中分离出不同行的信息,并将它们存储在不同的计算机上,如下所示。
计算机 A
客户 ID |
名称 |
省/市/自治区 |
1 |
John |
加利福尼亚州 |
2 |
Jane |
华盛顿州 |
计算机 B
客户 ID |
名称 |
省/市/自治区 |
3 |
Paulo |
亚利桑那州 |
4 集 |
Wang |
佐治亚州 |
分片
分区的数据块称为逻辑分片。存储逻辑分片的计算机称为物理分片或数据库节点。一个物理分片可以包含多个逻辑分片。
分片键
软件开发人员使用分片键来确定如何对数据集进行分区。数据集中的一列决定了哪些数据行组合在一起形成分片。数据库设计人员从现有列中选择一个分片键或创建一个新分片键。
无共享架构
数据库分片在无共享架构上运行。每个物理分片都独立运行,与其他分片没有关系。只有包含您请求的数据的物理分片才会为您并行处理数据。
软件层协调来自多个分片的数据存储和访问。例如,某些类型的数据库技术内置了自动分片功能。软件开发人员还可以在其应用程序中编写分片代码,以存储或检索正确分片中的信息。
数据库分片的方法有哪些?
数据库分片方法对分片键应用不同的规则,以确定特定数据行的正确节点。以下是常见的分片架构。
基于范围的分片
基于范围的分片(或动态分片)根据值的范围拆分数据库行。然后,数据库设计人员将分片键分配给相应的范围。例如,数据库设计人员根据客户名称中的第一个字母对数据进行分区,如下所示。
名称 |
分片键 |
以 A 开头到以 I 开头 |
A |
以 J 开头到以 S 开头 |
B |
以 T 开头到以 Z 开头 |
C |
在将客户记录写入数据库时,应用程序会通过检查客户的名称确定正确的分片键。然后,应用程序将键与其物理节点进行匹配,并将该行存储在该计算机上。同样,应用程序在搜索特定记录时执行反向匹配。
优点和缺点
根据数据值,基于范围的分片可能会导致单个物理节点上的数据过载。在我们的示例中,分片 A(包含以 A 开头到以 I 开头的名称)包含的数据行数可能比分片 C(包含以 T 开头到以 Z 开头的名称)多得多。但是,它更容易实现。
哈希分片
哈希分片通过使用称为哈希函数的数学公式将分片键分配给数据库的每一行。哈希函数从行中获取信息并生成哈希值。应用程序使用哈希值作为分片键,并将信息存储在相应的物理分片中。
软件开发人员使用哈希分片在多个分片之间均匀分布数据库中的信息。例如,该软件将客户记录分成两个分片,其替代哈希值分别为 1 和 2。
名称 |
哈希值 |
John |
1 |
Jane |
2 |
Paulo |
1 |
Wang |
2 |
优点和缺点
尽管哈希分片会导致物理分片之间的数据分布均匀,但它不会根据信息的含义来分离数据库。因此,在向计算环境中添加更多物理分片时,软件开发人员可能会遇到重新分配哈希值的困难。
目录分片
目录分片使用查找表将数据库信息与相应的物理分片进行匹配。查找表类似于电子表格中的表,它将数据库列与分片键关联。例如,下图显示了服装颜色的查找表。
颜色 |
分片键 |
蓝色 |
A |
红光 |
B |
黄色 |
C |
黑色 |
D |
当应用程序将服装信息存储在数据库中时,它会参考查找表。如果一件衣服是蓝色的,应用程序会将信息存储在相应的分片中。
优点和缺点
软件开发人员之所以使用目录分片,是因为它非常灵活。每个分片都是数据库的有意义的表示,不受范围的限制。但是,如果查找表包含错误信息,目录分片会失败。
地理分片
地理分片根据地理位置拆分和存储数据库信息。例如,一个约会服务网站使用数据库存储来自各个城市的客户信息,如下所示。
名称 |
分片键 |
John |
加利福尼亚州 |
Jane |
华盛顿州 |
Paulo |
亚利桑那州 |
软件开发人员使用城市作为分片键。他们将每个客户的信息存储在地理位置位于相应城市的物理分片中。
优点和缺点
由于分片与提出请求的客户之间的距离较短,因此地理分片允许应用程序更快地检索信息。如果数据访问模式主要基于地理位置,则效果很好。但是,地理分片也可能导致数据分布不均匀。
如何优化数据库分片以实现均匀的数据分布
当特定物理分片上发生数据过载,而其他物理分片仍然负载不足时,就会导致数据库热点。热点会减慢数据库的检索过程,从而无法实现数据分片的目的。
良好的分片键选择可以在多个分片之间均匀分布数据。选择分片键时,数据库设计人员应考虑以下因素。
基数
基数描述了分片键的可能值。它决定了单独的面向列的数据库中可能的最大分片数量。例如,如果数据库设计人员选择“是/否”数据字段作为分片键,则分片的数量限制为两个。
频率
频率是在特定分片中存储特定信息的概率。例如,数据库设计人员选择年龄作为健身网站的分片键。大多数记录可能会进入年龄在 30-45 岁的订阅者的节点中,从而产生数据库热点。
单调变化
单调变化是分片键的变化率。单调增加或减少分片键会导致分片不平衡。例如,反馈数据库分为三个不同的物理分片,如下所示:
- 分片 A 存储购买次数为 0-10 的客户的反馈。
- 分片 B 存储购买次数为 11-20 的客户的反馈。
- 分片 C 存储购买次数为 21 或更多的客户的反馈。
随着业务的增长,客户的购买次数将超过 21 次或更多。应用程序将其反馈存储在分片 C 中,这会导致分片不平衡,因为分片 C 包含的反馈记录比其他分片多。
数据库分片有哪些替代方案?
数据库分片是一种横向扩缩策略,它分配额外的节点或计算机来共享应用程序的工作负载。由于其容错架构,组织可以从横向扩缩中受益。当一台计算机出现故障时,其他计算机将继续运行而不会中断。数据库设计人员通过在多个服务器之间分布逻辑分片来减少停机时间。
不过,分片是几种数据库扩缩策略中的一种。探索其他技术并了解它们之间的差别。
纵向扩缩
纵向扩缩可提高单台计算机的计算能力。例如,IT 团队向数据库服务器添加 CPU、RAM 和硬盘来处理不断增加的流量。
数据库分片与纵向扩缩的对比
纵向扩缩的成本较低,但可以纵向扩缩的计算资源是有限的。同时,作为一种横向扩缩策略,分片更易于实施。例如,IT 团队安装多台计算机,而不是升级旧的计算机硬件。
复制
复制是一种制作数据库的精确副本并将其存储在不同计算机上的技术。数据库设计人员使用复制来设计容错的关系数据库管理系统。当其中一台托管数据库的计算机出现故障时,其他副本仍可运行。复制是分布式计算系统中的常见做法。
数据库分片与复制的对比
数据库分片不会创建相同信息的副本。相反,它将一个数据库拆分为多个部分,并将它们存储在不同的计算机上。与复制不同,数据库分片不会带来高可用性。 分片可以与复制结合使用,以实现可扩展性和高可用性。
在某些情况下,数据库分片可能包含特定数据集的复制。例如,向美国和欧洲客户销售产品的零售商店,可能会将尺寸转换表的副本存储在两个区域的不同分片上。应用程序可以使用转换表的重复副本来转换测量尺寸,而无需访问其他数据库服务器。
分区
分区是将数据库表拆分为多个组的过程。分区分为两种类型:
- 水平分区将数据库按行拆分。
- 垂直分区会为数据库列创建不同的分区。
数据库分片和分区的对比
数据库分片类似于水平分区。这两个进程都将数据库拆分为多组唯一的行。分区将所有数据组存储在同一台计算机上,但数据库分片将它们分布在不同的计算机上。
数据库分片面临哪些挑战?
组织在实施数据库分片时可能会面临以下挑战。
数据热点
由于数据分布不均匀,某些分片变得不平衡。例如,包含以 A 开头的客户名称的单个物理分片会比其他分片接收更多数据。这个物理分片将比其他分片消耗更多计算资源。
解决方案
您可以使用最佳分片键均匀分布数据。有些数据集比其他数据集更适合分片。
操作复杂性
数据库分片会带来操作复杂性。开发人员必须管理多个数据库节点,而不是管理单个数据库。当开发人员检索信息时,他们必须查询多个分片并将这些信息组合在一起。这些检索操作会使分析复杂化。
解决方案
在 AWS 数据库产品组合中,数据库的设置和操作已在很大程度上实现了自动化。这使得使用分片数据库架构成为一项更加精简的任务。
基础设施成本
当组织添加更多计算机作为物理分片时,他们为基础设施成本支付的费用会更高。如果您增加本地数据中心的计算机数量,维护成本可能会增加。
解决方案
开发人员使用 Amazon Elastic Compute Cloud(Amazon EC2)在云中托管和扩展分片。通过使用 AWS 完全管理的虚拟基础设施,您可以节省资金。
应用程序的复杂性
大多数数据库管理系统都没有内置的分片功能。这意味着数据库设计人员和软件开发人员必须手动拆分、分发和管理数据库。