一文看清两种"拆数据"策略的本质区别、架构形态与适用场景
仍是同一台数据库服务器,同一张逻辑表,
由数据库内核把数据按某个规则切成若干"物理片段"
(分区)存储在不同的文件或存储组里。
对应用层完全透明,SQL 照常写,数据库自己决定查哪个分区。
将数据分散到多台数据库实例(分库)或多张真实表(分表)中,
应用通过中间件(Sharding-JDBC / MyCat 等)
或自己计算路由,把请求打到正确的库和表。
彻底突破单机存储和计算瓶颈,是真正的"水平扩展"。
orders(仍是一张表)WHERE create_time BETWEEN '2024-01-01' AND '2024-12-31'order_id=10007, user_id=1234512345 % 4 = 1
数据库分区 是「单机内部的文件组织优化」——同一台机器、同一张逻辑表,数据库引擎帮你把数据按规则切成物理片段,优化 I/O 扫描范围,对应用透明,代价低,但无法突破单机天花板。
分库分表 是「跨机器的横向水平扩展」——真正把数据和压力分散到多台机器,能突破单机存储/内存/并发的极限,但代价是引入了路由复杂性、分布式事务、跨库查询等一系列新问题。
💡 类比理解:分区像把一个大文件柜里的文件按年份分隔归档(还是同一个柜子);分库分表像把文件拆到不同城市的多个仓库(完全不同的物理位置)。