Mysql亿级数据清洗迁移

深度哈希实战:毫秒级相似搜索的工程落地指南 相似性搜索是推荐系统、内容去重、跨模态检索等场景的核心能力,其本质是在高维空间中高效计算语义距离。传统KNN或LSH受限于维度灾难、存储开销与语义鸿沟,难以支撑亿级数据的实时响应。深度哈希通过端到端神经网络联合学习语义特征与二进制哈希码,使‘找相似’退化为低开销的汉明距离计算,兼顾精度、速度与存储效率。它天然适配图像、文本乃至多模态数据,在电商搜同款、医疗影像匹配、UGC内容审核等工业场景已验证显著降本增效。本文聚焦可复用的工程实践路径,涵盖监督/自监督方案选型、64位哈希码设计、Redis分桶索引构建及线 阅读详情

Mysql亿级数据清洗迁移

本文使用代码做数据清洗和迁移

需求:清洗旧表数据并添加新业务数据至新表
大致步骤
1计算当前数据库写QPS 若每秒内可处理200条数据则size设置为200
2定义定时任务管理每秒调一次 每次执行200条数据
3引入redis根据主键ID排列顺序,存入当前已处理的最后一条数据的主键ID
4从redis中获取主键ID
5查询从主键ID开始偏移量为size的数据
6获取旧数据添加业务数据并插入新表

    /**
    * type :任务类型
    * size :一次迁移数量
    */
    public void transfer(Integer type, Integer size) {
    
        RLock rLock = redissonClient.getLock("realname_trasfer:" + type);
        if (finished) {
            return;
        }
        if (!rLock.tryLock()) {
            log.warn("realname task busy");
        }
        try {
        	//任务处理
            doTransfer(type, size);
        } finally {
            rLock.unlock();
        }
    }

    private void doTransfer(Integer type, Integer size) {
        long start = System.currentTimeMillis();
        //获取当前以处理的数据主键
        String skipId = getSkipId(type);
        Boolean hasError = false;
        if (skipId.indexOf(":") >= 0) {
            hasError = true;
        }

        if (hasError) {
            return;
        }
		//查询以处理的数据节点后一批需要处理的数据
        List<OsvServiceEntity> list = osvServiceDAO.getListBySkipId(getSkipId(type), type, size);
        if (CollectionUtils.isEmpty(list)) {
            log.info("transfer finished skipId:{}", skipId);
            finished = true;
            return;
        }

        RAtomicLong scanTotal = redissonClient.getAtomicLong("realname_trasfer_scan:" + type);
        scanTotal.expire(30, TimeUnit.DAYS);

        String nextSkipId = list.get(list.size() - 1).getId();
        //寻找相应的处理器
        Map<Integer, List<OsvServiceEntity>> typeMapList = list.stream().collect(Collectors.groupingBy(item -> item.getType()));
        try {
            for (Map.Entry<Integer, List<OsvServiceEntity>> entry : typeMapList.entrySet()) {
                RealNameHandler handler = ApplicationContextUtil.getBean("REALNAME_HANDLER_" + entry.getKey(), RealNameHandler.class);
                if (handler == null) {
                    throw new BaseBizRuntimeException("找不到指定类型实名处理器,type:" + type);
                }
                handler.handle(entry.getValue().stream().map(item -> item.getId()).collect(Collectors.toList()));
            }

            updateSkipId(type, nextSkipId);
            scanTotal.addAndGet(list.size());
            scanTotal.expire(30, TimeUnit.DAYS);
            long end = System.currentTimeMillis();
            log.info("realname transfer finished,type:{},skipId:{},size:{},nextSkipId:{},scanTotal:{},cost:{}", type, skipId, size, nextSkipId, scanTotal.get(), end - start);
        } catch (Exception e) {
            log.error("迁移发生异常,任务中断,skipId:{},message:{}", skipId, e.getMessage(), e);
            nextSkipId = skipId + ":error";
            clear(type, skipId);
            updateSkipId(type, nextSkipId);
        }
    }
   private String getSkipId(Integer type) {
        String skipId = redisTemplate.opsForValue().get("realname_trasfer_skipId:" + type);
        if (StringUtils.isBlank(skipId)) {
            return "0";
        }
        return skipId;
    }

DAO层

  public List<OsvServiceEntity> getListBySkipId(String skipId, Integer type, Integer size) {
        LambdaQueryWrapper<OsvServiceEntity> queryWrapper = new QueryWrapper<OsvServiceEntity>().lambda();
        queryWrapper.gt(OsvServiceEntity::getId, skipId);
        if (type != null && type >0) {
            queryWrapper.eq(OsvServiceEntity::getType, type);
        }
        queryWrapper.eq(OsvServiceEntity::getServiceStatus, 3);
        queryWrapper.orderByAsc(OsvServiceEntity::getId);
        queryWrapper.last("limit " + size);
        return baseMapper.selectList(queryWrapper);
    }
//更新redis缓存
  private void updateSkipId(Integer type, String skipId) {
        redisTemplate.opsForValue().set("realname_trasfer_skipId:" + type, skipId, 30, TimeUnit.DAYS);
    }
//处理器接口
public interface RealNameHandler {

    void handle(List<String> serviceIds);
}
@Service("REALNAME_HANDLER_1")
@Slf4j
public class RealNameHandlerType1 implements RealNameHandler {

    @Resource
    private HBaseDAO hBaseDAO;
    @Resource
    private DataCleanDAO dataCleanDAO;

    @Override
    public void handle(List<String> serviceIds) {
		//TODO something
	}
从 MySQL 到 WuTongDB 的迁移指导:理论与实践框架 提升系统性能通过事务与分析任务分离,避免资源争用。使用分布式计算提升大规模数据处理效率。增强系统稳定性设计多活节点架构,确保高可用性。支持动态扩展存储和计算资源,适应业务增长。保证数据一致性确保分布式环境下的事务一致性和分析数据的实时性。从MySQL到WuTongDB的迁移是一项复杂的工程,涵盖了数据同步、架构设计、性能优化、系统切换以及成本控制等多个方面。在本文中,我们深入探讨了迁移过程中的关键技术点,并提出了相应的解决方案和优化建议。 阅读详情

相关推荐

Oracle到MySQL数据库迁移实战指南

数据迁移是在数据库管理系统之间转换数据的过程,这个过程可能涉及到不同类型的数据库系统,例如从Oracle数据库迁移到MySQL数据库。数据迁移的目的包括系统升级、技术平台更换、企业合并、数据整合以及性能优化等。数据迁移的重要性在于,它能够确保数据的持续可用性,并且在迁移过程中可以对数据进行清洗和优化,进而提高数据质量。数据迁移不仅包含数据的简单复制,还需要考虑数据之间的关系、完整性、安全性和一致性。

weixin_42418754的博客 1577

业务技术 | 线上单表数据量超过1亿,如何做分表迁移

线上单表数据量超过1亿,如何做分表迁移

为了远大的理想,冲锋! 1185

6.5 构网型储能系统的协同控制策略

本文系统阐述了构网型储能系统的协同控制策略,重点分析了多机组群协同运行面临的功率分配不均、动态响应失配等挑战。研究提出了改进型下垂控制与虚拟阻抗法、基于一致性算法的分布式协同控制等解决方案,探讨了构网型储能与同步发电机在惯性响应、一次调频等方面的协同机制,以及与跟网型电源在电压支撑、阻抗重塑等方面的互补作用。文章构建了分层控制架构,为实现多类型电源的全局优化运行提供了技术路径,对提升高比例新能源电力系统的稳定性具有重要意义。

技术工作者 1001

MySQL 亿级数据的迁移、清洗、与审计分析

职业生涯中,曾经有两年多时间从事IT内部审计的工作,需要介入公司大部分的业务系统,主要的数据库为 MySQL,特别是三年期审计,需要统计三年的数据素材(亿级以上)。对MySQL的性能有一些自已的理解,.........

刘一二 2549

MSDN Win10镜像缺少驱动?这里有全面解决方案

针对MSDN Win10镜像缺少驱动的问题,本文提供了四种解决方案:厂商官网下载驱动程序、利用Windows更新获取驱动、使用第三方驱动更新工具以及使用集成驱动的Win10系统镜像。每种方案都有其优缺点,用户可以根据自己的需求和实际情况选择合适的方案。建议优先考虑官方渠道:官方渠道下载的驱动程序稳定可靠,是解决问题的首选方案。谨慎选择第三方工具:使用第三方工具时,务必选择信誉好、无广告捆绑的工具,并注意保护个人隐私和计算机安全。备份重要数据:在进行系统安装或更新前,务必备份重要数据以防丢失。

nntxthml的博客 1515

Qt界面美化-飞扬青云自绘控件插件的使用-避免采坑

1、先上一个集成到QtCreater中的效果图: 2、飞扬青云自绘控件插件下载地址:https://gitcode.net/mirrors/feiyangqingyun/qucsdk?utm_source=csdn_github_accelerator 3、集成插件到QtCreater中的方法: (1)、查看自己使用的QtCreater的版本信息,我的:Qt 5.15.2 MSVC2019 64位 (2)插件下载下来后工程预览: 我选择msvc版本的SDK,打开找到匹配的SDK:...

小米的修行之路 2792

mysql数据迁移

会禁用MySQL的权限系统,使得任何用户都能够无需密码即可连接数据库并拥有全部权限,【这会带来严重的安全风险。综上所述,该命令的作用是从IP地址为xxx.xxx.x.xxx、端口为3307的MySQL服务器上,使用root用户和密码xxxxxx登录,并备份数据库。2、若原库和目标库的数据结构不一样,可以创建一个新库,将原库数据清洗至新库,然后将新库数据导入目标库。: MySQL数据库备份工具,用于导出数据库的结构和数据为SQL格式的文件。: 导出的SQL文件名,备份数据将被保存到这个文件中,文件扩展名。

qq_41081716的博客 706

北斗导航 | SPP、RTK、RTD、PPP-RTK、PPP算法原理,公式及完整matlab代码

开发参考:SPP适合入门学习GNSS定位原理和最小二乘。RTK是工程高精度定位主流方案,但依赖基站。PPP适合无基站区域的广域高精度应用。PPP-RTK是融合两者优点的新一代技术,但系统复杂度最高。· 代码资源:raPPPid(VieVS PPP)是功能完整的MATLAB开源PPP工具箱,支持多系统PPP-AR。MATLAB GPS Toolbox 提供从SPP到PPP的完整功能实现。· 实际应用:农业自动驾驶、无人机航测通常使用网络RTK;大地测量、地壳形变监测常采用PPP事后处理;

尘世冰封的专栏 822

【技术随笔】Mysql数据库亿级数据表的快速迁移,详细教程及避坑指南

做量化交易需要大量的金融数据,通常保存在mysql数据库中,有时候我们需要将这些金融数据从一台设备迁移到另一台设备,这时就意味着将若干上亿行的数据表迁移过去。是一个事先创建好的路径,上面命令将db_name中的所有数据表dump到这个路径下,每个数据表都会生成两个文件,一个是表头信息,另一个是数据。由于数据是批量导入数据表中的,因此mysqlimport的速度比mysqldump方法快得多。这个SQL语句,当mysqlimport不能使用时,可以用。可见,必须找到一种足够快的方法,以实现数据高速传输。

Shepherdppz的博客 1417

ICC2如何写出floorplan信息

不用-exclude 的话rows_tracks / vias /blockages / routing_rules信息都会写出去,即便用了-include {macro ports}也不行,所以不介意这些东西的话可以用以下两种种def方式去写floorplan。write_floorplan用法和write_def一样,因为写出来的文件夹里就包含def,用write_floorplan的好处和innovus saveFPlan一样,都能写出voltage area和bound信息。

m0_61544122的博客 1070

工业级向量检索核心技术:IVF-PQ原理与全流程解析

在大规模高维向量检索场景中,IVF-PQ(倒排索引结合乘积量化)凭借“粗筛范围+细算距离”的双重加速策略,成为核心解决方案。本文将深入解析其原理与全流程,助力开发者掌握这一关键技术。

进一步有进一步的欢喜~ 1197

关于洗数据的sql ,更新表数据,添加表数据

更新 1.两张表对应字段进行数据更新 https://blog.youkuaiyun.com/weixin_39180123/article/details/78720222 添加 将一张表的数据更新到另一张表中 INSERT INTO `m_product_center`.`pc_company_product_auth_contract` (id, contract_id, auth_id, start_date_active, .

cdliker的博客 221

详解Agent Skills:让AI拥有更多专业能力(什么是Agent Skills?如何创建?如何使用?如何获取?)

本文分享如何将零散指令沉淀为可复用的 AI 能力模块🧩,介绍什么是Agent Skills?如何创建?如何获取?📚

XiaoqiangClub的博客 1269

mysql亿级数据迁移

亿级数据迁移 背景:Mysql5.6 + 分库分表 + 跨数据库实例,要求线上迁移+切换功能 总体实现方式 Created with Raphaël 2.2.0记录导出位点(用于做增量同步内容)开始导出数据将导出的数据文件上传到解析服务器解析文件入库判断文件是否均入库增量同步数据入库限流迁移方接口(或消息队列堆积)判断增量数据是否一致开关切换迁移结束yesnoyesno Mysql迁移问题 磁盘空间 -- 查看各数据库占用磁盘空间大小 select TABLE_SCHEMA, concat(trunca

qiao的博客 1154

机器人控制算法九之 位姿描述与空间变换

机器人控制算法九之 位姿描述与空间变换

yohnyang的博客 1032

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

MySQL数据清洗到TiBD

一、业务背景 公司主要做的业务是类似贝壳的二手房租售,数据库中存了上亿级别的房源数据,之前数据库使用的是 mysql,后面需要将 mysql 数据库切换成了 Tidb,在切换的过程中,需要将老库的数据经过数据清洗后再存入新库(因为有一些表结构的设计变了),其中我们处理的一个逻辑就是将房间下业主信息从老库清洗到新库:我们需要按照城市维度,查询新库所有的房间,然后拿着新老库的房间对应关系,再到老库中找到所有对应的房间,然后通过房间再找到每个房间对应的业主信息,最后将业主的不同维度信息(一共5个维度信息)清洗到新

yanzigejuly的博客 2626

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MySQL至KingbaseES迁移最佳实践(上篇):迁移准备与实施规划

场景:之前做过的一个电商系统的库存检查函数,当库存不足时需抛出自定义异常。原MySQL函数BEGINEND IF;转换后KingbaseES函数DECLAREBEGINEND IF;END;核心转换点MySQL的SIGNAL SQLSTATE需替换为KingbaseES的RAISE EXCEPTION语法- 异常信息通过USING ERRCODE子句指定SQLSTATE,保持错误码兼容性迁移验证最佳实践单元测试覆盖。

程序边界 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

MySQL 8 数据清洗总结

上述库表的关系:1:N = 项目 :案卷。

zhouzhiwengang的专栏 1700

mysql数据清洗_mysql数据库如何实现亿级数据快速清理

今天收到磁盘报警异常,50G的磁盘被撑爆了,分析解决过程如下:1. 进入linux服务器,查看mysql文件夹中各个数据库所占的磁盘空间大小看到了吗,光olderdb就占了25G2. 用SQLyog登录mysql数据库,查看数据库各个表的占用空间情况SELECT CONCAT(table_schema,'.',table_name) AS 'aaa',table_rows AS 'Number o...

weixin_35657612的博客 1257

pgloader数据清洗:如何在迁移过程中自动清理和转换数据

pgloader是一款强大的数据迁移工具,专门用于将数据从各种来源高效加载到PostgreSQL数据库。在实际的数据迁移过程中,数据清洗和转换是确保数据质量的关键环节。本文将详细介绍如何利用pgloader在数据迁移过程中实现自动化的数据清理和转换功能。 ## 为什么需要数据清洗?🚀 在数据迁移项目中,源数据往往存在各种问题:格式不一致、编码错误、空值过多、数据类型不匹配等。手动处理这些问题

gitblog_00591的博客 762

从 MySQL 大量数据清洗到 TiDB 说起

作者:luzizhuo 原文来源: https://tidb.net/blog/be54d91d ...

TiDB 社区干货传送门 322

MySQL 到 Hadoop:Sqoop 数据迁移 ETL

文章目录ETL:Extract-Transform-Load 数据迁移过程一、Extract 数据抽取1. ODS:Operational Data Store - 可操作数据存储1.1 简介2. DW:Data Warehouse - 数据仓库3. DM:Data Mart - 数据集市二、Transform 数据清洗和转换1. 数据清洗2. 数据转换三、Load 数据加载四、数据迁移方法1.Sqoop1.1 增量导入1.2 一致性保证 ETL:Extract-Transform-Load 数据迁移过程

还是应该要努力的(12点前睡觉!!!!! 985

实验4:迁移MySQL数据到OceanBase

实验4:迁移MySQL数据到OceanBase

Skye的博客 1356

5分钟搭建MySQL数据清洗原型系统

最近在做数据迁移项目时,经常遇到需要清洗脏数据的场景。后来发现用MySQL的REPLACE函数配合简单的前端交互,可以快速搭建一个数据清洗原型系统,今天就把这个经验分享给大家。实际体验下来,从上传数据到生成清洗规则只要5分钟,比本地开发环境配置方便多了。特别是他们的实时预览功能,修改规则后立刻能看到数据变化,省去了反复执行SQL的麻烦。特别适合做这种原型开发,内置的MySQL环境可以直接测试REPLACE函数效果,还能一键部署成可交互的Web应用。数据清洗是ETL过程中最耗时的环节之一。

NightshadeEagle34的博客 939

你们公司有做过数据迁移吗,行业中常见的数据迁移方案,了解下,每个人技术人必备的技能

互联网金融行业发生了翻天覆地的变化,相对应的金融科技也在不断的更新和迭代,每次有新的软件系统出炉的时候,就是老的软件系统命运终结的开始,老的项目当然不会束手就擒,它也会做最后的挣扎,当你从它身上迁移用户或者商户的时候,它会给你带来很多麻烦,比如说,它会临时罢工、出现资金损失等等不可忽视的问题,因此,迁移是个大任务,有的时候迁移并不亚于开发一套新系统的难度,甚至可以说是有过之而无不及。 哪些场景需要迁移 我们总结了各种需要迁移的场景。 字段迁移 原来设计的字段大小不能满足现在业务的需求,直接在原表上扩

jackl 4652

Kettle ETL工具实战:从MySQL到数据仓库的完整迁移流程(附常见错误解决方案)

本文详细介绍了使用Kettle ETL工具将MySQL数据迁移至数据仓库的完整实战流程。内容涵盖迁移前的战略规划、环境搭建、核心转换设计(抽取、清洗、加载)、作业编排与调度,并重点提供了内存溢出、连接失败、数据重复等常见错误的解决方案,帮助读者构建稳定高效的ETL管道。

nept的博客 1048
上一篇: 策略模式+SpringBoot自动注入
下一篇: Mysql分页查询优化
wheree
博客等级 码龄9年 22粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值