微课程 | 第十一课《Hint 简介和演示》

倖福魔咒の 提交于 2019-12-23 17:38:22

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

https://v.youku.com/v_show/id_XNDQ3OTc2MzkyNA==.html

前几期我们介绍了 Global 表和 ER 表,除此之外 DBLE 还提供了 hint 来指定路由的功能。

什么是 Hint

我们先介绍一下 hint,hint 是一种有效注释,将业务应用指定一个分库,实现中间件可以用指定的方式去下发 SQL。基本上是这样的,hint 里面是有一个路由的结果,比如我这里面 ID=1。通过拆分算法求模,我知道 ID=1 会下发给哪个库,但是真正的执行的 SQL 是另外一种 SQL,这里面这个 SQL 也不是很好,但是能表达功能。通过 hint 来计算路由,然后计算好路由以后下发的是另外一条我想下发的语句。

我们举一个例子。 比如说 insert xx select * from xxx 现在 DBLE 是不支持的,但是我们可以通过 hint 这种方式来实现。所以 hint 目的就是指定路由结果,但实际执行的是 SQL 的内容。

Hint 的分类

DBLE 的 hint 一共分这几种(如图),一个是通过 SQL 来计算路由。一个是直接指明了我要下发的节点。第三种和我们之前说的有点不一样,就是在读写分离中,我强制要求我的 select 强制走主节点,也可以通过 hint 这种方式来指定的。

操作演示

https://v.youku.com/v_show/id_XNDQ3OTc5NTI4OA==.html

我们用 hint 演示存储过程这样一个例子。我们还是通过 MySQL 的 DBLE 应用端入口。我们去看一下 tb_mod 这张表,看到有 5 行数据,比如说现在场景是我想删掉某一个节点上的数据。当然你可以通过写 SQL 的方式来,但是我们这个例子主要展现一个能力:我的某个存储过程在某个节点上建立以后我怎么去用 hint 调用它。 过程就很简单,其实就是 delete * from tb_mod 。但是它前面有一个有一个 hint 操作,指到 tb_mod=1这里。然后我执行一下这个存储过程 call 命令。执行成功后,1 和 5 这两条数据已经被删掉了。这样我们可以通过指定某个节点执行一些我们没办法在 DBLE 层面上做的事情,作为我们普通的一个 DBLE 支持的语法的扩展。类似 insert select * from table 等等语句都可以通过这种方式来执行。

好,我们今天先介绍到这里。

图文稿为了方便阅读,在不影响学习的情况下优化了一些口语化词汇,文稿与视频会尽量保持一致。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!