MySQL 分库分表是什么
【摘要】 当单库单表的数据量增长到一定规模,比如上千万甚至上亿行,索引变深、查询变慢、写入也变吃力,这时就需要分库分表,把数据分散到多个库、多张表中,本质是解决单机存储和计算能力的瓶颈。分库分表分两种。垂直拆分是按业务字段拆分,把大表拆成若干小表,或把不同业务拆到不同库,适合字段很多、冷热数据分离的场景。水平拆分是按某一字段(通常是用户 ID)把同一结构的表拆成多张,数据均匀分布,适合数据量巨大但结构...
当单库单表的数据量增长到一定规模,比如上千万甚至上亿行,索引变深、查询变慢、写入也变吃力,这时就需要分库分表,把数据分散到多个库、多张表中,本质是解决单机存储和计算能力的瓶颈。
分库分表分两种。垂直拆分是按业务字段拆分,把大表拆成若干小表,或把不同业务拆到不同库,适合字段很多、冷热数据分离的场景。水平拆分是按某一字段(通常是用户 ID)把同一结构的表拆成多张,数据均匀分布,适合数据量巨大但结构相似的场景。
分库分表会带来几个必须解决的问题。第一,分布式主键,不能再依赖自增 ID,一般用雪花算法或号段模式生成全局唯一 ID。第二,跨库的查询、分页和聚合会变得复杂,需要引入中间件,如 ShardingSphere、MyCat。第三,分布式事务的处理难度上升。
分库分表是手段而不是目的,不要一上来就拆。优先做好索引、SQL 优化和读写分离,等确实遇到瓶颈了再考虑拆分,否则只会徒增运维复杂度。
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)