mycat全局表一致性检查
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全局表一致性检查相关推荐
- MyCat分片规则(全局表,ER分片表,多对多关联,主键分片VS非主键分片),MyCat常用的分片规则(15中分片规则),自定义MyCat分片规则,其它术语
1 MyCat分片规则 数据切分中重要的几条原则,其中有几条数据冗余,表分组(Table Group). 1.1全局表 如果你的业务中有些数据类似于数据字典,比如配置文件的配置,常用业务的配置或数据量 ...
- Mycat 分片表全局自增主键实现及测试
目录 一.全局序列号介绍 1.本地文件方式 2.数据库方式 3.本地时间戳方式 4.分布式 ZK ID 生成器 5.ZK 递增方式 6.其它方式 二.准备工作 环境 1.在 MySQL 建库 2.在 ...
- mycat分表之ER表分片、范围分片、取模分片、日期分片、全局表等
概述 数据库进行水平分表时,需要按照一定规则对数据进行分片. Mycat的分片策略可以分为两种: 连续分片和离散分片. 连续分片常用的有分片规则有: 范围分片. 日期分片. 优点:如果进行范围查询,比 ...
- MyCat分布式数据库集群架构工作笔记0021---高可用_单表存储千万级_海量存储_水平分表全局表
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后咱们说现在咱们已经实现了水平分表,ER表,但是现在还有一个问题 下面这个 字典表,因为字典表放 ...
- fb静态区域_FC 与 FB 与 OB 的区别,时间标记冲突与一致性检查 有详细的步骤...
关键字1 组织块的程序是由用户自己编写. 关键字2 时间标记冲突与一致性检查 有详细的步骤. 关键字3 FC 与 FB 与 OB 的区别? (一)功能 功能块 区别 ? FB 和FC均为 用户编写的程 ...
- 2019DTCC大会分享:分布式数据库全局读一致性
作者简介:李海翔,网名"那海蓝蓝",腾讯金融云数据库技术专家.中国人民大学信息学院工程硕士企业导师.著有<数据库事务处理的艺术:事务管理和并发访问控制>.<数据库 ...
- 企业实战_14_MyCat跨分片查询_全局表
接上一篇:企业实战_13_MyCat清除冗余数据 https://gblfy.blog.csdn.net/article/details/100057317 文章目录 一.跨分片查询验证 1. 登录m ...
- mycat 分表子查询_还不懂MyCat?一文带你深入剖析,实现MySQL读写分离
前言 系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Myca ...
- oracle数据块一致性检查的4种方法
什么是数据块一致性? 每一个数据块头部都有一个"校验和"字段 当数据块被写回磁盘前,Oracle会重新计算这个校验和 并记录到这个字段,最终写回磁盘 下次数据块被读入内存时,Ora ...
最新文章
- WinForm中的各种对话框
- 创建型模式 工厂模式
- graphpad导出图片不居中_从GraphPad Prism一键导出满足期刊要求的图表
- VirtualBox 上安装Debian 后分辨率设置
- 编写了一个文件编码转换器。
- OpenVINO 部署 Mask-RCNN 实例分割
- sqlserver 参数化查询 允许为null_关于SQL Server的insert执行的秘密(上)一个最简单的insert分析...
- 游戏经济系统分析:通货与交易
- 用面对对象方式定tab标签
- matlab中3乘4魔方阵,小代码3 魔方矩阵
- RestTemplate 超时值
- Opencv学习笔记 常用函数、基础知识二
- android开发代码实现对Apk签名,如何对apk进行签名
- ECshop4.1版本搭建
- 相聚“矿业之都”,2020全球区块链算力大会金句集锦正式出炉
- Apache Camel中的recipientList和routingSlip的区别?
- fMRI数据处理_预处理_3_批处理和结果解读
- 基于Ansys SIwave 阻抗匹配分析
- 药品计算机系统培训试题,新版GSP上岗证培训试题及复习资料
- template是什么意思啊_建议永久保存!告诉你的孩子什么才重要
热门文章
- win10录屏_自称最好用的电脑录屏软件,用了之后是真的香~
- 超级计算机怎么收费,近距离看中国天河2号内部细节及收费标准
- 计算机多媒体培训心得体会,学习计算机多媒体技术心得体会
- COVID-19社交数据共享平台,用数据为疫情研究贡献力量
- java毕业设计软件源代码springMVC图书管理系统|借阅
- Material Design(4)
- java freemarker 模版_使用Java进行FreeMarker的web模板开发的基础教程
- 方向余弦阵、四元数、等效旋转矢量的关系和不可交换误差的分析
- 及时当勉励,岁月不待人--静心食粮
- LCR表和万用表有什么区别?