mycat全局表一致性检查

Mycat通过内部列_mycat_op_time确保全局表一致性,包括检查内部列是否存在、记录总数和最大时间戳。检测由SQLJob异步执行,不一致时输出警告。全局表操作需注意内部列的使用,避免对它进行更新操作,并在插入时指定列名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mycat全局表一致性检查通过内部列_mycat_op_time来实现,具体实现方式如下
1.检测全局表的内部列是否存在
checker.checkInnerColumnExist();
检测的实现是通过一个SQLJob来异步操作的,对应的SQL语句为:
select count(*) as inner_col_exist from information_schema.columns where column_name=’_mycat_op_time’ and table_name=’user’ and table_schema=’db1’;
如果返回的inner_col_exist 大于0,那么就表示存在内部列,如果等于0,那么就表示不存在内部列。

如果PhysicalDatasource上某个db的全局表没有内部列,那么将这些db记录在一个list中,然后在SQL 拦截过程中进行判断,如果是全局表,但是没有内部列,那么就输出警告,不对SQL进行拦截改写,因为该全局表没有内部列,无需改写SQL。在第一项检测完成之后,才能进行第二项检测。

2.检测全局表的记录总数
checker.checkRecordCout();
检查过程是类似的,都是通过SQLjob来完成的,只是对应的语句不一样:
select count(*) as record_count from user; (假设user表为全局表)

3.检测全局表的时间戳的最大值
checker.checkMaxTimeStamp();
检查过程是类似的,都是通过SQLjob来完成的,只是对应的语句不一样:
select max(_mycat_op_time) as max_timestamp from user (假设user表为全局表)

三项检查完成之后,就获得了如下所示的结果:
全局表的记录总数(user表为全局表,并且系统有三个db):
db1. user.record_count: 43546565
db2. user.record_count: 43546565
db3. user.r

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值