mysql-分库分表

文章目录

  • 水平拆分&垂直拆分
  • 分库分表
    • 水平分库
    • 垂直分库
    • 水平分表
    • 垂直分表

水平拆分&垂直拆分

水平拆分 适合数据量特别大,字段不多的情况
优点是不存在数据冗余,获取全量数据比较方便

垂直拆分 适合表的数据并不多,但是字段很多的情况,
垂直拆分优点:

  • 可以使得一行需要保存的数据量变小,那么buffer pool就能存放更多行的数据,在查询时就会减少I/O次数(每次查询时读取的Block 就少)

  • 拆分时,可以将热点数据和非热点数据分开保存,可以更好的利用缓存。

垂直拆分缺点:

  • 主键出现冗余
  • 获取全量数据需要关联两张表,造成更多的性能消耗
    不建议用join(开销大,高耦合),建议在service层分别查出两张表的数据然后组合起来得到全量数据。

分库分表

水平分库

概念:以字段为依据,按照一定策略(hash、range等),将一个库中的数据拆分到多个库中。
结果:
每个库的结构都一样,拥有相同的表数量;
每个库的数据都不一样,没有交集,所有库的并集是全量数据;

垂直分库

概念:以表为依据,按照业务归属不同,将不同的表拆分到不同的库中。拆分对象是表
结果:
每个库的结构都不一样,比如abcd四张表,ab表放x库,cd表放y库;
每个库的数据也不一样,没有交集,所有库的并集是全量数据;

水平分表

概念:以字段为依据,按照一定策略(hash、range等),将一个表中的数据拆分到多个表中。
结果:
每个表的结构都一样;
每个表的数据都不一样,没有交集;所有表的并集是全量数据;

垂直分表

概念:以字段为依据,按照字段的活跃性,将热点字段放在一张表,非热点字段放一张表。
结果:
每个表的结构都不一样,idabcd五个字段,idab字段放x表,idcd字段放y表;都存有主键,通过主键来关联

你可能感兴趣的:(数据库,mysql,数据库,java)