我是靠谱客的博主 潇洒羊,最近开发中收集的这篇文章主要介绍mysql表分片语法,分布式事务数据库HotDB的HINT特色语法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在计算节点使用HINT语法,可绕过HotDB Server解析器,直接在指定数据节点上执行MySQL的任意SQL语句。计算节点支持两种方式的HINT语法:

1.在HINT中使用DNID(数据节点ID):

语法:

/*!hotdb:dnid= dnid_value /

要执行的SQL

注:dnid_value的值为某个数据节点的ID号。用户可以替换dnid_value的值来指定具体的分片节点。

例如:

/*!hotdb:dnid= 1*/select * from customer where age > 20;

该语句将在数据库节点1上执行。用户可以通过分布式事务数据库管理平台中的”数据节点”页面,找到数据节点ID为1的存储节点名称,并在”存储节点”页面中搜索指定的存储节点名称,即可定位到实际的MySQL数据库。

2.在HINT中使用分片字段:

语法:

/*!hotdb:table= table_name:column_value*/

要执行的SQL

注:table_name即某个分片表的表名;column_value即该表上分片字段某个值。用户可以替换table_name的值指定相应的拆分规则,通过替换column_value的值来指定使用该分片字段的值对应的分片节点。

例如:

/*!hotdb:table = customer:10001*/select * from customer where age > 20;

使用方法:

连接计算节点(参考登录计算节点并开始使用),选择设置的逻辑库(这里使用“test”逻辑库),然后使用上述方式执行指定的语句(这里举例说明,使用时可以按需编写SQL)。

在dn_id=2的分片节点上查找cutomer表

mysql> /*!hotdb:dnid=2*/ select count(*) from customer;

+------------+

| count(*) |

+-----------+

| 50 |

+-----------+

1 row inset (0.00 sec)

查找customer表上provinceid为1的分片节点的customer表

mysql> /*!hotdb:table=customer:1*/ select count(*) from customer;

+------------+

| count(*) |

+------------+

| 11 |

+------------+

1 row inset (0.00 sec)

特殊说明:业务层面不建议HINT直接操作存储节点,因为使用HINT之后,数据、状态将不受计算节点控制。且为了防止连接池被污染,当使用HINT操作后,计算节点会绑定当前HINT查询使用的逻辑库关联的后端连接(即计算节点与存储节点的连接),所有涉及到后端的操作均在绑定的连接范围内被允许。故当HINT使用完毕后,建议重建新的前端连接以保证新的会话连接状态干净稳定。若不重建连接,当HINT使用后,有其他操作涉及到与原逻辑库绑定的后端连接之外的新的数据节点时,之前绑定的后端连接会失效,前端连接会被自动重建。

涉及到连接绑定的语句除了HINT,还包括如下语句:

set[session] foreign_key_checks=0;

STARTTRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */

set[session] UNIQUE_CHECKS=0;

计算节点在这种连接被绑定的SQL执行后,会输出Warning及日志提醒:

如执行如下语句时会有warning提示:

mysql>use db_a

Databasechanged

mysql>/*!hotdb:dnid=all*/select * From tba;

+----+----+

| id | a |

+----+----+

| 1 | 1 |

| 2 | 2 |

| 3 | 3 |

| 4 | 4 |

| 5 | 5 |

+----+----+

5 rows inset, 1 warning (0.01 sec)

Warning(Code 10041): The current session has been bound to the backend connectionassociated with the current LogicDB. It is recommended to rebuild the sessionafter use.

同时日志会有info信息:

2019-04-0119:11:29.662 [INFO] [CONNECTION] [$NIOEecutor-3-1] ServerConnection(1565) – 31has been bound to the backend connection:[2,1]

当操作涉及到与原逻辑库绑定的后端连接之外的新的数据节点时,showwarnings会有如下提示且连接会断开:

mysql>use db_b

Databasechanged

mysql>show warnings;

+-------+-------+----------------------------------------------------------------------------------------------------------------+

| Level |Code | Message

|

+-------+-------+----------------------------------------------------------------------------------------------------------------+

|Note | 10042 | The connection in currentLogicDB was a binded connection, operations under current LogicDB may causeconnect abort. |

+-------+-------+----------------------------------------------------------------------------------------------------------------+

1 row inset (0.00 sec)

mysql>select * from tbb;

ERROR 2013(HY000): Lost connection to MySQL server during query

ERROR 2016(HY000): MySQL server has gone away

Noconnection. Trying to reconnect…

Connectionid: 63

Currentdatabase: db_b

最后

以上就是潇洒羊为你收集整理的mysql表分片语法,分布式事务数据库HotDB的HINT特色语法的全部内容,希望文章能够帮你解决mysql表分片语法,分布式事务数据库HotDB的HINT特色语法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部