mycat2 自定义算法配置+修改jar包添加自定义算法

创建HTTP自定义分库分表

 /*+ mycat:createTable{
	"schemaName":"创建的schema是的schemaName",
	"shardingTable":{
		"createTableSQL":"建表语句",
		"function":{
			"clazz":"io.mycat.router.custom.HttpCustomRuleFunction",
			"properties":{
				"name":"自定义名称",
				"shardingDbKeys":"分库字段",
				"shardingTableKeys":"分表字段",
				"shardingTargetKeys":"分实例字段",
				"allScanPartitionTimeout":5,
				"fetchTimeout":60000,
				"routerServiceAddress":"http://127.0.0.1:8000/router_service_address",
			}
		}
	},
	"tableName":"表名称"
} */;

也就是说,需要我们提供一个接口给mycat 进行动态获取分库分表的策略

mycat以form的方式进行请求

请求参数有3个: 
schemaName:schemaName名字
tableName:表名
condition:条件

如果传过来的condition为空,需要返回当前表的所有分区信息
返回数据格式如下:

[
	{
		"targetName":"集群实例名,例 c0,c1  就能确定当前这个分区是在哪个集群分",
		"dbIndex":"库索引下标,不是实际库名,分多个库需要注意,一张表不能有重复的字段",
		"tableIndex":"表索引下标,不是实际表名,不能重复",
		"index":"总分区表下标,当前分的第几个区",
		"table":"表名称,实际表名,例:同一个库,表名不能相同",
		"targetIndex":"index+1    这个没搞懂,使用总分区表下标+1就行",
		"schema":"库名称,实际库名,例:c0集群分2个库,c1集群2个库, 所有库的名称不能相同 ,  库名_0,库名_1 类似写法"
	},
	{
		"targetName":"集群实例名,例 c0,c1  就能确定当前这个分区是在哪个集群分",
		"dbIndex":"库索引下标,不是实际库名,分多个库需要注意,一张表不能有重复的字段",
		"tableIndex":"表索引下标,不是实际表名,不能重复",
		"index":"总分区表下标,当前分的第几个区",
		"table":"表名称,实际表名,例:同一个库,表名不能相同",
		"targetIndex":"index+1    这个没搞懂,使用总分区表下标+1就行",
		"schema":"库名称,实际库名,例:c0集群分2个库,c1集群2个库, 所有库的名称不能相同 ,  库名_0,库名_1 类似写法"
	},
	{
		"targetName":"集群实例名,例 c0,c1  就能确定当前这个分区是在哪个集群分",
		"dbIndex":"库索引下标,不是实际库名,分多个库需要注意,一张表不能有重复的字段",
		"tableIndex":"表索引下标,不是实际表名,不能重复",
		"index":"总分区表下标,当前分的第几个区",
		"table":"表名称,实际表名,例:同一个库,表名不能相同",
		"targetIndex":"index+1    这个没搞懂,使用总分区表下标+1就行",
		"schema":"库名称,实际库名,例:c0集群分2个库,c1集群2个库, 所有库的名称不能相同 ,  库名_0,库名_1 类似写法"
	},
]

如果condition 不为空 ,需要根据自己的算法算出,数据落在哪个库,就是从所有的分库中取一个,返回给mycat,
建议: 以map方式,用特殊的键保存所有分区信息, 当条件传过来是,根据字段的值能快速定位到分区位置即可

弊端

在这里插入图片描述
mycat 每次查询和插入数据,都需要从提供策略的服务器获取信息
1.每次创建http连接,耗时
2.要保障策略服务器的稳定

![在这里插入图片描述](https://img-blog.csdnimg.cn/e33a3cd5a41d4a4491293da50eace2cf.png在这里插入图片描述

利用这个属性实现添加class文件,到jar包 进行自定义算法

  1. 下载mycat源码到本地

  2. 找到 io.mycat.router.custom.HttpCustomRuleFunction 这个类,复制一份。

  3. HttpCustomRuleFunction 这个类是发送http 获取信息,将发送http获取信息的那段代码,改掉替换成自己写的那段http算法代码
    在这里插入图片描述

  4. 修改完成后,打包
    在这里插入图片描述
    在这里插入图片描述
    可以使用mycat2下的包,进行整个替换,

也可以使用router包下的jar ,打开里面将自定义的类的class 复制出来,再打开运行mycat的jar,复制进去。
创建分库分表的时候指定 clazz 全限定类名就可以了

效果是一样的,省了http的时间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值