首页 > 编程知识 正文

几百万条数据怎么处理,如何处理大量数据

时间:2023-05-03 20:51:20 阅读:54302 作者:2032

摘要:公司的业务,一个逻辑涉及大量的数据。 举个例子,现有的手机(Mobile )和日志对象)实际上很少提供。 因为是日志,所以大多不修改,暂时这样理解吧。 假设这里讨论的日志对象允许修改。 其实我表现简单,一对多的关系,具体你可以自己想象和理解。 首先,公司使用的是Hibernate。 现在的代码是这样的

string hql=' fromdetailwheredetail.parent.id=: id '; listXXXobjs=Query(XXX ); for(XXXXXX:objs ) XXX.setxxxXXX.setxxxstore ) xxxx; }首先检查详细信息,然后循环设定值,最后保存。 看到这里,你可能会说,ID直接更新不就行了吗? 是的,当然可以。 但是,业务有其他逻辑。 更新只是其中的一部分。 回到主题,关于类似的情况,在公司写了很多次,所以决定打包。 此外,上述代码还有另一个危险。 那就是,明细多了之后,例如几百、几千个的话,有可能一次加载,卡就会堵塞,内存就会溢出。

贴上我封装的代码吧

import java.util.ArrayList; import java.util.Arrays; import java.util.List; 公共类数据帮助程序{/* * *处理数据量大时。 * @param size一次有多少个* @param IDs对象的id的集合* @param callBack回调函数*/publicstaticvoidsplitgroup (intsize,ListLong ids,列表长ids ) 列表长时间=new ArrayList long (; int total=ids.size (; for(intI=0; i ids.size (; I ) {doAction=false; TEMP.add(ids.get ) I ); if(temp.size(==size|| ) I==total-1 ) ) {doAction=true; }if(doaction ) callback.doaction ) temp; temp=new ArrayListLong (; } }上述代码主要分割数据。 例如,如果希望一次达到100,程序将计算是否达到100,如果达到,则调用回调函数。 回调函数是接口类型,必须自己编写实现。 在回调方法中,传递集合,其大小为100。

import java.util.List; /**处理大数据回调函数* */publicinterfacegroupcallback {/* * *回调方法。 size达到指定大小或最后一个数据时调用的方法* @param IDS包含指定的ids。 其大小为指定的大小*/publicvoiddoaction (listlongids ); }另外,传入的集合很可能不到100。 例如,如果为356,则调用四次回调函数。 也就是说,100、200、300每次调用一次,最后56条再次调用。

最后,写test

publicstaticvoidmain (字符串[ ] args )//让我们使用这四行代码模拟查询的详细信息。 现在,假设您查询了356个明细行。 不链接数据库,直接输入list。 listlongmovedocids=newarraylistlong (; for(intI=0; i 356; I ) {movedocids.add(long.parselong ) I ' ); //代码的改进datahelper.splitgroup(100,moveDocIds,new GroupCallBack ) @overridepublicvoiddoaction ) ) listlongids/ss //todostringhql=' fromdetailwhereidin (: ids ) ); //load//for (wmmovedocdoc : docs ) doc.setxxxdoc.setxxxx//store ) doc; }}; system.out.println('end '; }输出的结果是

[0、1、2、3、4、5、6、7、8、9、10、12、13、14、15、16、17、18、19、20、23、24、25、26 64、66 7、78、79、80、81、82、83、84、85、86、87、88、90、91、92、93、95、96、97、98、99 ] [ 100, 101] 11、112、113、114、115、116、117、118、119、120、121、122、123、124、126、127、128、129、130、1110 155、156、157、158、159、160、161、172、173、174、175、176、177、178、180、181、182、183、184 208、209、210、211、212、213、214、215、216、217、218、219、220、221、221 231、233、234、235、236、237 251 261、262、263、264、265、266、267、269、270、271、272、273、274、275、276、278、279、280、281 305、306、307、308、309、310、311] 321、322、323、324、325、326、327、328、329、331、332、333、334、…

总结:以上多只是对大量数据的处理方法。 我的代码实现类似于spring的XXXTempleate。

打小广告

我做了小组622539266 JAVA的知识交流。 如果有正在学习JAVA的人或者想学习JAVA的人,可以参加哦。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。