在高并发的系统中,分库分表是必不可少的技术手段之一。
分库分表分为两条方向:垂直拆分和水平拆分
垂直拆分
根据业务方向,分布到不同的库或表中。比如说,某个表中,字段很多,数量不多情况下,就可以进行垂直拆分。
优点
-
拆分后业务清晰,拆分规则明确
-
系统之家整合或扩展容易
-
数据维护简单
缺点
-
部分业务表无法join连表查询,只能通过接口方式解决,提高了系统复杂度
-
受每种业务不同的限制存在单库性能瓶颈,不易数据扩展和性能提高
-
事务处理了复杂
水平拆分
根据数据方向,分布到不同的库或表中。比如说,某个表中,字段不多,数量很多情况下,就可以进行水平拆分。
优点
-
不存在单库大数据,高并发的性能瓶颈
-
对应用透明,应用端改造少
-
按照合理拆分规则拆分,join连表操作基本避免跨库
-
提高了系统的稳定性和负载能力
缺点
-
拆分规则难以抽象
-
分片事务一致性难以解决
-
数据库多次扩展难度和维护量极大
-
跨库join性能较差
规划分库分表
分库 为了解决数据库连接资源不足问题,和磁盘IO的性能瓶颈
分表 为了解决单表数据量太大,即使走索引也非常耗时。此外,还可以解决消耗CPU资源问题
分库分表 可以解决数据库连接资源不足、磁盘IO的性能瓶颈、检索数据耗时和CPU资源等问题
业务场景中,用户并发量很大,但是需要保存的数据量较少,这时可以分库,不分表
用户并发量不大,但是需要保存的数量较多,可以进行分表,不分库
如果用户量并发大,并且保存的数据量交到,可以进行分库分表
遗留问题
分库分表的具体实现方案有哪些
分库分表后如何平滑扩容
分库分表后带来了哪些问题
如何在项目中实现分库分表功能