SCTL 涅槃重生:投入 RAL 的怀抱
在《DistSQL:像数据库一样使用 Apache ShardingSphere》一文中,PMC 孟浩然为大家介绍了 DistSQL 的设计初衷和语法体系,并通过实战操作展示了一条 SQL 创建分布式数据库表的强大能力,展现了 Apache ShardingSphere 在新形态下的交互体验。
近期,ShardingSphere 社区对 SCTL 语法和执行引擎进行了重构,使 SCTL 完全投入 DistSQL 语法体系的怀抱,将原 SCTL 功能融入到 RAL 语法中,使 ShardingSphere 管理语言更加统一。本文将带领读者深入了解这次重构的意义,并通过实例一一解析新的 RAL 语句,感受 ShardingSphere 让用户体验更加美好的追求态度。
作者简介
前情回顾:什么是 RAL
- RDL(Resource & Rule Definition Language)负责资源和规则的创建、修改和删除;
- RQL(Resource & Rule Query Language)负责资源和规则的查询和展现;
- RAL(Resource & Rule Administration Language)提供对资源和规则的高级控制能力。
什么是 SCTL
|
语句
|
说明
|
|
sctl:set transaction_type=XX
|
修改当前连接的事务类型, 支持 LOCAL,XA,BASE。例:sctl:set transaction_type=XA
|
|
sctl:show transaction_type
|
查询当前连接的事务类型
|
|
sctl:show cached_connections
|
查询当前连接中缓存的物理数据库连接个数
|
|
sctl:explain SQL
|
查看逻辑 SQL 的执行计划,例:sctl:explain select * from t_order;
|
|
sctl:hint set PRIMARY_ONLY=true
|
针对当前连接,是否将数据库操作强制路由到主库
|
|
sctl:hint set DatabaseShardingValue=yy
|
针对当前连接,设置 hint 仅对数据库分片有效,并添加分片值,yy:数据库分片值
|
|
sctl:hint addDatabaseShardingValue xx=yy
|
针对当前连接,为表 xx 添加分片值 yy,xx:逻辑表名称,yy:数据库分片值
|
|
sctl:hint addTableShardingValue xx=yy
|
针对当前连接,为表 xx 添加分片值 yy,xx:逻辑表名称,yy:表分片值
|
|
sctl:hint clear
|
针对当前连接,清除 hint 所有设置
|
|
sctl:hint show status
|
针对当前连接,查询 hint 状态,primary_only:true/false,sharding_type:databases_only/databases_tables
|
|
sctl:hint show table status
|
针对当前连接,查询逻辑表的 hint 分片值
|
为何重构
重构解析
|
调整前
|
调整后
|
|
sctl:set transaction_type=XX
|
set variable transaction_type=XX
|
|
sctl:show transaction_type
|
show variable transaction_type
|
|
sctl:show cached_connections
|
show variable cached_connections
|
|
sctl:explain SQL
|
preview SQL
|
|
sctl:hint set PRIMARY_ONLY=true
|
set readwrite_splitting hint source = [auto / write]
|
|
sctl:hint set DatabaseShardingValue=yy
|
set sharding hint database_value = yy;
|
|
sctl:hint addDatabaseShardingValue xx=yy
|
add sharding hint database_value xx= yy;
|
|
sctl:hint addTableShardingValue xx=yy
|
add sharding hint table_value xx = yy
|
|
sctl:hint clear
|
clear [hint / sharding hint / readwrite_splitting hint]
|
|
sctl:hint show status
|
show [sharding / readwrite_splitting] hint status
|
|
sctl:hint show table status
|
归入 【show sharding hint status】
|
show variable transaction_type
- 输入命令
mysql> show variable transaction_type;
- 输出效果
+------------------+
| TRANSACTION_TYPE |
+------------------+
| LOCAL |
+------------------+
set variable transaction_type
- 输入命令
- 输出效果
show variable cached_connection
- 输入命令
mysql> show variable cached_connections;
- 输出效果
+--------------------+
| CACHED_CONNECTIONS |
+--------------------+
| 0 |
+--------------------+
preview SQL
- 输入命令
mysql> preview select * from t_order;
- 输出效果
+-----------------+----------------------------------------------+
| datasource_name | sql |
+-----------------+----------------------------------------------+
| read_ds_0 | select * from t_order ORDER BY order_id ASC |
| read_ds_1 | select * from t_order ORDER BY order_id ASC |
+-----------------+----------------------------------------------+
rules:
- !READWRITE_SPLITTING
dataSources:
ds_0:
writeDataSourceName: write_ds_0
readDataSourceNames:
- read_ds_0
ds_1:
writeDataSourceName: write_ds_1
readDataSourceNames:
- read_ds_1
- !SHARDING
tables:
t_order:
actualDataNodes: ds_${0..1}.t_order
defaultDatabaseStrategy:
standard:
shardingColumn: user_id
shardingAlgorithmName: database_inline
defaultTableStrategy:
none:
shardingAlgorithms:
database_inline:
type: INLINE
props:
algorithm-expression: ds_${user_id % 2}
show readwrite_splitting hint status
- 输入命令
mysql> show readwrite_splitting hint status;
- 输出效果
+--------+
| source |
+--------+
| auto |
+--------+
set readwrite_splitting hint source
- AUTO:读写分离自动路由
- WRITE:强制路由到主库
- 输入命令
mysql> set readwrite_splitting hint source=write;
- 输出效果
mysql> preview select * from t_order;
+-----------------+----------------------------------------------+
| datasource_name | sql |
+-----------------+----------------------------------------------+
| write_ds_0 | select * from t_order ORDER BY order_id ASC |
| write_ds_1 | select * from t_order ORDER BY order_id ASC |
+-----------------+----------------------------------------------+
clear readwrite_splitting hint
- 输入命令
mysql> clear readwrite_splitting hint;
- 输出效果
rules:
- !SHARDING
tables:
t_order_item:
actualDataNodes: ds_${0..1}.t_order_item_${0..1}
databaseStrategy:
hint:
shardingAlgorithmName: database_inline
tableStrategy:
hint:
shardingAlgorithmName: table_inline
shardingAlgorithms:
database_inline:
type: HINT_INLINE
props:
algorithm-expression: ds_${Integer.valueOf(value) % 2}
table_inline:
type: HINT_INLINE
props:
algorithm-expression: t_order_item_${Integer.valueOf(value) % 2}
show sharding hint status
- 输入命令
mysql> show sharding hint status;
- 输出效果

- 验证查询路由,输入命令
preview select * from t_order_item;
- 输出效果

set sharding hint database_value;
- 输入命令
mysql> set sharding hint database_value = 1;
- 输出效果


add sharding hint database_value;
- 输入命令
mysql> add sharding hint database_value t_order_item = 5;
- 输出效果


- 再次输入 add 命令,添加一个偶数值
mysql> add sharding hint database_value t_order_item = 10;
- 输出效果:


add sharding hint table_value;
- 输入命令
mysql> add sharding hint table_value t_order_item = 0;
- 输出效果


clear sharding hint
- 输入命令
mysql> clear sharding hint;
输出效果

clear hint
- 任意设置 hint 值,再执行命令
mysql> clear hint;
- 输出效果
更多 RAL 语句
结语

欢迎关注公众号第一时间了解咨讯
SCTL 涅槃重生:投入 RAL 的怀抱的更多相关文章
- 魏永明: MiniGUI的涅槃重生之路
本文系转载,著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 魏永明 来源: 微信公众号linux阅码场(id: linuxdev) 本文背景 MiniGUI是最负盛名的 ...
- Pandoanload涅槃重生,小白羊重出江湖?
Pandoanload涅槃重生,小白羊重出江湖? 科技是把双刃剑,一方面能够砸烂愚昧和落后,另一方面也可能带给人类无尽的灾难. 原子物理理论的发展是的人类掌握了核能技术但是也带来了广岛和长崎的核灾难, ...
- 投入机器学习的怀抱?先学Python吧
前两天写了篇文章,给想进程序员这个行当的同学们一点建议,没想到反响这么好,关注和阅读数都上了新高度,有点人生巅峰的感觉呀.今天趁热打铁,聊聊我最喜欢的编程语言——Python. 为什么要说Python ...
- 投入Html5的怀抱,最近在研究的Egret
html5没有办法不关注,实在太火热了,几年前还不行,如今确是环境较好,typescript语言很好学习,可能基于之前的基础,不到一个星期就基本上差不多了,虽然还有一些小问题,但那都是经验积累下来可以 ...
- 垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
Delphi 是一个基本上被我遗忘的工具, 要不是在使用RapidSql , 我是收不到Embarcadero 公司发出的邀请来參加Delphi XE5的公布会的. 有人可能要问为什么是Embarca ...
- 垂死或涅槃重生 -- Delphi XE5 我们将宣布感情的回归
Delphi 在很大程度上是一个被遗忘我的工具. 无论是在使用RapidSql , 我还没有收到Embarcadero 本公司发行参与邀请Delphi XE5该公告将. 可能有人会问,为什么Embar ...
- 投入OJ的怀抱~~~~~~~~~~
OpenJudge C20182024 信箱(1) 账号 修改设定 退出小组 管理员 frank 林舒 Dzx someone 李文新 公告 11-05 程序设计与算法(大学先修课) 成员(61910 ...
- 如何在 ShardingSphere 中开发自己的 DistSQL
在<DistSQL:像数据库一样使用 Apache ShardingSphere>和<SCTL 涅槃重生:投入 RAL 的怀抱>中,已经为大家介绍了 DistSQL 的设计初衷 ...
- 已经被cocos2dx给折腾的想要放弃它,专注Unity3D的怀抱了!
一直使用cocos2dx编写自己的2D小游戏,不得不说,编写个人的超级小规模的游戏,使用cocos2dx有一定的优势,首先门槛很低,编写2D游戏用起来也算顺手,可惜一直没有一个优秀的UI编辑器,好不容 ...
随机推荐
- Django+Nginx+Uwsgi(全网最全步骤工作原理流程与部署历程)
一.必要前提 1.1 准备知识 django 一个基于python的开源web框架,请确保自己熟悉它的框架目录结构. uWSGI 一个基于自有的uwsgi协议.wsgi协议和http服务协议的web网 ...
- ldirectord
试想,LVS作为前端负载均衡设备,当后端服务器宕机时,LVS还会把用户请求发送到该服务器上,这对用户体验来说是极其糟糕的,因为用户的请求无法得到处理.那么是否有一种机制,能保证后端服务器的是否正常?或 ...
- linux kill信号详解
大家对kill -9 肯定非常熟悉,在工作中也经常用到.特别是你去重启tomcat时.可是多半看来,我们对-9的理解只是表面而已. 很少有人(包括我)认真的去了解一下 kill -n 这个n到底是什么 ...
- Winform同步调用异步函数死锁原因分析、为什么要用异步
1.前言 几年前,一个开发同学遇到同步调用异步函数出现死锁问题,导致UI界面假死.我解释了一堆,关于状态机.线程池.WindowsFormsSynchronizationContext.Post.co ...
- 2020年09月15日-项目开发-python二次处理代码文件
Caterpillar通过将BPMN生成为solidity代码后, 我需要对solidity代码做二次处理,即在其中的特定函数中插入event类型,以便去做事件监听. 最终生成的不仅包括solidit ...
- Coursera Deep Learning笔记 序列模型(一)循环序列模型[RNN GRU LSTM]
参考1 参考2 参考3 1. 为什么选择序列模型 序列模型能够应用在许多领域,例如: 语音识别 音乐发生器 情感分类 DNA序列分析 机器翻译 视频动作识别 命名实体识别 这些序列模型都可以称作使用标 ...
- Sequence Model-week2编程题1-词向量的操作【余弦相似度 词类比 除偏词向量】
1. 词向量上的操作(Operations on word vectors) 因为词嵌入的训练是非常耗资源的,所以ML从业者通常 都是 选择加载训练好 的 词嵌入(Embedding)数据集.(不用自 ...
- [软工顶级理解组] Beta阶段测试报告
在测试过程中发现了多少Bug? 测试阶段发现并已修复的bug: 尚且存在,但是难以解决或者不影响使用的bug: 计算重修课程的时候,如果重修课程的课程号和原课程号不同,则GPA计算会出现误差.但我们无 ...
- elf文件--基于《ctf竞赛权威指南pwn篇》
1.ELF概念: ELF(Executable and Linkable Format),即"可执行可链接格式",最初由UNIX系统实验室作为应用程序二进制接口(Applicati ...
- 热身训练4 Article
Article 在这个学期即将结束时,DRD开始写他的最后一篇文章. DRD使用著名的Macrohard的软件World来写他的文章. 不幸的是,这个软件相当不稳定,它总是崩溃. DRD需要在他的文章 ...