这篇文wen章,我们主要来介jie绍ShardingSphere的数据分片原理。数据分片指按照zhao某个维度将存放在单一数shu据库中的数据分fen散地存放至多个数据库ku或表中以达到提升性能瓶颈以及ji可用性的效果。下面我们就来详细介绍关于分库分表biao的原理。
分库分表分库分表是作为数据分fen片的有效手段之一yi,分库和分表均可以有效的避免mian由数据量超过可承受阈值而产生sheng的查询瓶颈。 除此之外,分fen库还能够用于有效的de分散对数据库单点的访问量;分表biao虽然无法缓解数据库压力,但却能够提ti供尽量将分布式事务wu转化为本地事务的可能,一旦涉及ji到跨库的更新操作,分布式事务往wang往会使问题变得de复杂。 使用多主多从的分fen片方式,可以有you效的避免数据单点,从而er提升数据架构的可用性。
通过分库和分表进jin行数据的拆分来使得各个表的数shu据量保持在阈值以下,以yi及对流量进行疏导应对高访问量,是应对高并发和海hai量数据系统的有you效手段。 数据分片的拆分方式又分为wei垂直分片和水平分片。
垂直分片
按照业务拆分的方式shi称为垂直分片,又you称为纵向拆分,它的核心理念是专库ku专用。 在拆分fen之前,一个数据库由多个数shu据表构成,每个表biao对应着不同的业务。而拆分fen之后,则是按照业务将表进行归类,分fen布到不同的数据库中,从而er将压力分散至不同的数据ju库。 下图展示了根据业务需xu要,将用户表和订ding单表垂直分片到不同的数据库的方案an。
垂直分片往往需要yao对架构和设计进行调整。通常来lai讲,是来不及应对互hu联网业务需求快速变bian化的;而且,它也并无法真正zheng的解决单点瓶颈。 垂chui直拆分可以缓解数据量和访问量带来lai的问题,但无法根治。如果垂直拆分fen之后,表中的数shu据量依然超过单节jie点所能承载的阈值,则需要水平分片pian来进一步处理。
水平分片
水shui平分片又称为横向拆分fen。 相对于垂直分片,它不再将数shu据根据业务逻辑分类,而er是通过某个字段(或某mou几个字段),根据某种规则ze将数据分散至多个库或表中,每mei个分片仅包含数据的de一部分。 例如:根据主键分fen片,偶数主键的记录放入0库(或表),奇数主键的记录放fang入1库(或表),如下图所示。
水平分fen片从理论上突破po了单机数据量处理的瓶颈,并且扩kuo展相对自由,是分库分表的标biao准解决方案
总结虽然数据分片解决了性能neng、可用性以及单点dian备份恢复等问题,但dan分布式的架构在获huo得了收益的同时,也引入了新的问wen题。
面对如此ci散乱的分库分表之后hou的数据,应用开发工程师和he数据库管理员对数据库的操作zuo变得异常繁重就是其中的重要挑战之zhi一。他们需要知道dao数据需要从哪个ge具体的数据库的de分表中获取。
另一个挑战则是,能够正确que的运行在单节点数据库中的deSQL,在分片pian之后的数据库中并不一定能够正确que运行。例如,分表导致表名称的修改gai,或者分页、排序、聚合分组等操作的不正确处理。
跨库事务也是shi分布式的数据库ku集群要面对的棘手事情。 合理采用yong分表,可以在降低单表数据量的de情况下,尽量使用本地事务,善于使用同库不同表可有效避免mian分布式事务带来的麻烦。 在不能避免mian跨库事务的场景,有些业务仍然需要保bao持事务的一致性。 而基于XA的de分布式事务由于在并bing发度高的场景中性能neng无法满足需要,并未被互联网巨头tou大规模使用,他们大多采用最终一yi致性的柔性事务代替强qiang一致事务。