分库

分库:把一些不同业务的表放到不同数据库,不同数据库还可以放到不同的服务器。

作用

减轻服务器的压力,增加数据库吞吐量。

分区

分区:mysql的一种技术设计,将一个表的数据分段在同一个服务器的多个物理位置存放。

表还是一个表,sql没有影响,业务层不用改。

作用

减轻数据库的负担,提高数据库效率,提高表的增删改查效率。

适用场景

表数据量大,访问量不大。

分区方式

  • range,范围
  • list,预定义列表
  • hash
  • key,hash模式的一种延伸
  • composite,复合模式,以上模式组合使用

sql语句

range:

1
2
3
4
5
6
7
8
9
10
create table range(   
id int(11),
money int(11) unsigned not null,
date datetime
)partition by range(year(date))(
partition p2007 values less than (2008),
partition p2008 values less than (2009),
partition p2009 values less than (2010),
partition p2010 values less than maxvalue
);

分表

分表:开发人员的物理设计,将一个大表按照一定规则分解成多张子表。

表拆分成多个表,sql有影响,业务层需要调整。

作用

减轻数据库的负担,提高数据库效率,提高表的增删改查效率。

适用场景

表数据量大,访问量大。

集群

mysql集群是一个无共享的、分布式节点架构的存储方案,其目的是提供容错性和高性能。

通过多个mysql服务器分配负载,从而最大程序地达到高性能,通过在不同位置存储数据保证高可用性和冗余。

优缺点

优点:

  • 高可用性;
  • 快速自动失效切换;
  • 灵活分布式体系结构,没有单点故障;
  • 高吞吐量、低延迟;
  • 可拓展性强,支持在线扩容。

缺点:

  • 不支持外键;
  • 部署、管理、配置复杂;
  • 占用磁盘空间大、内存大;
  • 备份、恢复不方便;
  • 重启时,数据节点将数据load到内存需要很长时间。