阅读823 返回首页    go 微信


DRDS分库分表__开发手册_分布式关系型数据库 DRDS-阿里云

分库分表在 DRDS 里面是一个很重要的概念。DRDS 在后端将数据量较大的数据表水平拆分到后端的每个 RDS 数据库中,这些拆分到RDS中的数据库被称为分库,分库中的表称为分表。DRDS 由每个分库负责每一份数据的读写操作,从而有效的分散了整体访问压力。在系统扩容时,只需要水平增加分库的数量,并且迁移相关数据,就可以提高 DRDS 系统的总体容量。

分库分表相关概念

拆分键

即分库/分表字段。 DRDS 根据拆分键的值将数据表水平拆分到后端的每一个 RDS 分库里。换句话说,键值相同的数据,一定会位于同一个 RDS 数据库里。DRDS 里除了可以定义分库键以外,每一张逻辑表都可以定义自己的拆分键。拆分键暂时只能是单个字段。如果分库键与分表键相同,那么在插入时只需要指定该分库/分表键。如果分库键与分表键不同则在插入时需要同时指定分库键和分表键。

全表扫描

复杂的SQL语句会分发到所有库上执行,并且在 DRDS 中进行比较和合并。全表扫描相当消耗性能,应该在业务中尽量避免。

DML例子

1) 在 INSERT / REPLACE 语句中必须包含分库分表的字段(拆分键)。例如:

拆分字段是id

  1. INSERT INTO table VALUES (‘name1’, ‘value2’)
  2. 报错
  1. INSERT INTO table (id, name, value) VALUES (1, ‘name1’, ‘value2’)
  2. 允许执行

3) SELECT / UPDATE / DELETE 语句如果 WHERE条件中没有包含拆分字段,则会进行全表扫描。

举例:分库分表键是id + date.

  1. SELECT * FROM table
  2. 会进行全表扫描
  1. SELECT * FROM table WHERE date > 3
  2. 会进行全表扫描
  1. SELECT * FROM table WHERE id = 1;
  2. 会路由到id为1的分库
  1. SELECT * FROM table WHERE id = 1 AND date > 3;
  2. 进行路由计算

4) 同一个拆分字段,AND 连接的条件个数只能为2,OR 连接的条件个数不限。

举例:拆分键是date.

  1. SELECT * FROM table WHERE date > ‘2014/1/30’ AND date < ‘2014/3/1’;
  2. 正确,date 字段 AND 连接的条件个数是 2。
  1. SELECT * FROM table WHERE date > ‘2014/1/30’ AND date < ‘2014/3/1’ AND date < ‘2014/2/28’;
  2. 错误,date 字段 AND 连接的条件个数是 3

注意 对于WHERE条件中的整型拆分字段,DRDS会对条件进行合并,如

  1. SELECT * FROM table WHERE id > 1 and id < 5 and id < 3
  2. 不会出错,DRDS会调整为
  3. SELECT * FROM table WHERE id > 1 and id < 3

5) 同一个拆分字段的条件可以包含多个值,但每个值只能对应一种比较关系。

举例:拆分键是date.

  1. SELECT * FROM table WHERE date > ‘2014/1/30’ AND date < ‘2014/3/1’;
  2. 正确,date 字段两个条件的值分别是 ‘2014/1/30’ 和 ‘2014/3/1’。
  1. SELECT * FROM table WHERE date > ‘2014/1/30’ AND date < ‘2014/1/30’
  2. 错误,date 字段的条件值 ‘2014/1/30’ 同时对应了大于和小于关系。

最后更新:2016-11-23 17:31:30

  上一篇:go DRDS控制指令__开发手册_分布式关系型数据库 DRDS-阿里云
  下一篇:go DRDS DDL语句__开发手册_分布式关系型数据库 DRDS-阿里云