游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

批处理框架SpringBatch,数据迁移量过大如何保证内存

  概述
  本篇博客是记录使用springbatch做数据迁移时时遇到的一个关键问题:数据迁移量大时如何保证内存。当我们在使用springbatch时,我们必须配置三个东西:reader,processor,和writer。
  其中,reader用于从数据库中读数据,当数据量较小时,reader的逻辑不会对内存带来太多压力,但是当我们要去读的数据量非常大的时候,我们就不得不考虑内存等方面的问题,因为若数据量非常大,内存,执行时间等等都会受到影响。问题是什么
  在上面的内容当中我们已经提到了,我们面临的问题是数据迁移量大时的内存问题。但是这样的描述非常笼统,因此博主决定将这一部分单独拎出来说。
  在学习了springbatch的知识之后我们应该很清楚的一点是,每一个springbatch的step都包含如下的部分:
  即读数据,处理数据,写数据。这三个步骤里面最可能会导致内存变大问题的无疑是读数据环节。读数据作为springbatch的数据输入,是整个springbatchjob的开头逻辑。
  若我们的数据量不大,如只有几十万条,那我们无疑不会面临内存问题,即便一次将所有数据加载到内存当中,占的内存也不会非常多,且springbatch数据迁移的速度非常之快,几十万条的数据往往是几十秒的时间就可以迁移完成。但是当数据量变大之后,问题就不一样了。
  当我们的数据量达到数百万或上千万时,若一次性将所有数据全部读到内存当中,则会占据远远超出正常范围的非常大的内存。该问题示意图如下所示:
  我们写的任何程序都会有一个运行内存,假设这个内存的总容量现在只有4g,而我们数据库里需要操作的数据有8g,那么无疑,一次性的将数据读出来就会出错。这便是需要考虑得问题。Spring提供的reader实现
  spring提供了非常丰富的Reader实现,其中比较常用的从数据库读数据的有JdbcCursorItemReader,JdbcPagingItemReader等。JdbcCursorItemReader
  使用JdbcCursorItemReader的示例代码如下:BeanpublicJdbcCursorItemReaderCustomerCredititemReader(){returnnewJdbcCursorItemReaderBuilderCustomerCredit()。dataSource(this。dataSource)。name(creditReader)。sql(selectID,NAME,CREDITfromCUSTOMER)。rowMapper(newCustomerCreditRowMapper())。build();}
  JdbcCursorItemReader的好处在于使用简单,但是我们从它的sql就能发现,JdbcCursorItemReader会一次把所有的数据全部拿回来,当数据量过大而服务器内存不够时,就会遇到下面无法分配内存的问题:
  报错信息为:Resourceexhaustionevent:TheJVMwasunabletoallocatememoryfromtheheap。意思就是需要分配内存的数据太多,但是无法找到足够的内存了。
  反映在内存里,堆内存会呈现出如下的情况:
  随着每一次数据读入,堆内存都会增大,原因就在于JdbcCursorItemReader一次性读回了所有的数据,返回之后就会存在一个对象里面,而这个对象的尺寸过大,因此直接进入了老年代。在数据迁移完成之前,这些数据都不会被回收。如下图所示:
  毫无疑问,当我们的数据量大时不应该使用这种类型的reader来读取数据。JdbcPagingItemReader
  JdbcPagingItemReader的作用和它的名字一样,它可以分页读取数据,但是使用起来相比于JdbcCursorItemReader更加复杂,示例代码如下:BeanpublicJdbcPagingItemReaderitemReader(DataSourcedataSource,PagingQueryProviderqueryProvider){MapString,ObjectparameterValuesnewHashMap();parameterValues。put(status,NEW);returnnewJdbcPagingItemReaderBuilderCustomerCredit()。name(creditReader)。dataSource(dataSource)。queryProvider(queryProvider)。parameterValues(parameterValues)。rowMapper(customerCreditMapper())。pageSize(1000)。build();}BeanpublicSqlPagingQueryProviderFactoryBeanqueryProvider(){SqlPagingQueryProviderFactoryBeanprovidernewSqlPagingQueryProviderFactoryBean();provider。setSelectClause(selectid,name,credit);provider。setFromClause(fromcustomer);provider。setWhereClause(wherestatus:status);provider。setSortKey(id);returnprovider;}
  可以看到我们能够设置page的大小,JdbcPagingItemReader将根据这个页的大小,每次读取这么多的数据,因此这些数据返回保存的对象,就只会是小对象,因此他们不会直接在老年代里分配,而是先分配在年轻代,随着年轻代不断变大,minorgc也不断进行,回收掉已经处理完的数据,老年代的内存使用量不会有任何增大,类似下图:
  老年代内存不会有任何变化,年轻带会随着服务器数据迁移进行而增大同时被回收。
  在使用JdbcPagingItemReader时,有一个必须注意的地方就是排序关键字是必须指定的,原因在于排序是分页实现原理的技术基础。sortKey和我们指定的其他字句一起构建出SQL语句出来。在sortKey上必须使用uniquekeyconstraint约束,因为只有这样才能得以确保执行之间不会丢失任何数据。这也可以说是JdbcCursorItemReader相对便利的一点优势。总结
  数据量小时选择的方案差别不会很大,当数据量大时,为了有好的内存表现则使用分页的reader是必要的。但同时,因为要实现分页,也会带来一些不可避免的限制。

大家能把自己手机里觉得绝美的图片发出来看看吗?谢邀。手机摄影比不上相机精致、精细、精彩,因为设备不一样,技术技巧不一样,拍摄的作品差别有点大,但是我尽力了,选择光线,模式,抅图上多下功夫,不敢说绝美,但它是我努力拍摄的作品……千元机也有旗舰级体验魅族智能冻结3。0绝了!网友良心大厂大赞一直以来,安卓手机的流畅度都备受用户诟病,而且还有不少流氓应用,不断在后台自启动,拖慢手机系统的运行速度,给用户带来了非常不好的使用体验。同时,还有越来越多的用户开始误认为手机……贾玲的大碗娱乐会超越沈腾的开心麻花吗?1。开心麻花并不是沈腾的,尽管沈腾的个人价值已经超越整个麻花。2。沈腾与麻花的关系,是即隶属又合作的关系。沈腾也有自己的公司。公司与公司之间的合作,是近几年主要的利益分配……66岁华为女皇孙亚芳任正非背后的女人,竟是个狠角色?大家好,我是科技小七,欢迎收看本期科技资讯!大家都知道,华为的成功离不开几个核心的人物,除了创始人任正非以外,还有一个人,被称之为华为女皇,而这个人就是年满66岁的孙亚芳……为什么电信199手机号有的业务办不了呢?应邀回答本行业问题。中国电信的199号段按理说已经不是什么太新的号段了,整个号码是在2018年8月被工信部分配给中国电信的,但是现在199号段依然有一些应用无法注册,一些……数字货币雪崩,华为造车再刮旋风,赚钱效益引发黄金投资机会比特币周末日跌幅超过15,以太坊、瑞波币、柚子等数字货币跟随全线暴跌。全球爆仓将近45亿美元。究其原因,一、市场传闻,美国财政部或将指控多家金融机构使用加密货币进行洗钱。第二、……都说懂行买OV,半懂买小米,不懂买荣耀,真的是这样吗?都说这种问题是为了刷流量,真的是这样吗?现如今手机国内手机市场上,华米OV占据了绝大多数市场份额,其他小众品牌则瓜分剩余的市场份额。这两年华为因为芯片受限的原因,被迫让出……鸿蒙系统是套着安卓的皮嘛?在我看来,苹果系统是高速公路,速度快,但收费!安卓系统是省道,谁都可以走,但是呢,华为觉得路不好,所以把路面铺了一层,速度提升不少。小米VIVOOPPO等是觉得路上太单调……薇娅背后真的站着联想和淘宝吗?最近柳派人跟张捷求情说岁数大了,跟《突围》里的林满江一样得了癌症,求与人为善,网开一面,大家说要不要与柳为善?哈哈,老狐狸!把两头堵的选择题甩给了两位大咖和广大百姓。……为什么有很多人要买一个备用手机,难道手机卡要换来换去吗?为什我用备用机有5、6年了,主要原因有下面几个:1、我有两个手机号,而且都是不限流量的,我的工作是经常是出差,所到之处不可控制,为了不影响工作,一个联通号、一个移动号,不会因……外媒任正非这次真的怒了华为5G本该成为中国通信技术走向世界的一张名片,但由于老美的干预和施压,导致华为深耕多年、且十拿九稳的欧洲市场出现了巨大的反转,尽管华为5G技术设备经过了德国最高安全机构的解刨……三款好评度高的手机,实用性很强!看看有多少人在用1、iPhone12同样也有不少用户关注苹果产品,因为iOS系统的强大是无法拒绝的,虽然在价格上有点高,不过并没有影响其销量。前不久iPhone12对其价格做了调整。性能……
车主访谈10万级合资家轿,起亚K3经济耐用配置高,要什么日德10万元出头的预算,想买辆合资品牌家轿车,选什么好?捷达、桑塔纳、宝来,车型太老,又是大众套娃脸,没意思;轩逸、朗逸、卡罗拉,好像还不错,但价格高配置低,差点意思!……官宣世界杯,海信新风空调借势引爆双十一赛场日前随着双十一预售的开启,各大电商平台和品牌都已公布全新玩法。海信空调凭借多元化的产品矩阵,推出的多款高性价比的差异化高端产品再度迎合消费升级的潮流,在双十一赛场上大展身手。……红米K40Pro曝光,5000mAh55W,爱了爱了自小米11发布以来已经有一段时间了,我相信米粉已经体验过了,配置升级非常明显。3999元的起价简直是压倒性的,友商们也也没有放松,它将于1月11日发布,三星S21将于1月14日……使命召唤战区这么火,哪一张显卡玩最适合?(最终章)前言前面写了两篇关于使命召唤:战区的评测,分别对比了NVIDIA和AMD时下比较新的7张显卡,但是测试是A、N分组的,这最终章嘛,肯定是整合在一起,做个总结了。想回……灯灯灯灯灯!一文带你看尽各地献礼建党百年灯光秀百年建党光辉岁月在建党100周年之际,全国各地举办了各具特色的精彩灯光秀庆贺党的生日。以灯光渲意,以光影传情,这是音响灯光人对伟大祖国最真挚的祝福与诚意。今天,小编……2022款别克GL8陆上公务舱,重磅来袭MPV车型今年相当大热,各品牌可以说琳琅满目。在众多车友心中最满意的MPV车型那定是GL8。在10月13日我们的王者不负众望,2022款别克GL8陆上公务舱上市。从新车的……高通是扛不住用户吐槽来了次常规升级,还是另有生意经?骁龙888发布,高通是扛不住用户吐槽来了次常规升级,还是另有生意经?最近,高通发布了最新的旗舰芯片骁龙888,简单的理解这款产品相当于之前骁龙888的一个升级迭代款。……企业的智能升级怎么走?未来,加快价值链的推进AI时代已经到来,在新时期的国际形势下,人工智能进一步引领人类生产、生活方式的变革,如何在新时期浪潮中创新,实现数智能化升级,成为企业面临的共同问题。作为国家级开放创新和……根据调查显示,在过敏性疾病患者中,有高达70的过敏原是螨虫螨虫在我们生活中是相当常见的,他们无孔不入,秘密潜伏在床上的每一个角落,如果床上的螨虫数量过多,没有及时除螨,会严重影响我们的身体健康。根据中国流行病学调查显示,在三分之一的过……6寸掌上电脑到手直接更换SSD,现在的用户太硬核了6寸的掌上电脑你们见过吗?GPDMicroPC是一台专为工程师外出工作定制的便携电脑,整机重量才300克,但是性能却十分强大。MicroPC不仅拥有N4100四核处理器,……范以锦传统媒体转型的若干路径互联网自1994年4月20日进入中国以来,经过20多年的发展,从根本上重构了传媒生态,给传统媒体带来了前所未有的影响。转型,已成为传统媒体革命性变革的关键词。要顺利进行转型,就……实拍比亚迪宋PLUS,配12。8英寸旋转大屏,1。5T引擎扭说到比亚迪,很多人第一时间就会想到新能源汽车,但实际上家族燃油车实力也不弱。就比如说比亚迪宋PLUS,从定位上讲是一款紧凑型SUV,目前在售版本车型指导售价在11。5814。3……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网