当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

Mycat的分库功能的路由查找(计算)的实现

来源:本站原创 浏览:23次 时间:2022-09-21

在开源的mysql中间件中,MyCat貌似比较火,实际使用,可能依然存在不少的缺陷(Mycat官方网站上也有注明,可能需要买支持),要想真正用于生产,还必须得把它全部吃透,并结合应用,规避(强悍者可以修正)其缺陷,做好充分的测试。

前段时间稍微研究了一下它的路由计算的实现,因为忙其他的事情,一转眼,很长一段时间已经过去了,自己都差不多忘了当初跟踪到的路由计算的核心代码。 今天再翻出来梳理一下,记点小笔记,以免过段时间又忘了。

Mycat 中的路由计算是通过函数ruleCalculate来实现的。函数代码如下:



  该函数有两个入参:

1。 一个是表的配置信息,其中包含了表的路由规则。

2。另外一个就是where条件里面抽取的信息,用来计算路由规则。

进入函数体之后,

第一步:创建一个空的hash 集合,用于存放路由。

第二步:通过表的配置信息,找到用于分区的列。

第三步:获取路由规则。

第四步:通过路由规则获取具体的路由算法类。

第五步:正式计算路由。 分两种情况,一个是等值计算, 调用algorithm.calculate()函数进行计算路由。

还有一个是范围计算。则调用algorithm.calculateRange()函数进行计算路由。


algorithm 是一个抽象类,具体调用的计算方法由其具体化的类决定。 如果表的路由规则是partitionbylong, 则会调用下面的函数。



最后真正返回路由结果的,是由PartionUtil.partition(key) 函数来返回的,返回的node的编号,通过编号,我们可以知道node的物理位置,然后成功路由。


所有的路由算法的实现都是具体化这个抽象类algorithm来实现的,因此,可以随意添加自己实现的类,来实现自己的新的路由规则。


在Mycat 中,计算路由是第一个步,如果涉及到join的,涉及到两个表的路由, 两个表之间如何关联,结果如何合并? 合并的结果是否是一个正常的结果? 这些,在实际测试过程中,发现两个表的join的功能还有待完善。


  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net