大数据量的批量更新方法
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='?'
分享到:
相关推荐
Spark和Flink平台大数据批量处理的性能分析
C#编写,大数据量数据进行批量插入数据库Access的程序
C#几种数据库的大数据批量插入,有关oracle,适合初学者学习使用
Java开发腾讯大数据批量导入【Aaron】,Java开发腾讯大数据
在Oracle数据库上导出上千万上亿数据的工具 cmd 到本目录 然后执行如下命令: ...例如:sqluldr2.exe user=u/pass@db query="select * from u.tablename" table=tablename head=yes FILE=d:\inf.csv
本程序比较简单,就实现了excel的读取、存入数据库,其实写入数据库用的SqlBulkCopy大数据批量导入 二、菜单功能 页面就实现了两个功能 1、不需要使用数据,直接读取excel并显示出来; 2、读取excel并写入数据库...
一、JDBC的批量插入 一、JDBC的批量更新 一、JDBC的批量删除 一、JDBC的批量修改
主要介绍了c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql),需要的朋友可以了解一下。
主要介绍了c#实现几种数据库的大数据批量插入,主要包括SqlServer、Oracle、SQLite和MySQL,有兴趣的可以了解一下。
内含有各种批量导入数据操作,并可以对比执行速度,百万数据导入只需一秒钟
大数据计算主要有批量计算和流式计算两种形态,目前,关于大数据批量计算系统的研究和讨论相对充分,而如何构建低延迟、高吞吐且持续可靠运行的大数据流式计算系统是当前亟待解决的问题且研究成果和实践经验相对较少....
HBase的优势在于并发检索和读的性能,在负载方面 选择了批量写入数据、并发读任务占多、并发更新任务较重、读取更改然后写回4类场景 ,充分检验了HBase数据库的并发执行能力。在机器学习和批处理方面相对基准测试...
C# 使用SqlBulkCopy类批量复制大数据
C#将excel数据批量导入ACCESS数据表中 源代码展示,批量将excel数据批量导入access数据表中 代码清晰,思路明确 不错的学习资料
从海量数据到大数据-数据挖掘算法、过程及应用案例,
阿里大数据计算服务MaxCompute-批量数据通道.pdf
主要用在大数据数据批量交换,在hadoop、hdfs、hive之间进行数据的批量交换
大数据环境下批量处理的机器智能识别技术分析.docx