在数据库领域,OLTP(联机事务处理)系统通常面临高并发、低延迟、强一致性的要求。当单库单表在数据量或并发上遇到瓶颈时,就需要做分库分表(Sharding)。下面从“为什么做、怎么做、关键问题、常见方案”几个角度系统说明。
典型瓶颈:
目标:
order → order_00 ~ order_31db0 ~ db3,每个库含若干分表shard_key = user_id
db_index = hash(user_id) % 4
tbl_index = hash(user_id) % 32
优点:
缺点:
order_202401
order_202402
优点:
缺点:
user_id 1~1000w → db0
user_id 1000w~2000w → db1
优点:
缺点:
例如:
user_id 决定分片order_id 中包含 user_id 的分片基因这样可以用 order_id 直接定位库表,避免跨库 JOIN。
原则:
反例:
create_time 做分片键但按 user_id 查询OLTP 中尽量避免:
OLTP 要求强一致时:
不能用单库自增:
跨分片分页很贵:
优点:
OLTP 分库分表的核心不是“切成几块”,而是选对分片键、避免跨库、控制复杂度。
如果你愿意,可以告诉我:
我可以直接帮你设计一套分库分表方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。