什么是分片
分片是一种数据库设计原则,将数据库表水平分区,即将表的行分散存储在不同的数据库服务器或实例上,而不是将其拆分为列。这种方式允许数据库跨多个服务器进行扩展,减少每个表中的总行数,从而提高搜索性能。分片可以自动完成,使用诸如一致性哈希等技术将大型负载分散到多个服务器,对于分布式计算非常有用,需要将负载分散到多个服务器以获得更好的性能或可靠性。分片还可以通过在不同的数据中心放置分片实现应用程序的全球分布,从而克服通信瓶颈。然而,分片会引入复杂性,例如需要更复杂的SQL处理分片逻辑、额外的软件管理分片系统,以及故障转移和备份方面的挑战。因此,人们希望能够自动支持分片来解决这些问题。
分片的工作原理是什么

数据水平分区
分片的工作原理是将单个数据库水平分区为多个分片(shards),每个分片包含原始数据库中的一部分行。所有分片一起构成了完整的数据集。这种架构模式允许跨多个服务器分布负载,提高了数据库的可伸缩性和性能。

分片键和数据分布
应用程序使用分片键(通常是数据库中的一列或多列组合)来确定特定数据行应该存储在哪个分片。分片键通过范围分片(按值范围划分)或哈希分片(使用哈希函数分配行)等技术,将数据均匀分布到各个分片。

分片协调层
一个软件层负责协调从正确的分片(或多个分片)存储和检索数据。某些数据库技术具有自动分片功能,其他则是开发人员编写自定义代码处理分片逻辑。
分片有哪些优势
分片带来了多方面的优势,可以显著提升系统性能和可用性。以下是分片的主要优势:

提高查询响应速度
通过将数据分散到多个分片,每个分片只需处理较小的数据子集,减少了单个查询需要处理的数据量。这样可以大幅提高查询的响应时间,提升用户体验。

提高系统可用性
如果某个分片出现故障,其他分片仍可继续正常运行,避免了整个系统的完全中断。对于关键任务系统来说,这种高可用性十分重要。

支持无缝扩展
分片架构使得在运行时添加新的分片非常容易,无需停机即可扩展数据库容量。这使得系统能够随着数据和用户量的增长而无缝扩展,满足不断增长的需求。

优化查询效率
如果分片是基于数据的实际划分(如地理区域),那么只需查询相关分片,就可以推断出数据所属的分片。这种优化查询策略可以极大地提高查询效率。

支持全球分布式部署
分片架构简化了跨多个数据中心复制数据的操作,从而能够支持全球范围内的分布式部署。这种特性对需要全球覆盖的大型应用程序来说是一个巨大的优势。
分片的类型有哪些

水平分区分片
水平分区分片是将表按行划分到多个服务器。如果能够明确识别某行属于哪个分区,可以减小索引大小,提高性能。例如,可以根据客户姓名的首字母将客户数据分散到不同分区。

时间分片
时间分片是根据数据的过期时间将日志分片,以减轻日志的压力。例如,可以根据证书的到期日期对日志进行分片。

单调变化分片
单调变化分片是指分片键随时间单调递增或递减,导致分片不平衡。比如,可以根据客户购买次数将反馈数据分片,0-10次购买的反馈在一个分片,11-20次在另一个分片,21次及以上在第三个分片。随着客户购买次数增加,21次及以上的分片会变得越来越不平衡。

自动分片
在自动分片中,数据库系统会透明地为应用程序处理分片过程,应用程序无需关注底层的分片细节。

区间分片
区间分片(也称动态分片)是根据分片键的值范围将数据库行划分的一种方法。例如,可以根据客户姓名的首字母对客户数据进行分片。
如何使用分片

选择分片键
分片的第一步是选择一个合适的分片键。分片键是数据集中的一个列,用于确定如何将数据行分组形成分片。选择分片键时需要考虑数据的访问模式,通常选择经常用于查询或过滤的列作为分片键。

分布式存储分片
将划分好的分片分布式存储到多个计算机或节点。这样可以实现并行处理较小的数据集,提高响应速度。分布式存储分片的方式可以是在不同的物理机器,也可以是在同一台机器的不同实例。

优化和维护
使用分片后,还需要持续优化和维护分片配置,可能包括重新分片以适应数据增长、处理分片故障或添加新的分片等。定期监控和调整分片策略有助于保持系统性能。

根据分片键划分数据
根据选定的分片键,将数据集划分为多个分片。常见的划分方式有基于范围的分片和基于哈希的分片。基于范围的分片是根据分片键值的范围将数据划分到不同分片;基于哈希的分片则是使用哈希函数将数据行分配到不同分片。

协调数据访问
需要一个软件层协调跨多个分片的数据存储和检索。一些数据库系统具有自动分片功能,应用程序也可以包含自定义的分片逻辑。协调层需要将查询路由到正确的分片,并合并来自多个分片的结果。
如何实现分片

一致性哈希分片
一致性哈希是一种用于跨多个较小的服务和服务器分散大型负载的技术。它允许自动分片,而无需手动分区。

具有内置分片支持的数据库
一些数据库内置了自动分片支持,允许数据库无需更改应用程序,可以通过添加更多分片进行扩展。

选择分片策略
选择分片策略时需要考虑数据访问模式、一致性要求和特定的数据库技术。需要仔细规划,以避免分片可能带来的潜在缺点,如增加复杂性和潜在的单点故障。

应用层和数据库层分片
分片可以在应用程序层完成,应用程序负责将查询路由到适当的分片;也可以在数据库层完成,数据库管理系统透明地处理分片。

第三方分片工具
对于没有本机分片支持的数据库,可以使用第三方工具实现分片。
分片有哪些应用场景
分片适用于以下几种应用场景:

全球分布式应用
对于需要在全球范围内部署的应用程序,不同数据中心之间的通信链路可能会成为性能瓶颈。分片可以将数据库分布在大量机器,提高性能。如果数据库分片是基于某种现实世界的数据分段,则可以轻松自动推断出适当的分片成员资格,并且只查询相关分片。

分布式计算负载均衡
在使用分布式计算将负载分离到多个服务器(无论是出于性能还是可靠性原因)的情况,分片方法也可能有价值。除了传统的数据分片,执行能力分片也已经成为克服区块链性能和可扩展性问题的潜在方法。

数据库扩展
当数据库不断增长,消耗更多计算资源并达到存储容量时,组织无需关闭应用程序,可以使用数据库分片在运行时添加新的分片,从而支持数据库扩展并添加更多计算资源。

数据热点缓解
如果由于数据分布不均匀而导致某些分片变得不平衡,从而导致数据热点,软件开发人员可以使用最佳分片键在分片之间更均匀地分布数据。

并行处理
分片还可以实现跨分片对较小数据集进行并行处理,与单个大型数据库相比,可以提高响应时间。

高可用性
通过将数据库分布在多台计算机,如果一台计算机发生故障,应用程序仍然可以使用其他功能分片继续运行,从而防止整个服务中断。
分片与复制的区别是什么
分片和复制是两种不同的数据库扩展技术。分片是将单个数据库分割成多个分区或"分片",并将这些分片分布存储在不同的计算机,从而允许数据库处理更大的数据量和更多的用户流量。复制则是在不同计算机上创建数据库的精确副本,以实现容错能力,当一台主机数据库发生故障时,其他副本仍可继续运行。分片将数据划分为独立的分区存储在不同服务器,而复制则是在多个服务器上保存完整的数据副本。分片可以与复制相结合,既实现了扩展能力,又具备了高可用性。
分片的挑战有哪些
分片是一种常见的数据库扩展技术,但也带来了一些挑战。以下是分片面临的主要挑战:

增加了复杂性
分片会增加SQL查询的复杂性,因为开发人员需要编写更复杂的SQL处理分片逻辑。此外,还需要额外的软件来分区、平衡、协调和确保数据完整性,这些软件可能会出现单点故障。

数据热点问题
由于数据分布不均匀,某些分片可能会变得过于繁重,成为数据热点。例如,包含以A开头客户名称的分片可能会比其他分片接收更多数据,导致该分片使用更多计算资源。

运维复杂度增加
分片需要管理多个数据库节点,而不是单个数据库,增加了运维复杂度。检索和分析数据时,开发人员必须查询并组合来自多个分片的信息。

基础设施成本增加
分片需要额外的计算机或节点来托管分片数据库,增加了基础设施成本。不过,像亚马逊EC2这样的云解决方案可以通过提供可扩展的虚拟基础设施帮助管理这些成本。

应用程序复杂性增加
大多数数据库管理系统都没有内置分片功能,这意味着开发人员必须手动拆分、分发和管理分片数据库,增加了应用程序的复杂性。
欢迎加入亚马逊云科技培训中心
欢迎加入亚马逊云科技培训中心
-
快速上手训练营
-
账单设置与查看
-
动手实操
-
快速上手训练营
-
第一课:亚马逊云科技简介
本课程帮助您初步了解云平台与本地环境的差异,以及亚马逊云科技平台的基础设施和部分核心服务,包括亚马逊云科技平台上的弹性高可用架构,架构设计准则和本地架构迁移上云的基本知识。
亚马逊云科技技术讲师:李锦鸿第二课:存储与数据库服务
您将在本课程中学习到亚马逊云科技上的三个存储服务分别是什么。我们也将在这个模块中为您介绍亚马逊云科技上的关系型数据库服务 Amazon Relational Database Service (RDS)。
亚马逊云科技资深技术讲师:周一川第三课:安全、身份和访问管理
在这个模块,您将学习到保护您在亚马逊云科技上构建的应用的安全相关知识,责任共担模型以及身份和访问管理服务, Identity and Access Management (IAM) 。同时,通过讲师演示,您将学会如何授权给 EC2 实例,允许其访问 S3 上的资源。
亚马逊云科技技术讲师:马仲凯 -
账单设置与查看
-
-
动手实操
-