1.分表,水平分表
分区和分表都是水平分表
通常指的是,通过应用程序层,将数据划分到不同的表中进行存储。对比分区,分区实在MySQL服务器层的分区算法。
分表,会导致客户端的明显改变。在服务器端,出现结构相同的多张表。
存在结构完全相同的多张表:是以时间作为划分的;
mysql> create table bill201903(
-> id int unsigned auto_increment primary key,
-> user_id int unsigned,
-> amount decimal(10, 2),
-> billtime int
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> create table bill201904(
-> id int unsigned auto_increment primary key,
-> user_id int unsigned,
-> amount decimal(10, 2),
-> billtime int
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> create table bill201905(
-> id int unsigned auto_increment primary key,
-> user_id int unsigned,
-> amount decimal(10, 2),
-> billtime int
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> create table billid(
-> id int unsigned auto_increment primary key
-> );
Query OK, 0 rows affected (0.02 sec)
由程序来决定数据该插入到哪个表。
需要考虑id的问题。要保证不能出现重复的账单id。
人为做一个自增的ID即可。利用memcached,redis先生成id,再插入。或者利用数据库,有一张专门用来创建billid,先生成再使用。
表甚至可以分布到不同的数据库服务器上。
2.分表的原因
- 数据库减压
- 分区的算法局限。(重要原因)
- 数据库支持不完善。分区5.1之后才支持的。
3.垂直分割
垂直分割,每个表的记录数量一致。但是字段不一致。
表之间的关系,典型的1:1的关系。
分割的依据,业务逻辑,在功能中常在一起使用的字段,分布到一个表中。
网友评论