数据库的分库分表

当数据量大,表字段多时,对数据库的操作速度影响业务正常使用时,可以考虑分库分表了;
数据切分一般分两种:垂直切分 和 水平切分;

垂直切分

垂直切分,就是根据业务的耦合性,针对不同的业务,将关联度较低的字段分开成不同多张表。其实与微服务的拆分类似,每个服务独立一个数据库。使分开的数据表字段相对“高内聚”。
数据库的分库分表

优点

  • 解决业务层面的耦合,使业务清晰
  • 与微服务的治理理念相同,可以单独对不同业务的数据进行管理、维护、监控和扩展等。
  • 高并发的情况下,垂直切分一定程度上提升IO、数据库连接数、单机硬件资源等。

缺点

  • 提升了开发的复杂性
  • 分布式事务处理复杂
  • 依然存在单表数据量过大问题(需要水平切分)

水平切分

当单一一张表的数据量过大时,存在单库读写性能问题时,就需要对表进行水平切分了。
主要分为库内分表和分库分表两种,就是根据表内数据之间的逻辑关系,将同一张表的数据分散存储到多个数据库或多张表中。每张表只包含部分数据,从而使单个表的数据量变小。如图:
数据库的分库分表

优点

  • 不存在单库数据量过大、高并发的性能瓶颈,提升系统稳定性和负载能力
  • 应用端改造较小,不需要拆分业务模块

缺点

  • 跨片区的事物难以控制
  • 数据多次扩展和维护的难度大

什么时候适合进行数据库切分

  1. 确保能不切分就不切分的原则,不切分,对业务的操作和维护才是最小的
  2. 数据量过大,直到正常的sql优化无法满足业务的时候,才考虑数据库切分
  3. 随着业务的发展,需要进行业务拆分,数据库随垂直切分