# 分片、分区、分表、分库

# 分片

分片(Sharding)是将一个数据分成两个或者多个较小的块,称为逻辑分片(logical shards)。然后逻辑分片分布在单独的数据库节点上,称为物理分片(physical shards)。物理分片可以容纳多个逻辑分片。

数据库分片(Database shards)是无共享架构的一个例子。这意味着分片是自治的:分片间不共享任何相同的数据或者服务器资源。

# 分区

数据分区是一种物理数据库的设计技术,它的目的是在特定的SQL操作中减少数据读写的总量以缩短响应时间。分区不会形成新的数据表,实际上还是一张表,只是将表的数据均衡分摊到了不同的硬盘空间里,底层是由N个物理区块组成的。

分区的好处

  • 存储更多的数据。分区表的数据可以分布在不同的物理设备上,从而高效地利用多个硬件设备。相比单个磁盘或文件系统,可以存储更多的数据。
  • 优化查询。在使用where语句时,可以只扫描一个或者多个分区表来提交查询效率。
  • 分区表更容易维护

分区的局限

  • 一个表最多只能有1024个分区
  • 如果分区字段中含有主键或者唯一索引的列,那么主键列和唯一索引的列都必须要包含进来。
  • 分区表中无法使用外键约束。

# 水平分区

水平分区是对表的行进行分区。所有在表中定义的列都能在每个分区的数据集中找到,所以这个表的特性仍然是存在的。

例如,一个大学四年的成绩单,可以被分为四个不同的分区,每个分区中含有的数据集是每一年的成绩。(水平分区一定要按照某个属性列来分区,即这里分区的就是学年这个列)。

# 垂直分区

这种分区一般来说是通过对表的垂直划分来减少表的宽度,使某些特定的列被划分到了特定的分区。

例如,一个学院表中有学院标号、学院名称、院长、学院简章、学院历史等属性列。学院简章和学院历史数据列的每一行都含有text等大字段,但是又不会经常被访问到,所以就将这两个属性列划分到另一个分区,在保证它们数据相关性的同时还能提高访问速度。

# 分表

分表就是把一张表按照一定的规则分解成N个具有独立存储空间的实体表。

# 分库

数据分布在不同的数据库之中(数据量极大)。