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.record_count: 43546565
全局表的最大时间戳:

db1. user.max_timestamp: 1450578802241
db2. user.max_timestamp: 1450578802241
db3. user.max_timestamp: 1450578802241

然后前端,比如 mycat-eye 就可以将该结果显示出来。目前直接在log中输出,也可以考虑引入像H2这样的Java实现的嵌入式数据库来记录该结果。 H2实现为仅仅一个jar包,十分适合作为mycat-server层面的一个非文件存储方式。有一些信息如果存在在文件中,查询起来不太方便,比如上面的检测结果就是如此。实际的SQLJob的执行,主要参照了原有的heartbeat的实现,主要在下面两个类中:
MySQLConsistencyChecker
MySQLConsistencyHelper
具体可以参考代码,和heartbeat的实现基本是一样的。
每一次定时检查,会对所有全局表进行上述三项检测。
总结成一句:
SQL的拦截实现记录全局表被修改时的时间戳;定时任务实现对全局表记录总数和时间戳最大值的获取。

4.如何使用全局表一致性检测
1).在所有全局表中增加一个 bigint 的内部列,列名为 _mycat_op_time, (alter table t add column _mycat_op_time bigint [not null default 0]); 同时建议在该列上建立索引(altertable t add index _op_idx(_mycat_op_time))
2). 在对全局表进行crud时,最好将内部列当作不存在一样,也就是最好不要对内部列update,insert等操作,不然会在Log中进行警告:不用操作内部列;
3). 因为全局表多了一个内部列,所以在对全局表进行insert时,必须携带列名,也就是insert into t(id,name) values(xx,xx),不能使用insert into t values(xx,xx); 因为会报错:列数不对。

mycat全局表一致性检查相关推荐

  1. MyCat分片规则(全局表,ER分片表,多对多关联,主键分片VS非主键分片),MyCat常用的分片规则(15中分片规则),自定义MyCat分片规则,其它术语

    1 MyCat分片规则 数据切分中重要的几条原则,其中有几条数据冗余,表分组(Table Group). 1.1全局表 如果你的业务中有些数据类似于数据字典,比如配置文件的配置,常用业务的配置或数据量 ...

  2. Mycat 分片表全局自增主键实现及测试

    目录 一.全局序列号介绍 1.本地文件方式 2.数据库方式 3.本地时间戳方式 4.分布式 ZK ID 生成器 5.ZK 递增方式 6.其它方式 二.准备工作 环境 1.在 MySQL 建库 2.在  ...

  3. mycat分表之ER表分片、范围分片、取模分片、日期分片、全局表等

    概述 数据库进行水平分表时,需要按照一定规则对数据进行分片. Mycat的分片策略可以分为两种: 连续分片和离散分片. 连续分片常用的有分片规则有: 范围分片. 日期分片. 优点:如果进行范围查询,比 ...

  4. MyCat分布式数据库集群架构工作笔记0021---高可用_单表存储千万级_海量存储_水平分表全局表

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后咱们说现在咱们已经实现了水平分表,ER表,但是现在还有一个问题 下面这个 字典表,因为字典表放 ...

  5. fb静态区域_FC 与 FB 与 OB 的区别,时间标记冲突与一致性检查 有详细的步骤...

    关键字1 组织块的程序是由用户自己编写. 关键字2 时间标记冲突与一致性检查 有详细的步骤. 关键字3 FC 与 FB 与 OB 的区别? (一)功能 功能块 区别 ? FB 和FC均为 用户编写的程 ...

  6. 2019DTCC大会分享:分布式数据库全局读一致性

    作者简介:李海翔,网名"那海蓝蓝",腾讯金融云数据库技术专家.中国人民大学信息学院工程硕士企业导师.著有<数据库事务处理的艺术:事务管理和并发访问控制>.<数据库 ...

  7. 企业实战_14_MyCat跨分片查询_全局表

    接上一篇:企业实战_13_MyCat清除冗余数据 https://gblfy.blog.csdn.net/article/details/100057317 文章目录 一.跨分片查询验证 1. 登录m ...

  8. mycat 分表子查询_还不懂MyCat?一文带你深入剖析,实现MySQL读写分离

    前言 系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Myca ...

  9. oracle数据块一致性检查的4种方法

    什么是数据块一致性? 每一个数据块头部都有一个"校验和"字段 当数据块被写回磁盘前,Oracle会重新计算这个校验和 并记录到这个字段,最终写回磁盘 下次数据块被读入内存时,Ora ...

最新文章

  1. WinForm中的各种对话框
  2. 创建型模式 工厂模式
  3. graphpad导出图片不居中_从GraphPad Prism一键导出满足期刊要求的图表
  4. VirtualBox 上安装Debian 后分辨率设置
  5. 编写了一个文件编码转换器。
  6. OpenVINO 部署 Mask-RCNN 实例分割
  7. sqlserver 参数化查询 允许为null_关于SQL Server的insert执行的秘密(上)一个最简单的insert分析...
  8. 游戏经济系统分析:通货与交易
  9. 用面对对象方式定tab标签
  10. matlab中3乘4魔方阵,小代码3 魔方矩阵
  11. RestTemplate 超时值
  12. Opencv学习笔记 常用函数、基础知识二
  13. android开发代码实现对Apk签名,如何对apk进行签名
  14. ECshop4.1版本搭建
  15. 相聚“矿业之都”,2020全球区块链算力大会金句集锦正式出炉
  16. Apache Camel中的recipientList和routingSlip的区别?
  17. fMRI数据处理_预处理_3_批处理和结果解读
  18. 基于Ansys SIwave 阻抗匹配分析
  19. 药品计算机系统培训试题,新版GSP上岗证培训试题及复习资料
  20. template是什么意思啊_建议永久保存!告诉你的孩子什么才重要

热门文章

  1. win10录屏_自称最好用的电脑录屏软件,用了之后是真的香~
  2. 超级计算机怎么收费,近距离看中国天河2号内部细节及收费标准
  3. 计算机多媒体培训心得体会,学习计算机多媒体技术心得体会
  4. COVID-19社交数据共享平台,用数据为疫情研究贡献力量
  5. java毕业设计软件源代码springMVC图书管理系统|借阅
  6. Material Design(4)
  7. java freemarker 模版_使用Java进行FreeMarker的web模板开发的基础教程
  8. 方向余弦阵、四元数、等效旋转矢量的关系和不可交换误差的分析
  9. 及时当勉励,岁月不待人--静心食粮
  10. LCR表和万用表有什么区别?