返回顶部
首页 > 资讯 > 精选 >ES业务数据迁移遇到的BUG精度问题怎么解决
  • 913
分享到

ES业务数据迁移遇到的BUG精度问题怎么解决

2023-07-02 11:07:05 913人浏览 八月长安
摘要

这篇文章主要讲解了“ES业务数据迁移遇到的BUG精度问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ES业务数据迁移遇到的BUG精度问题怎么解决”吧!01 问题发现过程通过前期的方

这篇文章主要讲解了“ES业务数据迁移遇到的BUG精度问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ES业务数据迁移遇到的BUG精度问题怎么解决”吧!

01 问题发现过程

通过前期的方案设计和比较,我们决定通过 elasticdump 工具来做 ES 的数据迁移,这个也是比较普遍的迁移方案,于是就动手实施了,过程中也没遇到什么问题。在最后的数据验证环节,发现有一个 ID 对应不上了,如下图所示,通过对比工具,发现一个长度较大的 ID 发生了偏移,其他的数据都没有问题。这是为什么呢?一头雾水。

ES业务数据迁移遇到的BUG精度问题怎么解决

根据二分法的排错思路,我们需要先确认是导出数据的问题,还是导入数据的问题。查看导出过程的中间文件,发现在导出的时候就出现了错误。于是怀疑是 elasticdump 导出功能的问题。因为这个出错的字段,主要的特征就是长度比较长(18 位),于是怀疑是精度的问题。就去查了下 elasticdump 的源码,一番查找后,果然发现有人遇到过同样的问题,并已经修复了这个 BUG,并给出了解决方案和一些猜测的原因。于是这个问题就得到了解决。在 elasticdump 的导出命令中,加上--support-big-int 参数,就可以了。

ES业务数据迁移遇到的BUG精度问题怎么解决

ES业务数据迁移遇到的BUG精度问题怎么解决

好像也很简单嘛,不是么。其实排错的过程也走过很多弯路,只是现在回顾起来看着比较轻松而以。

02 问题的根因是什么

只解决问题并不是我的风格,总得看看让我绕这么大圈才解决的问题根因是什么嘛。于是查了相关资料(结合上面 git 上的对话),可以确认,是因为 elasticdump 中有部分功能是用 js 写的,而 Js 遵循 IEEE754 规范,采用双精度存储,占用 64 位,从左到右的安排位第一问表示符号位,11 位表示指数,52 位来表示尾数,因此 Js 中能精确表示的最大整数是 253(十进制 为 9007199254740992),那么大于这个数(本文中数值长度 18 位)就可能会丢失精度,因为二进制只有 0 和 1,数值太大,于是就出现了精度丢失的问题。可以在 Chrome Console 里面试了一下,果然是这样,(不是超过了能表示的最大值,而是超过了能精确表示的最大值),和 elasticdump 导出的数据变化基本类似。

ES业务数据迁移遇到的BUG精度问题怎么解决

再往深了想,为什么用 double 类型会出现这个问题,其他的数据类型是否会有同样的问题呢?这就涉及了数据精度的问题,在这里篇幅有限,就不再展开,有兴趣的同学可以自己去查看相关资料,本质上还是十进制小数与二进制小数相互转换产生的误差。

03 类似的问题有哪些

因为这个问题比较好玩,就又找了一些资料看了下,发现还有两个精度有关的 BUG,还蛮好玩的。

千年虫问题:这个问题相信很多人 IT 人都听说过,简单来说,就是由于前期计算机的存储资源较为昂,在表达时间时,为了节约空间,有位科学家提出了一个方案,把1960年8月11日,简写成 600811。但这样会有一个问题,就是当时被缩写掉的是 19XX 年中 19,如果时间来到 2000 年,程序就无法准确表达时间。比如:2000年1月1日,简写成六位数是 000101。计算机就会怀疑人生,怎么时间倒流了呢?然后就会导致计算机系统发生紊乱。当时大家都觉得自己的程序不会运行到 2000 年,所以就没太放在心上,而大多数后来人习惯了这种记录方式,就忘记了这回事,结果引发了千禧年的大 BUG,造就了多少程序员的不眠之夜。

2038 年问题:现在很多时候,我们在处理时间问题时,都喜欢用时间戳来记录,因为简单方便,不需要考虑时区问题(时区问题很让人头疼的,一不小出就容易出错)。但是这里面会有一个小 BUG 哟。什么是时间戳呢?简单来说就是:以1970年1月1日0 时 0 分 0 秒为起点,然后通过计算秒数来算出当前时间。比如:2021年5月7日15:00:00,换算一下就是 1620370800 秒。但是由于 32 位操作系统所能计算的秒数有限,到2038年1月19日3:14:07,就会达到极限。二进制:01111111 11111111 11111111 11111111,其后一秒,二进制数字会变为 10000000 00000000 00000000 00000000,发生溢出错误,造成系统将时间误解为1901年12月13日20 时 45 分 52 秒,然后系统就会发生各类错误,是不是和上面的千年虫一样?理论上到了 2038 年,人们应该淘汰掉了 32 位操作系统, 64 位操作系统就不存在这个问题。但是从前面的 “千年虫” 事件来看,人类从历史中吸取的唯一教训,就是人类不会吸取任何教训。

感谢各位的阅读,以上就是“ES业务数据迁移遇到的BUG精度问题怎么解决”的内容了,经过本文的学习后,相信大家对ES业务数据迁移遇到的BUG精度问题怎么解决这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: ES业务数据迁移遇到的BUG精度问题怎么解决

本文链接: https://www.lsjlt.com/news/341605.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • ES业务数据迁移遇到的精度问题BUG
    目录前言01 问题发现过程02 问题的根因是什么03 类似的问题有哪些千年虫问题:2038 年问题:04 小结前言 最近在协助团队完成 ES 数据的切换(业务数据迁移),过程中遇到一...
    99+
    2024-04-02
  • ES业务数据迁移遇到的BUG精度问题怎么解决
    这篇文章主要讲解了“ES业务数据迁移遇到的BUG精度问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ES业务数据迁移遇到的BUG精度问题怎么解决”吧!01 问题发现过程通过前期的方...
    99+
    2023-07-02
  • sybase15 迁移数据库时遇到的问题
    在创建逻辑卷的时候首先要创建pv pvcreate /dev/sdb创建pv之后开始创建vg vgcreate vg_db /dev/sdb创建vg后开始划lv也就是逻辑卷 lvcreate -L 1G e...
    99+
    2024-04-02
  • Golang处理浮点数遇到的精度问题怎么解决
    这篇文章主要介绍“Golang处理浮点数遇到的精度问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Golang处理浮点数遇到的精度问题怎么解决”文章能帮助大家解决问题。一、浮点数是什么?浮...
    99+
    2023-06-29
  • MongoDB技术开发中遇到的数据迁移问题解决方案分析
    MongoDB技术开发中遇到的数据迁移问题解决方案分析摘要:随着数据量的不断增长和业务需求的变化,数据迁移成为了开发中一个必须面对的问题。本文将针对使用MongoDB进行数据迁移时可能遇到的问题进行分析,并给出解决方案,包含具体的代码示例。...
    99+
    2023-10-22
    解决方案 MongoDB 数据迁移
  • 如何解决将three项目迁移至vue项目遇到的问题
    这篇文章主要介绍了如何解决将three项目迁移至vue项目遇到的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。通过npm下载的three依赖无法正常使用在原项目中使用的是...
    99+
    2023-06-28
  • MYSQL数据迁移到ORACLE中碰到的乱码问题的解决方法
    本篇内容主要讲解“MYSQL数据迁移到ORACLE中碰到的乱码问题的解决方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MYSQL数据迁移到ORACLE中碰到...
    99+
    2024-04-02
  • java中的BigDecimal精度问题怎么解决
    在Java中,可以使用BigDecimal类来解决精度问题。BigDecimal类提供了高精度的数值计算,可以避免浮点数计算精度丢失...
    99+
    2023-08-16
    java BigDecimal
  • codis迁移槽位遇到value过大的数据导致redis进程堵塞问题
    codis迁移槽位遇到value过大的数据导致redis进程堵塞问题问题背景:2016-11-08 下午,咨询codis开始迁移槽位。迁移过程中dba发现group1中redis无法连接,proxy进程异...
    99+
    2024-04-02
  • 数据迁移到美国服务器要注意什么问题
    数据迁移到美国服务器时,需要注意以下问题: 法律合规性:美国有严格的数据隐私法律,如HIPAA(医疗保险移民和责任法案)、GDP...
    99+
    2024-04-17
    美国服务器
  • 怎么解决ObjectMapper.convertValue() 遇到的一些问题
    小编给大家分享一下怎么解决ObjectMapper.convertValue() 遇到的一些问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!源代码:public <T> T co...
    99+
    2023-06-20
  • PHP除以10000的精度问题怎么解决
    这篇文章主要介绍“PHP除以10000的精度问题怎么解决”,在日常操作中,相信很多人在PHP除以10000的精度问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP除以10000的精度问题怎么解决...
    99+
    2023-07-05
  • ASP Hangfire任务调度常见问题解答:解决你遇到的难题
    1. 如何在Hangfire中创建和运行作业? public class MyJob { public void Run() { // 任务逻辑 } } //创建一个作业 var job = n...
    99+
    2024-02-04
    ASP Hangfire 任务调度 常见问题 解决方案
  • JavaScript中遇到的错误问题怎么解决
    本篇内容介绍了“JavaScript中遇到的错误问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Demo演示每个按钮都会引发一个“...
    99+
    2023-06-02
  • 如何解决Mysql大量数据导入遇到的问题
    这篇文章主要介绍如何解决Mysql大量数据导入遇到的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在项目中,经常会碰到往数据库中导入大量数据,以便利用sql进行数据分析。在导入数...
    99+
    2024-04-02
  • 怎么解决navicat事务自动提交遇到的问题
    小编给大家分享一下怎么解决navicat事务自动提交遇到的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!最近在使用navic...
    99+
    2024-04-02
  • Excel数据导入Mysql常见问题汇总:如何解决导入时遇到的数据长度超限问题?
    Excel数据导入Mysql常见问题汇总:如何解决导入时遇到的数据长度超限问题?导入Excel数据到Mysql数据库是日常工作中经常遇到的任务之一。但是,在导入过程中常常会遇到数据长度超限的问题,特别是当Excel表格中某些字段的数据长度超...
    99+
    2023-10-22
    MySQL 关键词:Excel数据 数据长度超限问题
  • Redhat5下MySql遇到的乱码问题怎么解决
    本篇内容介绍了“Redhat5下MySql遇到的乱码问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所...
    99+
    2024-04-02
  • pip安装opencv-python遇到的问题怎么解决
    今天小编给大家分享一下pip安装opencv-python遇到的问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。p...
    99+
    2023-07-05
  • vue3中使用swiper遇到的问题怎么解决
    这篇文章主要介绍了vue3中使用swiper遇到的问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue3中使用swiper遇到的问题怎么解决文章都会有所收获,下面我们一起来看看吧。一、安装swipe...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作