大数据量的批量更新方法
1. 先说我遇到的难题,数据库用户表中有2400万条数据,而我需要更新所有用户的信息,前提我不能用update table_user set xxx='?',xxa='?';全表更新 因为公司有规定一次提交的事物不能超过50W,显然这里已经超过了50W达到2400W的事物数据(全表更新数据特大的时候需要执行相当长的时间),那么我将怎么更新呢?
2. 现在来说说我用什么方法去批量更新吧!思路:首先查询满足条件的数据量是多少(我的是2400万),然后决定每1万做一页,每一页由一个线程负责执行(项目规定最多同时只有30个线程跑,其余2370个线程在等待,这是个很好的控制,不然服务器受不了会挂的);这样执行速度比全表更新还要快很多,我测试过更新2400万数据只要30分钟,而全表更新最快要60分钟,慢的时候更新不出来。
3. 第二步中显然我有意忽略了几个重点部分
- 查询数据量很简单,直接count一下全表
- 记住我的文章标题,我是批量更新,且看我真实sql:
select t1.sysId from (select t.rowid as sysId,rownum as num from (select rowid from taf_user where status=#status# order by rowid)t)t1 where mod(t1.num,#pageSize#)=0 or t1.num=1 or t1.num=#recordSum#
其中有三个参数,status是属于自己的业务条件这里不介绍,第二个pageSize就是你准备一个线程一次更新多少数据(10000),第二个参数就是满足条件最后一笔的数据的行位置(也就是count出来的数据量,我的为24000000),这个查询会返回一个rowid分段(每10000为一段,看mod就能知道,其次还有num=1,num=24000000目的是保留第一个rowid与最后一个rowid,因为我要拿这两个的rowid做开始与结束,sql中有排序这是保证rowid顺序的)的集合,试想下这个rowid集合索引0与1这个区段刚好是1~10000行的数据,下个线程处理时从集合索引1与2取得rowidMin、rowidMax这个区段是10000~20000的数据,那么每个线程产生时给他一个编号告诉他处理哪块数据即可,这样拿rowid批量更新一段(10000)数据岂不飞快
- 上面没有提到我的update语句,有两个一个是更新第一段时是>=#rowidMin#与<=#rowidMax#,更新第二段时是>#rowidMin#与<=#rowidMax#这样是避免重复更新,这里贴出来:
update taf_user t set xxx='?',xxa='?' where t.rowid>=#rowidMin# and t.rowid<=#rowidMax# and status='?'
update taf_user t set xxx='?',xxa='?' where t.rowid>#rowidMin# and t.rowid<=#rowidMax# and status='?'
分享到:
相关推荐
本程序" C#大数据批量插入Access程序 "就是针对这种需求而设计的,它允许开发者高效地将大量数据导入到Access数据库中。 Access数据库虽然在处理大规模数据时可能不如SQL Server等大型数据库系统强大,但在某些场景...
本篇论文名为《Spark和Flink平台大数据批量处理的性能分析》,主要探讨了当前大数据处理中广泛使用的两个开源框架Apache Spark和Apache Flink在批量处理方面的性能差异和相似之处。文章通过分析Spark和Flink这两个大...
"大数据批量插入之数据库篇" 在大数据时代,数据批量插入是数据库操作中不可或缺的一部分。特别是在处理大量数据时,批量插入可以大大提高数据库的写入效率。今天,我们将讨论几种数据库的大数据批量插入,包括 ...
在Oracle数据库上导出上千万上亿数据的工具 cmd 到本目录 然后执行如下命令: ...例如:sqluldr2.exe user=u/pass@db query="select * from u.tablename" table=tablename head=yes FILE=d:\inf.csv
Java开发腾讯大数据批量导入【Aaron】,Java开发腾讯大数据
本程序比较简单,就实现了excel的读取、存入数据库,其实写入数据库用的SqlBulkCopy大数据批量导入 二、菜单功能 页面就实现了两个功能 1、不需要使用数据,直接读取excel并显示出来; 2、读取excel并写入数据库...
批量更新的原理与批量插入类似,都是通过`PreparedStatement`的`addBatch()`方法将多个更新操作加入到一个批处理队列中,然后调用`executeBatch()`方法执行这些更新操作。这种方式可以显著减少网络往返次数,提高...
在C#中,进行大数据批量插入到不同的数据库如SQL Server、Oracle、SQLite和MySQL时,开发者需要考虑每个数据库系统的特性和API。以下是对这四种数据库批量插入操作的详细讲解: 1. **SQL Server批量插入** SQL ...
在IT行业中,批量导入数据和大数据导入是两个关键任务,特别是在数据分析、数据库管理和大数据处理领域。这些操作对于高效地处理海量信息至关重要。本篇将详细阐述这两个知识点。 首先,批量导入数据是指一次性处理...
为了提高性能,开发人员可以利用第三方库,如EFUtilities,来进行批量的插入、更新和删除操作。 EFUtilities是针对Entity Framework设计的一个扩展,它的主要目的是优化大数据操作的性能。这个库提供了一种简单且...
JPA没有内置的批量保存方法,但我们可以利用`saveAll()`方法来实现批量插入或更新。例如,我们有一个用户列表,想要一次性保存到数据库: ```java List<User> userList = ... // 初始化用户列表 userRepository....
支持批量,一键自动合并 支持xlsx、csv、xls 支持按表头合并 支持表头不一致,意义相同的表头合并 支持自定义列、自定义sheet 支持跳过表头尾说明行 支持自定义子表数据行数 支持添加数据来源列 支持跳过空白列 支持...
"行业分类-设备装置-大数据的写入方法和装置、读取方法和装置及处理系统.zip"这一压缩包中,主要涵盖了大数据存储和访问的核心技术。下面我们将详细探讨这些关键知识点。 1. **大数据的写入方法**:大数据写入通常...
在C#中,进行大数据批量插入到不同的数据库如SQL Server、Oracle、SQLite和MySQL是常见的需求,这可以显著提高数据处理效率。以下将详细介绍如何在这些数据库中实现批量插入。 首先,我们关注C#中一个关键接口`...
在大数据环境下,数据量持续增长,传统的批量学习方法难以应对,因为它们需要一次性加载所有数据进行训练,这在资源和时间上都是不切实际的。增量学习则允许模型随着新数据的不断到来而逐步更新,减少了对内存的需求...
大数据平台建设方法解决方案 大数据平台建设方案旨在帮助企业适应数字化转型,有效地管理和利用海量的数据资源。随着互联网、移动设备和物联网的迅速发展,数据量呈现爆炸式增长,预计到2020年全球数据使用量将达到...
"绿色-批量大数据筛选剔除非微信用户.zip" 这个压缩包文件,显然为我们提供了一个针对特定目标——非微信用户的批量数据过滤工具。下面将详细探讨相关知识点。 首先,我们要理解“批量”这一概念。在大数据领域,...
【智能电网大数据流式处理方法】智能电网大数据流式处理是一种高效的数据管理和分析技术,它在供电企业中扮演着至关重要的角色。随着城市用电需求的增长和多样化的用电要求,供电企业需要更科学地管理和整合数据信息...
"无线城市大数据离线处理系统及其大数据离线处理方法"这一主题,涉及了多个关键领域的知识,包括大数据处理、云计算、物联网以及离线分析技术。接下来,我们将深入探讨这些知识点。 首先,无线城市是指通过无线网络...