Skip to Content
Rwrouter管理功能SQL自定义路由

SQL自定义路由

UDB读写分离中间件支持SQL自定义路由功能。 通过两种方式, 可以将一条SQL,指定路由到主节点或者某个从节点。

方式1:SQL模板

可以通过以下中间件自定义SQL,为中间件配置SQL路由规则:

1.插入路由规则

命令格式:

uinsert sql_route("sql_stmt" : "route_dest")

参数说明:

sql_stmt: 即sql模板,常量替换成?后的sql语句; 比如: select * from t where id=? / call proc1等。 其中,proc1为存储过程的名字。

route_dest:路由目的地,取值有all、master、slave以及udb_id,其中

  • all:路由到全部节点,路由比例由控制台上的 读模式 来控制

  • master: 只路由到主节点

  • slave: 只路由到从节点。 路由比例,由控制台上的 读模式 来控制(去除主节点的比例

  • udb_id:路由到指定udb上

特别说明:

  • sql_stmt 与route_dest” 之间的字符为 ’:’ 号 而不是 ’,’ 号。

  • SQL模板的结构,和实际SQL语句的结构,必须完全一致。假如SQL模板为:select money from t_account where uid=? and name=?则业务发起SQL, 必须保证where查询条件中的uid在前, name在后。 否则中间件会认为结构和SQL模板不一样的SQL

样例:

uinsert sql_route("select * from t where id=?" : "master");

作用: 指定sql语句路由到 master节点

uinsert sql_route("call proc1" : "all");

作用: 指定将某种类型的call存储过程语句, 路由到 all/master/slave 节点

uinsert sql_route("call proc1" : "udbha-123qwe");

作用: 指定路由到udb节点

2.查询路由规则

命令格式:

ushow all_sql_route

作用: 查看目前已配置的路由规则

参数: 无

返回:

rule_id: 路由规则id,

sql_stmt: sql模板

sql_md5: sql模板MD5加密产生的字符串

route_dest: 路由目的地

3.删除路由规则

命令格式:

udelete sql_route("rule_id": "id");

参数说明:

id: 路由规则id,即ushow all_sql_route命令返回的rule_id值

样例:

udelete sql_route("rule_id":"1");

方式2:SQL Hints

对于Select语句, 可以在SQL前面的注释中,增加forcemater, forceslave命令, 来指定将该Select SQL路由主节点, 或者某个从节点。举例:

/*force_master*/ select money from t_account where uid="tony";

该语句将被路由到主节点

/*force_slave*/ select money from t_account where uid="tony";

该语句将被路由到某个节点

注意:注释必须为: /* */, #和—类型的SQL不具备该功能。