数据库检测数据一致性时的哈希值不一致的原因
检测数据一致性时的哈希值不一致的原因
内容目录
- 检测数据一致性时的哈希值不一致的原因
- 一、问题介绍
- 二、哈希值不同的原因有什么
- 三、问题排查
- 四、日常小技巧
今天在做一个数据需求的时候,大概要把几张有字段重复的数据表,并且是同一粒度的,合并到一张表里
逻辑处理结束之后,在做数据一致性检验的时候,checksum的结果有些出入
一、问题介绍
总共有28个字段,checksum的哈希结果26个都是一样的,但是却有两个不一样,这个结果就很奇怪,如果说有一些重复数据造成了数据增长,那么行数是怎么一样的呢?如果逻辑有问题,那么为什么只有两个字段有问题呢?
首先了解哈希值是什么,哈希值就是对于一个输入的变量,进行一些逻辑的算法操作,得出一个数值,这个数值可以一定程度上代表这个变量的为唯一性,当然也会存在哈希碰撞的情况。
二、哈希值不同的原因有什么
1.首先就是变量值不一样,如果变量值不一样,那么毫无疑问,多数情况下的哈希值也是不一样的,当然排除哈希碰撞的情况
2.如果对于一个数值类型不一致的,虽然看似字面大小是一样的,那么哈希值也是不一样的。比如“1”和1的哈希值是不一样的
三、问题排查
先看一下checksum的部分结果:
可以看出标黄的两个字段的哈希结果是不一致的,因为只有两个字段不一样,所以初步可以判断得出两个表的建表语句中应该是字段类型或者某些地方进行了一些逻辑操作
查看建表语句:
show create table;
查看了两个建表语句之后,发现了确实是字段类型不一样啊,一个是string类型,一个是bigint类型。
看一下这两个类型的哈希有什么变化
select hash(1)
union all
select hash("1")
四、日常小技巧
除此之外,哈希值并不是数值越大就代表的数字越多或者字符越多,比如:
select hash("数据库")
select hash("大数据之路");
但是可以基本的从一个大概的记过评估一下数据的变化情况,因为在处理的过程中,即便哈希值的checksum有些出入,只要你逻辑不是乱写的,就不会出现不可控的情况出现。
当发现数值普遍都要大一点的时候,就可以初步认为是在关联查询的时候数据发生了增加的情况,比如:
你就可以去review你得代码,看看哪些会有一些重复数据的出现,去重或者怎么处理一下。
tips:一般在join的时候考虑到一对多的关系,可以根据一些数据时间、数据触发者等关联起来作为i连接条件。
数据库检测数据一致性时的哈希值不一致的原因相关推荐
- Win8安装驱动时提示“哈希值不在指定的目录文件中”的解决办法
1.Windows键+C,或鼠标屏幕右下角 2.设置→更多电脑设置 3.左边选常规,右下角重新启动 上面3个步骤也可用这个方法替代:Windows键+R→shutdown.exe /r /o /f / ...
- max_semi_space_size 设置值与实际值不一致的原因分析
问题由来 因为业务的需求,某 Node.js 性能平台用户需要调节新生代大小,Node.js 的启动参数里面的max_semi_space_size可以设置新生代堆空间的大小. node --v8-o ...
- Python小工具:将对象转换为不可变类型并计算其哈希值
在设计单元测试时,我们往往需要将运行结果与预期结果相比较.但是,如果运行结果是一个比较复杂的数据结构的话,那么我们可能需要将预期结果硬编码到代码中,或存储到文件中,都需要占用一定的空间.为了减少单元测 ...
- 数据库有数据但查询出来的值为Null
使用逆向工程后数据库有数据但查询出来的值为Null 原因 解决方案 方案1 方案2 总结 原因 在使用逆向工程后会为我们自动生成实体类和映射文件,但是生成的实体类中某些属性名和数据库表中的属性名会发生 ...
- session.merge 缓存不更新_如何保证缓存与数据库双写时的数据一致性?
在做系统优化时,想到了将数据进行分级存储的思路.因为在系统中会存在一些数据,有些数据的实时性要求不高,比如一些配置信息.基本上配置了很久才会变一次.而有一些数据实时性要求非常高,比如订单和流水的数据. ...
- MySQL数据库建表时对于某个字段设置了默认值,但是使用Spring Data Jpa的save后默认值没有生效
问题描述:MySQL数据库建表时对于某个字段设置了默认值,但是使用Spring Data Jpa的save后默认值没有生效.MySQL数据库中构建的用户表表结构如下所示: DROP TABLE IF ...
- 通过python利用哈希值实现比较两个文件的一致性
背景 近来学习到python的内置函数hash(),深入发现通过python的哈希值可以做很多的事情,最典型的可能就是文件加密了,在我们现实生活中大约有如下一些用途: 加密网站注册用户的密码. 网站用 ...
- Merkle 树——空间换时间,分而治之的hash表,通过根节点是由它的两个子节点内容的哈希值组成来校验数据完整性,定位篡改的数据位置...
Merkle 树 图 1.5.6.1 - Merkle 树示例 默克尔树(又叫哈希树)是一种二叉树,由一个根节点.一组中间节点和一组叶节点组成.最下面的叶节点包含存储数据或其哈希值,每个中间节点是它的 ...
- PostgreSQL 数据库检测到 ShareLock 死锁的处理方法
PostgreSQL 是一个免费数据库,对于处理分析型+交易型混合型系统来说确实很不错,特别是版本的升级到11.2后性能提升很多,很多运行机制跟Oracle越来越接近,确实很强大,但是开源系统确实存在 ...
最新文章
- 第5章 图像分类的数据集
- C++——新类型与原始字面量(原始字符串)
- win7 + vs2013 + zlib 编译
- obj c和java_PKCS1-padding / RSA加密ios objc和java之间的区别
- 小米6 android os,脱离安卓!小米6刷入全新系统:界面炫酷,可流畅日常使用!...
- JavaScript面向对象——封装及相关原理解析
- flowable 表名sql mysql和oracle
- 【图像处理基础知识】-混合高斯背景建模
- MantisBT 缺陷管理系统
- 用python算股票月涨幅_「」股票产品 python-如何选取过去每个月股票的市值 python-TOP金融网...
- MongoDB 唯一索引
- excel怎么设置自动计算_最新个税计算Excel模版,含专项扣除 (自动生成),人手一份...
- chrome如何对部分网页截图
- 8.Redis主从复制
- 一年月份大小月口诀_大月小月口诀 什么意思 有多少天
- 视频流媒体播放器EasyPlayer-RTSP-Android 如何随意切换播放视频流?
- 关于AQS中的enq方法的理解
- 知乎 mac apfs_APFS,Mac OS Extended(HFS +)和ExFAT之间有什么区别?
- 忘了什么,都请别忘了音乐
- 阿里巴巴十亿级并发系统设计手册已开源(2022最新版)