分库分表

DRDS 在后端将数据量较大的数据表水平拆分到后端的每个 RDS 数据库中,这些拆分到RDS中的数据库被称为分库,分库中的表称为分表。DRDS 由每个分库负责每一份数据的读写操作,从而有效的分散了整体访问压力。

拆分键

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

全表扫描

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

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

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

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

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

 

建表

您在手工建表的时候需要指定几个关键参数:

1) DBPARTITION BY hash(partition_key): 指定分库键和分库算法

2) TBPARTITION BY(可选): 默认与DBPARTITION相同 指定数据与物理表使用什么方式进行映射(指定分表键)

3) TBPARTITIONS(可选): 每个库上的物理表数目(默认为1),如您无需分表,则无需指定该字段

4) BROADCAST(与DBPARTITION BY互斥): 指定建广播表

示例

如果您希望建一个分表,每个库含有3张物理表,切分方式为库按照id列进行哈希,物理表按照id2列进行哈希(会根据id列的值进行hash运算后的结果将表中数据分布在多个子库中,每个子库中的数据再根据id2列值的hash运算结果分布在3个物理表中)

CREATE TABLE multi_db_multi_tbl
(id int auto_increment, id2 int, name varchar(30), primary key(id))
dbpartition by hash(id) tbpartition by hash(id2) tbpartitions 3;

除了可以使用哈希来做映射策略,还可以使用日期类策略MM/DD/WEEK/MMDD来进行映射,但只限于对物理表的映射时可用,这种方式大部分用于将不同的日期的数据进行物理表集中,如业务员操作日志。

公司A的日志系统记录营业员进行的所有操作,按照营业员id以及按照一周七天来切分

CREATE TABLE user_log
(userId int, name varchar(30), operation varchar(30), actionDate DATE)
dbpartition by hash(userId) tbpartition by WEEK(actionDate) tbpartitions 7;

SQL大类的限制与约束

  • 暂不支持用户自定义数据类型、自定义函数
  • 暂不支持视图、存储过程、触发器、游标
  • 暂不支持类似 BEGIN…END,LOOP...END LOOP,REPEAT...UNTIL...END REPEAT,WHILE...DO...END WHILE 等的复合语句
  • 暂不支类似 IF,WHILE 等流程控制类语句
  • 全面的DML支持,有限的DDL支持,有限的控制指令支持

不支持的语法:

  • 受限于分布式事务

    • 跨分片操作, UPDATE/DELETE [ORDER BY] LIMIT
    • 跨分片操作, UPDATE A,B set A.s = B.s+1 WHERE A.ID = B.NAME , 非拆分字段之间的跨库JOIN
    • 拆分键变更, UPDATE A SET A.ID = 1 WHERE XXX, ID为拆分字段
    • 跨分片操作, INSERT A SELECT B WHERE B.ID > XX , 跨库导入导出数据
    • 跨库事物, 比如两次UPDATE不在一个分片上
  • 子查询限制
    • 暂不支持非where条件的correlate subquery
    • 暂不支持sql中带聚合条件和correlate subquery
 

DRDS自定义指令

  • SHOW SEQUENCES / CREATE SEQUENCE / ALTER SEQUENCE / DROP SEQUENCE 【全局sequence管理】
  • SHOW PARTITIONS FROM TABLE 【查询表的拆分字段】
  • SHOW TOPOLOGY FROM TABLE 【查询表的物理拓扑】
  • SHOW BRAODCASTS 【查询所有广播表】
  • SHOW RULE [FROM TABLE] 【查询表拆分定义】
  • SHOW DATASOURCES 【查询后端DB链接池定义】
  • SHOW DBLOCK / RELEASE DBLOCK 【分布式LOCK定义】
  • SHOW NODE 【查询读写库流量】
  • SHOW SLOW 【查询慢SQL列表】
  • SHOW PHYSICAL_SLOW 【查询物理DB执行慢SQL列表】
  • TRACE SQL_STATEMENT / SHOW TRACE 【跟踪SQL执行,profile整个执行过程】
  • EXPLAIN [DETAIL/EXECUTE] SQL_STATEMENT 【分析DRDS执行计划和物理DB上的执行计划】
  • RELOAD USERS 【同步DRDS控制台用户信息到DRDS SERVER】
  • RELOAD SCHEMA 【清理DRDS对应DB库数据缓存,比如SQL解析/语法树/表结构缓存】
  • RELOAD DATASOURCES 【重建后端与所有DB的链接池】

读写分离

DRDS的读写分离功能是一种对应用透明的读写分离实现,应用在不需要修改任何代码的情况下,只需要在DRDS控制台中调整读权重,即可将流量按照需要的比例在主实例与多达5个只读实例之间调整。写权重则统一走主实例,不分流。

落到只读实例上读所操作的数据都是从主实例上异步同步的,延迟在毫秒级别,所以个别要求实时性的SQL请通过DRDS hint 指定主库执行。

DRDS的读写分离指的是对事务外的查询请求做读写分离, 事务中出现写请求后, 当次事务中所有读请求会走到主库,而不会按照设置的读写分离权重

阿里云-DRDS(转)的更多相关文章

  1. 跨时代的分布式数据库 – 阿里云DRDS详解(转)

    原文章地址:https://www.csdn.net/article/a/2015-08-28/15827676 跨时代的分布式数据库 – 阿里云DRDS详解 发表于2015-08-28 18:39| ...

  2. 数据库分库分表容量划分建议参考阿里云DRDS原则

    做分库分表的时候 一直想知道分库分表容量的最优规则有什么好的建议,以下是参考阿里云 DRDS 分库分表的规则,还是有一定的参考意义 .

  3. 阿里云DRDS:分布式数据库服务

    最近在做阿里云相关的项目,用到阿里的很多接口服务的API,于是想把这段项目做个总结,顺便梳理下阿里云的云计算的相关知识点. DRDS:分布式数据库服务. 1.相关术语 DRDS(Distribute  ...

  4. 转- 阿里云、Amazon、Google云数据库方案架构与技术分析

    「一切都会运行在云端」. 云时代早已来临,本文着眼于顶级云服务商云服务商的云数据库方案背后的架构,以及笔者最近观察到的一些对于云数据库有意义的工业界的相关技术的进展,希望读者能有所收获. 现在越来越多 ...

  5. 阿里云产品介绍(三):云数据库RDS

    写完云服务器ECS,本来想先写负载均衡的. 因为发现很多客户,都是直接将单台云服务器应用对外提供访问,如果云服务器宕机,应用就会停止服务.云服务器标称有99.95%的可用率,一年下来宕机四个多小时也是 ...

  6. 【IT名人堂】何云飞:阿里云数据库的架构演进之路

    [IT名人堂]何云飞:阿里云数据库的架构演进之路 原文转载自:IT168 ​ 如果说淘宝革了零售的命,那么DT革了企业IT消费的命.在阿里巴巴看来,DT时代,企业IT消费的模式变成了“云服务+数据”, ...

  7. 基于阿里云的JavaEE系统框架介绍

    基于阿里云的系统框架展望 1) CDN 用于缓存静态文件等等.七牛和阿里的都还可以. 七牛要做的久一点,各种图片处理的接口要完善一些 阿里的CDN要稍微好一点点,但是没有不安全的访问方式,访问稍微没有 ...

  8. 阿里云重磅发布DMS数据库实验室 免费体验数据库引擎

    2月27日,阿里云数据管理DMS发布年度巨献——数据库实验室,用户可在该实验室环境下免费体验数据库引擎.以及DMS各项产品功能.数据库实验室是DMS所提供的体验空间,免费赠送数据库引擎资源. 用户只需 ...

  9. 在阿里云上遇见更好的Oracle(二)

    从上一篇文章的反馈来看,大家还是喜欢八卦多过技术细节,那这一篇继续一些题外话,说说我对“去IOE”的看法. 对同一件事情,参与的没参与的人,讨论起来,都会有各自的立场.所以这里先申明一下,以下内容只是 ...

随机推荐

  1. 如何将DB2的数据库转换到mySQL中?

    经过几次尝试最终找到解决的办法,因为网上并没有详细说明,所以下面我将详细的步骤记录如下: 1. 大前提是你已经安装好DB2服务器和mySQL服务器,现在只是借用Navicat for MySQL这个软 ...

  2. Memcached和Memcache 配置教程windows X64

    一.Memcached和Memcache的区别: 网上关于Memcached和Memcache的区别的理解众说纷纭,我个人的理解是: Memcached是一个内存缓存系统,而Memcache是php的 ...

  3. nyoj-659-推断三角形(大坑)

    推断三角形 时间限制:1000 ms  |  内存限制:65535 KB 难度: 描写叙述 小明非常喜欢研究三角形.如今,小明已经知道三角形的三条边.假设三条边能组成三角形,小明就会非常高兴,他就会得 ...

  4. 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(八)

    [重构](续) 牌的表示: 一副牌有52张,可用一整数数组描述.但是由于在游戏过程中牌数在不断减少,所以用一表示剩余张数的整数和一整数数组共同描述.C99支持一种变量长度数组,但用在这里并没有什么特别 ...

  5. Javascript高级程序设计-对象

    学习Javascript,最难的地方是什么? Object(对象)最难,初学者不容易掌握. Javascript是一种基于对象(object-based)的语言,它的语法中没有class(类). C# ...

  6. HTTP和Socket的区别

    1: HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用. HTTP ...

  7. 动态SQL(学习笔记)

    动态SQL EXECUTE IMMEDIATE 动态SQL字符串 [BUCK COLLECT] INTO 自定义的变量,,|记录类型 USING [IN |OUT|IN OUT]绑定的参数] [RET ...

  8. Java从零开始学七(选择结构)

    一. 程序的结构: 一般来说程序的结构包含有下面三种: 1.顺序结构 2.选择结构 3.循环结构 二.顺序结构 程序至上而下逐行执行,一条语句执行完之后继续执行下一条语句,一直到程序的末尾

  9. 如何添加EXEStealth 2.5x 壳

    http://tools.pediy.com/packers.htm 1 2 3 4 5 分步阅读 Exe加壳,避免被破解逆向.是开发的必备.. 工具/原料 EXEStealth 方法/步骤   查壳 ...

  10. vue 源码 断点调试

    1.添加sourceMap sourceMap: true 2.npm run dev 会生成vue.js.map 3.断点调试 <!DOCTYPE html> <html> ...