分库分表的 21 条法则,hold 住!
发布网友
发布时间:2024-11-07 12:20
我来回答
共1个回答
热心网友
时间:2024-11-07 13:08
欢迎来到《分库分表ShardingSphere5.x原理与实战》系列的第二篇文章。在深入实战之前,我们先来了解在分库分表架构中遇到的一些通用概念,这将有助于我们理解市面上其他的分库分表工具,尽管它们的实现方式可能有所不同,但整体思路基本一致。在正式开始实际操作前,掌握这些概念,以便更好地理解和应用分库分表技术至关重要。
以t_order表为例,让我们探讨如何通过分库分表优化系统性能。当数据量达到亿级别时,查询性能可能会严重下降。我们通过将原始单库拆分为两个库(DB_1和DB_2),并在每个库中进行分表处理(生成t_order_1和t_order_2),实现了对订单表的分库分表优化。
数据分片是一种基础模式,它将大表(如t_order)拆分为多个小表(t_order_0、t_order_1、...、t_order_n),每张表仅存储原始表中的一部分数据。数据节点是数据分片中的最小存储单元,它由数据源名称和数据表组成,如DB_1.t_order_1和DB_2.t_order_2。逻辑表指的是具有相同结构的水平拆分表的集合。
在数据库中,原本的t_order表已经不存在,取而代之的是若干t_order_n表。业务代码对分库分表无侵入,开发者只需在代码中使用逻辑表名称(如t_order)编写SQL,系统在执行前会自动解析并转换为实际执行的SQL,确保代码的可读性和一致性。
真实表是数据库中实际存在的物理表(如DB_1.t_order_n)。广播表是一种特殊表,其表结构和数据在所有分片数据源中保持一致,主要用于字典表或配置表等场景,可以显著提高JOIN查询效率。然而,广播表的修改需要保证同步性,避免性能影响。
单表是指没有进行分片的表,适用于数据量不大且无需分片的情况。分片键决定了数据的存储位置,选择合适的分片键可以最大化水平分片的性能提升。分片策略包括分片算法和分片键的选择,可以灵活配置以适应不同业务需求。常见的分片算法有哈希、范围、轮询等。
绑定表是具有相同分片规则的分片表组,它们的分片键相同,可以避免跨库JOIN操作,提高查询效率。在多表联合查询时,必须使用分片键进行关联,否则可能导致性能下降。
分库分表后,SQL执行流程包括解析、优化、路由、改写、执行和结果归并。SQL解析和优化后,系统确定执行位置,进行改写以适应真实表结构,最终安全高效地执行SQL。结果归并是将多个数据节点的结果整合成最终结果。
分布式主键生成是分库分表后面临的一个挑战,为了解决主键冲突问题,可以采用分布式ID生成系统(如雪花算法)为每条记录分配全局唯一的ID。数据脱敏是保护敏感数据安全的重要措施,通过算法对敏感字段进行脱敏处理,确保数据在传输和存储过程中的安全性。
分布式事务实现跨多个数据源的原子性操作,以确保数据一致性。Seata等工具简化了分布式事务的实现,减少错误和漏洞,提高系统稳定性。
数据迁移是分库分表后遇到的一个复杂问题,通常需要在不影响业务系统的情况下,从旧集群迁移数据至新集群。存量数据和增量数据分别采用定时迁移和双写模式处理。影子库用于验证数据库变更操作的正确性,提供安全的测试环境。
了解这些概念后,我们即将深入实战案例,包括读写分离、数据脱敏、分布式主键、分布式事务、配置中心、注册中心、Proxy服务等。下篇文章将介绍快速实现分库分表的两种方式。