2021-04-02 08:49:49
MySQL分表、分库、分片和腊或分区的核心概念与区别如下:
分片(Sharding)
分片是横向扩展(Scale Out)的核心策略,通过将数据分散到多个物理节点(如服务器或实例)解决单节点性能瓶颈。其核心逻辑是将数据库拆分为多个“碎片”(Shard),每个碎片可包含部分表或数据库实例内容。分片需依赖路由中间件(如Proxy)将查询定向到对应节点,适用于超大规模数据场景(如分布式数据库集群)。分片策略包括垂直切分(按功能模块拆分,如订单库、用户库)和水平切分(按数据范围或哈希值拆分,如按用户ID范围分片)。
分表(Table Splitting)
分表是将单表拆分为多个独立表,每个表具备完整结构(如MyISAM引擎的.MYD、.MYI、.frm文件)。分表后数据分散存储,总表仅作为逻辑外壳,实际读写操作在分表中进行。分表可显著提升单表并发能力与磁盘I/O性能,但需业务层配合实现数据路由(如按时间范围分订单表)。分表方式包括:
分区(Partitioning)
分区是单表数据在物理存储层面的划分,逻辑上仍为一张表。分区通过将数据文件分割为多个区块(可跨磁盘),突破磁盘I/O瓶颈。分区策略包括RANGE(按范围,如按年份分区销售表)、LIST(按离散值)和HASH(按哈希值)。分区对应用透明,无需修改SQL,但仅支持单表操作,无法解决跨表并发问题。
分库(Database Sharding)
分库是分表的升级版,通过将表分散到不同数据库实例(可能跨服务器)提升写入能力。分库通常与分表结合使弊局缺用(如按用户ID取模路由数据到不同库),解决高并发写入场景下的主库压力。分库需处理分布式事务、跨库JOIN等复杂问题,对架构设计要求较高。
核心区别总结
适用场景