垂直分表

  垂直分表也称为“大表拆小表”,基于关系型数据库字段进行拆分,是最常见的数据库表设计。由于字段比较多,通常将低频使用或长度较大的字段拆分到“扩展表”中。

  我在中国网安参与过国家信息安全漏洞库的优化工作。其中一个优化点便是提升数据库的访问速度。有张“漏洞信息表”包含上百个字段,根据主业务场景不同,划分成了三张表——主要信息表、标签表、正文表,后两者便是上文描述的“扩展表”。

垂直分库

  垂直分库是指根据业务将相关表从一个库划分到另一个库。这种架构在“微服务”盛行的今天非常普及。

  如今在我所处的电商体系中,商品、订单、用户都是单独封库,这样有利于我们对不同业务类型的数据进行“分级”管理、维护、监控、扩展,与上层“服务拆分”、系统解耦思想不谋而合

  在IO瓶颈、硬件资源不足等环境面前,垂直分库架构通过横向扩展能够解决上述痛点。

水平分表

  水平分表也称为“横向分表”,即将一张表中根据数据行拆分到不同的表中(同一个库),以此来降低单表数据量,优化查询性能。

  纵观整个数据库,仍在一台机器上,不容易解决IO性能瓶颈。我见过的水平分表都做成了分库分表。

主从备份

  主从备份是容灾的手段,通过冗余备份,起到数据安全、服务高可用作用。

读写分离

  读写分离是建立在主从备份的基础上,在主从的架构体系下,主库负责写数据,而从库只提供查询操作。

  当单机(主库)无法支撑大量的数据访问,需要从库的分流,也可以有多个从库同时分流。由于数据同步可能会有延时,主从在极短时间内会出现数据不一致的情况。

分库分表

  分库分表是升级版的水平分表,将这些拆分出的表保存到不同的数据库中。

  在高并发和海量数据的场景下,分库分表能够有效缓解单机和单库的性能瓶颈和压力,突破 IO、连接数、硬件资源的瓶颈。

问题

  • 分库分表策略
  • 跨库事务

      后面,我将总结一下我所认知的解决方案。

参考

分库分表的几种常见形式以及可能遇到的难
数据库主从复制,读写分离,负载均衡,分库分表分别表达的什么