分库分表相关学习

什么是分库分表

  • 分库:按照一定的规则将数据分到多个苦中,主要解决单个库连接并发过多,单机数据库顶不住压力的问题
  • 分表:将单个数据库里的某一张表,按照某个规则分为多张表,主要解决单张表数据过多的问题,减轻单表压力

怎么分

分库

  1. 按业务不同来分,专库专用,微服务使用数据库的场景就是典型代表

分表

  1. 将字段较多的表,拆分成多个表,就是大表拆分成多个小表。访问次数频繁的字段拆分至核心表,数据库加载数据时会更多只加载核心表数据到内存中,减少磁盘IO,提高性能
  2. 将一张表按一定的规则(简单的有哈希)切分成多个结构相同的表,按照规则来存储/读取数据,切分出来的每张表只储存原表的一部分数据。能够解决单表数据量过大。还可以将切分的表存放至不同的库中,实现分布式,进一步提高性能

Go中可以如何实现

  1. 在代码中实现,如repo层/data层中手动对传入的参数进行计算,侵入性比较强,但是调试方便
  2. ORM框架中使用中间件,由中间件来解析语句并计算,应用代码中无感,如GORM的Sharding
  3. 在应用于数据库中加一层代码,由数据库代理来实现,类似第二种方案,只不过是外部中间件完成