DRDS 简明教程 Ver 1.04
DRDS 简明教程
Ver 1.04
版本
1.00
1.01
内容
创建
人员
日期
姜元东
2015-01-09
增 加 跨 库 及 单
姜元东
2015-01-12
库事务的代码
1.01
增加原理简介,
姜元东
2015-01-12
引 用 阿 里 长 源
的文档
1.02
增 加 示 意 图 及
姜元东
2015-01-13
更正乱码
1.03
增加 Druid 连接
姜元东
2015-01-19
池 demo , 增 加
FAQ
1.04
增加 druid 数据
姜元东
2015-03-03
源 从 配 置 文 件
中读取用户名、
密码的方式;增
加 对 数 据 源 进
行监控的配置
1
DRDS 简明教程 Ver 1.04
目 录
1. 原理简介................................................................................................5
1.1. 分库........................................................................................... 5
1.2. 拆分键....................................................................................... 6
1.3. 全表扫描................................................................................... 6
1.4. 单个字段分库分表................................................................... 6
1.5. 多个字段分库分表................................................................... 7
2. 前提......................................................................................................10
3. 数据库配置情况................................................................................. 10
3.1. RDS 实例.................................................................................. 10
3.2. DRDS 实例................................................................................ 11
3.3. DRDS 分库情况........................................................................ 11
3.4. 建表..........................................................................................11
3.5. 使用 mysql 命令行连接数据库.............................................12
3.6. 建立 java 工程连接数据库...................................................12
3.6.1. 使用 Eclipse 建立 maven 工程。.............................12
3.6.2. Pom 的配置.................................................................. 13
3.6.3. 主要的 java 代码.......................................................14
3.6.4. 执行结果截图.............................................................16
3.6.5. 单库事务成功及跨库事务失败演示.........................16
4. 其他 demo............................................................................................ 18
2
DRDS 简明教程 Ver 1.04
4.1. 使用 Druid 数据库连接池.....................................................18
4.1.1. pom 工程文件..............................................................18
4.1.2. applicationContext.xml.........................................21
4.1.3. App.java..................................................................... 26
4.1.4. JdbcTemplateTestItem.java...................................27
5. Druid 数据库连接池从配置文件中读取配置信息..........................28
5.1. 配置文件内容......................................................................... 28
5.2. 在 spring 中的配置...............................................................29
6. 在 web 工程中监控 Druid 数据源的状态.........................................29
6.1. 在 web.xml 中的配置............................................................29
6.2. web 工程在 tomcat 中启动后查看监控................................30
7. DRDS FAQ..............................................................................................31
7.1. 什么是小表广播?................................................................. 31
7.2. 什么是异构索引?................................................................. 31
7.3. DRDS 的记录数上限参考?....................................................32
7.4. 关于 DRDS 的开发,使用 Druid 做连接池...........................32
7.5. 关于使用 DRDS 统计分析的解决方案...................................32
7.6. 关于 DRDS 的数据安全问题...................................................33
7.7. 关于 DRDS 的并发连接数.......................................................33
7.8. DRDS 的切分原则是什么?....................................................34
7.9. XA 事务能不能支持(分布式事务如何处理)?................... 35
7.10. DRDS 是否支持分布式 join 以及复杂 SQL 如何支持?... 36
3
DRDS 简明教程 Ver 1.04
7.11. 什么是全局唯一 ID?..........................................................38
7.12. 什么是数据水平切分?.......................................................38
7.13. 什么是平滑扩容?...............................................................39
7.14. 详解全表扫描....................................................................... 39
7.15. DRDS 支持的 SQL 语法有哪些?..........................................41
7.16. DRDS 的 hint 支持................................................................ 43
7.16.1. 手工指定 SQL 语句的拆分键.................................43
7.16.2. 用待定参数(?)作为 Hint 参数........................44
7.17. 如何接入 DRDS?.................................................................. 44
7.18. 如何在 drds 中使用 sequence?..........................................46
适逢阿里云公测,DRDS 是阿里在 TDDL 组件上发展而来的分布式
数据库解决方案。
适用对象:熟悉 java JDBC 开发,maven, eclipse 的人员。
4
DRDS 简明教程 Ver 1.04
1. 原理简介
DRDS 访问示意图
1.1. 分库
分库分表在 DRDS 里面是一个很重要的概念。DRDS 在后端
将数据表水平拆分到后端的每个 RDS 数据库中,这些数据
库被称为分库,对应的表称为分表。 DRDS 由每个分库负责
每一份数据的读写操作,从而有效的分散了整体访问压力。
在系统扩容时,只需要水平增加分库的数量,并且迁移相关
数据,就可以提高 DRDS 系统的总体容量。
5
DRDS 简明教程 Ver 1.04
1.2. 拆分键
即分库/分表字段。 DRDS 根据拆分键的值将数据表水平拆分到后端
的每一个 RDS 分库里。换句话说,键值相同的数据,一定会位于同
一个 RDS 数据库里。DRDS 里的每一张分表都可以定义自己的拆分
键,拆分键可以是单个字段,也可以是多个字段的组合。
1.3. 全表扫描
复杂的 SQL 语句会分发到所有库上执行,并且在 DRDS 中进行比
较和合并。全表扫描相当消耗性能,应该在业务中尽量避免。
1.4. 单个字段分库分表
t_item 表的分布键是 sellerid.
1) 在 INSERT / REPLACE 语句中必须包含分库分表的字段
(拆分键)。例如:
insert into t_item (product_id) values(11);
返回错误信息:Error Code: 3009. optimize error by
insert not support muti tables。
insert into t_item (sellerid,product_id) values(1,11);
允许执行。 1 row(s) affected
6
DRDS 简明教程 Ver 1.04
2) SELECT / UPDATE/ DELETE 语句如果 WHERE 条件中没有
包含拆分键,会进行全表扫描。 但如果表本身没有设置
为允许全表扫描,则报错。
update t_item set product_id=77 where product_id=1 ;
返回错误信息:Error Code: 3009. sql contain no sharding
column:[[sellerId]] , maybe you can set
allowFullTableScan。
1.5. 多个字段分库分表
1) SELECT / UPDATE / DELETE 语句如果 WHERE 条件中没有包含拆分字段,或
者带的拆分字段不全,会进行全表扫描;SQL 必须包含全部拆分键,才会进
行路由计算。
举例:拆分键是 id + date.
SELECT * FROM table WHERE id = 1 AND date > 3;
7
DRDS 简明教程 Ver 1.04
进行路由计算。
SELECT * FROM table WHERE id = 1;
需要进行全表扫描。
2) SELECT / UPDATE / DELETE 语句如果在 WHERE 条件中带有全部拆分字段,
——则拆分字段之间的逻辑关系一定是 AND, 不支持 OR; 对于同一个拆分
字段的条件组合,用 AND 或者 OR 都是支持的。
举例:拆分键是 id + date.
SELECT * FROM table WHERE id = 1 AND date > ‘2014/1/30’;
AND ——正确组合。
SELECT * FROM table WHERE id = 1 OR date > ‘2014/1/30’;
OR ——错误组合。
SELECT * FROM table WHERE id > 1 AND date > ‘2014/1/30’ AND date
< ‘2014/3/1’;
AND ——正确组合。
8