云服务器内容精选

  • 算法计算方式 方式一:拆分键是整型 表1 拆分键是整型时的计算方式 条件 算法 举例 分库拆分键 ≠ 分表拆分键 分库路由结果 = 分库拆分键值 % 分库数 分表路由结果 = 分表拆分键值 % 分表数 分库 :16 % 8 = 0 分表:16 % 3 = 1 分库拆分键 = 分表拆分键(拆分键) 分表路由结果 = 拆分键值 % (分库数 * 分表数) 分库路由结果 = 分表路由结果 / 分表数 说明: 分库路由结果四舍五入到最接近的整数。 分表:16 % (8 * 3) = 16 分库 :16 / 3 = 5 方式二:拆分键是字符类型 表2 拆分键是字符型时的计算方式 条件 算法 举例 分库拆分键 ≠ 分表拆分键 分库路由结果 = hash(分库拆分键值) % 分库数 分表路由结果 = hash(分表拆分键值) % 分表数 hash(‘abc’)=‘abc’.hashCode()=96354 分库 :96354 % 8 = 2; 分表 :96354 % 3 = 0; 分库拆分键 = 分表拆分键(拆分键) 分表路由结果 = hash(拆分键值) % (分库数 * 分表数) 分库路由结果 =分表路由结果 / 分表数 说明: 分库路由结果四舍五入到最接近的整数。 hash(‘abc’)=‘abc’.hashCode()=96354 分表 :96354% (8 * 3) = 18 分库 :18 / 3=6
  • 建表语法 如果用户需要对ID列按MOD_HASH函数进行分库不分表: create table mod_hash_tb(id int,name varchar(30) DEFAULT NULL,create_time datetime DEFAULT NULL,primary key(id)) ENGINE = InnoDB DEFAULT CHARSET = utf8 dbpartition by mod_hash(ID); 如果用户需要对ID列按MOD_HASH函数进行既分库又分表: create table mod_hash_tb(id int,name varchar(30) DEFAULT NULL,create_time datetime DEFAULT NULL,primary key(id)) ENGINE = InnoDB DEFAULT CHARSET = utf8dbpartition by mod_hash(ID) tbpartition by mod_hash(ID) tbpartitions 4;
  • 建表语法 create table RIGHT_SHIFT(id int,name varchar(30) DEFAULT NULL,create_time datetime DEFAULT NULL,primary key(id)) ENGINE = InnoDB DEFAULT CHARSET = utf8dbpartition by RIGHT_SHIFT(id, 4)tbpartition by RIGHT_SHIFT(id, 4) tbpartitions 2;
  • 注意事项 DDM账户的基础权限base_authority只能通过控制台界面来修改。 DDM账户拥有逻辑库的任意表级权限或者库级权限,控制台界面就会展示已关联该逻辑库。 Create user只支持用户级权限。 删除逻辑库,删除表不会影响DDM账户的grant info权限信息。 用grant语法授权给DDM账户,命令如下所示: grant grant option on {用户级、库级别、表级别} to DDM账户 创建的DDM账户必须关联逻辑库才会给该账户赋权。
  • 权限项 DDM通过GRANT语句授权所支持的权限项如下: 权限类型 权限简述 ALL 所有权限 Drop 删除table Index 创建/删除index Alter 执行ALTER语句 Create 创建table Select 读取表内容 Insert 插入数据到表 Update 更新表中数据 Grant 授予用户权限 Revoke 删除用户权限 Set SET用户密码权限 File 从文件加载数据库权限 Create User 创建用户
  • 示例流程 图1 授权DDM权限流程 创建用户组并授权 在 IAM 控制台创建用户组,并授予关系型数据库只读权限“DDM ReadOnlyAccess”。 创建用户并加入用户组 在IAM控制台创建用户,并将其加入1中创建的用户组。 用户登录并验证权限 新创建的用户登录控制台,切换至授权区域,验证权限: 在“服务列表”中选择 分布式数据库 中间件服务,进入DDM主界面,单击右上角“购买分布式数据库中间件实例”,尝试购买分布式数据库中间件实例,如果无法购买分布式数据库中间件实例(假设当前权限仅包含DDM ReadOnlyAccess),表示“DDM ReadOnlyAccess”已生效。 在“服务列表”中选择除分布式数据库中间件服务外(假设当前策略仅包含DDM ReadOnlyAccess)的任一服务,若提示权限不足,表示“DDM ReadOnlyAccess”已生效。
  • 操作步骤 登录分布式数据库中间件控制台。 在实例管理列表页面,单击目标实例名称,进入实例基本信息页面。 在左侧导航栏选择“账号管理”,进入账号管理页面。 账号管理页面选择目标账号,在其操作栏单击“修改”。 在修改账号弹窗中,您可以修改密码有效期、关联逻辑库、账号权限及描述信息。 密码有效期,取值范围为0-65535的整数,单位为天。0表示密码永不过期。 图1 修改DDM账号 编辑完成账号信息后,单击“确定”,保存修改信息。
  • 算法计算方式 方式一:拆分键是整型 表1 拆分键是整型时的计算方式 条件 算法 举例 分库拆分键 ≠ 分表拆分键 分库路由结果 = 分库拆分键值 % 分库数 分表路由结果 = 分表拆分键值 % 分表数 分库 :16 % 8 = 0 分表:16 % 3 = 1 分库拆分键 = 分表拆分键(拆分键) 分表路由结果 = 拆分键值 % (分库数 * 分表数) 分库路由结果 = 分表路由结果 / 分表数 说明: 分库路由结果四舍五入到最接近的整数。 分表:16 % (8 * 3) = 16 分库 :16 / 3 = 5 方式二:拆分键是字符类型 表2 拆分键是字符型时的计算方式 条件 算法 举例 分库拆分键 ≠ 分表拆分键 分库路由结果 = hash(分库拆分键值) % 分库数 分表路由结果 = hash(分表拆分键值) % 分表数 hash(‘abc’)=‘abc’.toUpperCase().hashCode()=64578 分库 :64578 % 8 = 2; 分表 :64578 % 3 = 0; 分库拆分键 = 分表拆分键(拆分键) 分表路由结果 = hash(拆分键值) % (分库数 * 分表数) 分库路由结果 =分表路由结果 / 分表数 说明: 分库路由结果四舍五入到最接近的整数。 hash(‘abc’)=‘abc’.toUpperCase().hashCode()=64578 分表 :64578% (8 * 3) = 18 分库 :18 / 3=6
  • 建表语法 如果用户需要对ID列按MOD_HASH_CI函数进行分库不分表: create table mod_hash_ci_tb(id int,name varchar(30) DEFAULT NULL,create_time datetime DEFAULT NULL,primary key(id)) ENGINE = InnoDB DEFAULT CHARSET = utf8 dbpartition by mod_hash_ci(ID); 如果用户需要对ID列按MOD_HASH_CI函数进行既分库又分表: create table mod_hash_ci_tb(id int,name varchar(30) DEFAULT NULL,create_time datetime DEFAULT NULL,primary key(id)) ENGINE = InnoDB DEFAULT CHARSET = utf8dbpartition by mod_hash_ci(ID)tbpartition by mod_hash_ci(ID) tbpartitions 4;
  • MySQL EXPLAIN 当您在需要执行的SQL语句前加上EXPLAIN,然后执行SQL时,您将会看到其具体的执行计划,以此分析耗时,进而修改SQL,达到优化的效果。 表1 EXPLAIN列的解释 列名称 描述 table 显示该行数据所归属的表。 type 显示连接使用了何种类型。连接类型按照执行速度从快到慢排序为:const、eq_reg、ref、range、index、ALL。 possible_keys 显示可能应用在该表中的索引。 key 实际使用的索引。如果为NULL,则没有使用索引。个别情况下,MySQL会选择优化不足的索引。在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MySQL忽略索引。 key_len 使用的索引的长度。在不损失精确性的情况下,长度越短越好。 ref 显示索引被使用的列,通常为一个常数。 rows MySQL用来返回请求数据的行数。 Extra 关于MySQL如何解析查询的额外信息。
  • 操作步骤 登录分布式数据库中间件控制台。 在“参数模板”页面的“自定义”页签,选择一个用户创建的参数模板,单击“比较”。 您也可以在“参数模板”页面的“系统默认”页签,选择一个用户创建的参数模板进行比较。 选择不同参数模板,单击“确定”,比较两个参数模板之间的配置参数差异项。 图1 选择并比较参数模板 有差异项,则会显示差异参数模板的如下信息:参数名称、两个参数模板的参数值。 无差异项,则不显示。 图2 对比参数模板
  • DDL语法 拆分表和广播表不支持外键。 不支持修改分片字段(拆分键)。 不支持ALTER DATABASE Syntax。 不支持从另一张表创建新的拆分表、广播表。 create table不支持generated column语法。 不支持ALTER命令修改拆分键和全局序列字段。 不支持创建TEMPORARY类型的拆分表、广播表。 逻辑表名只允许字母(不区分大小写)数字以及下划线。 不支持CREATE TABLE tbl_name LIKE old_tbl_name。 不支持CREATE TABLE tbl_name SELECT statement。 不支持insert into on duplicate key update 更新拆分键值。 暂不支持跨Schema的DDL, 例如, CREATE TABLE db_name.tbl_name (… )。 使用MySQL关键字或保留字做表名、列名、索引名等标识符时,需要使用反引号扩起来。
  • DML语法 不支持PARTITION子句。 不支持UPDATE使用子查询。 不支持INSERT DELAYED Syntax。 不支持STRAIGHT_JOIN和NATURAL JOIN。 受限支持跨分片UPDATE多表需要join update的表需要有PK。 受限支持跨分片DELETE多表中的数据,需要Join delete的表需要有PK。 不支持SQL中对于变量的引用和操作。 例如: SET @c=1, @d=@c+1; SELECT @c, @d; INSERT或者UPDATE时,不支持插入或者更新拆分键值为DEFAULT关键字。 UPDATE不支持在一个语句中对同一字段重复更新。 UPDATE不支持关联更新拆分键。 UPDATE不支持自关联更新。 关联更新中,不支持在目标列的赋值语句或表达式中引用其它目标列,将造成更新结果不符合预期。 例如: update tbl_1 a,tbl_2 b set a.name=concat(b.name,'aaaa'),b.name=concat(a.name,'bbbb') on a.id=b.id; 当使用文本协议时,BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB数据必须转换成16进制数据。 DDM对非法数据的处理与后端MySQL的sql_mode有关。 关联更新不支持不带关联条件的Join。 SQL语句中表达式的因子数量请勿超过1000个。
  • 注释说明 单行注释 使用井号(#)开头,后面直接写注释内容。#后面的所有内容直到行尾都被视为注释。 示例如下: SELECT * FROM customers; #注释内容 使用两个连续的短划线(--),但这种注释要求第二个短划线后面至少有一个空格符,否则可能不会被正确解析。 示例如下: SELECT * FROM Product; -- 注释内容 多行注释 以/*开始并且以*/结束,可以包含多行文本。这种方式允许注释跨越多行。 示例如下: /* 注释内容*/SELECT DISTINCT product_id, purchase_price FROM Product;
  • 操作步骤 登录分布式数据库中间件控制台。 在实例管理列表页面,单击目标实例名称,进入实例基本信息页面。 单击“节点扩容”。如果您已经完成创建组操作,请在“组信息”模块中单击“操作”列的“节点扩容”。 在节点扩容页面,选择可用区和节点个数。 您可以单击操作列的“添加”,添加多个节点。一个DDM实例最多支持32个节点。 图1 节点扩容选择 设置完节点数,单击页面下方的“下一步”。 在规格确认页面,如果您需要重新修改节点数,请单击“上一步”,再次确认所选规格无误后,单击页面下方的“提交”,提交节点扩容任务。