1、为何要分库分表?
? ? ? ? 常规在未进行分库分表的情况下,随着时间的推移,表中的数据量会越来越多,即表越来越大。
? ? ? ? 最终会导致:
- ?一台服务器的资源不足
- 库中的表越来越多,表中的数据量越来越大
- 增删改查的开销越来越大
2、如何优化?
????????分库分表
3、垂直拆分、水平拆分
3.1、垂直拆分
????????垂直拆分数据库是指按照业务将表进行分类,部署到不同的数据库上面去,这样就能将数据(压力)分担到不同的数据库上面去。
例如:将商品、订单、用户的表分别拆到不同的库中,通过降低单库的大小来提高性能。但这种仍然存在大数据量带来的性能损耗。
? ? ? ? 垂直拆分表就是将一个大表根据业务功能拆分成多个子表。
例如:将用户表根据业务拆分成基本信息表和详细信息表。
? ? ? ? ?缺点:
? ? ? ? 1、不解决大数据量带来的性能损耗,读写压力还是很大。
? ? ? ? 2、不同的业务无法跨库关联(join),只能通过业务来关联。
3.2、水平拆分
? ? ? ? 水平拆分是按照表中的某个或者多个字段按照一定的规则来分散到多个库或者表中,每个表中包含一部分数据。
例如:按照时间或者id进行拆分。比如根据用户id来拆分到不同的数据库(或者表),每个数据库和表结构一致。
3.3、垂直拆分对比水分拆分?
| 垂直拆分 | 水平拆分 | 特点 |
-
规则简单,实施方便 -
业务之间的耦合度非常低,相互影响很小 -
根据不同的表来进行拆分,对应用程序的影响也更小
|
-
将同一个表中的不同数据拆分到不同的数据库 -
对于应用程序来说,表的命名比垂直拆分复杂 -
后期的数据维护也会复杂
| 优点 |
-
系统之间整合或扩展容易 -
拆分后业务清晰,拆分规则明确 -
数据维护简单
|
-
拆分规则抽象好,Join操作基本可以数据库做 -
不存在单库大数据,高并发的性能瓶颈。 -
应用端改造较少。 -
提高了系统的稳定性跟负载能力。
| 缺点 |
|
-
拆分规则难以抽象。 -
分片事务一致性难以解决。 -
数据多次扩展难度跟维护量极大。 -
跨库Join性能较差。
|
|