Java千万级别数据生成文件思路和优化
上一篇 / 下一篇 2012-04-26 11:04:30 / 个人分类:Java
.`(FuBp&H0 程序刚开始设计的时候说的是最多百万级别数据,最多50W数据生成到一个xml文件里面去,所以在做测试的 时候自己也只是造了100W的数据并没有做过多数据量的测试,然后问题就来了....由于程序使用的局点数据量巨大,需要生成xml文件的客户资料接近千 万级别的程度,而现场对程序的配置大约是100W条数据生成一个xml文件里面去,程序在这样的大数据量下面偶尔会有崩溃。
%FS]^D00O_lw?uD%t p0 最近几天现场催的比较紧,最近抽空把这个问题处理了一下,在解决问题的过程中我把解决的步骤和方法记录了下来,正好和大家共享一下。51Testing软件测试网x*J`*h)IkG
51Testing软件测试网%Lga;Y:nD&G&Z7Sf现场提的问题概况:
)V;Z#nb0h QqM051Testing软件测试网h;u)X DX~R数据量:生成xml,每个文件100W+ 条的数据
(O2z{.g0O0mqqg1KSj0 内存控制:最好不要超过512M51Testing软件测试网J:V i.VkTsR!OL
51Testing软件测试网$["G#c&yxG'j@$c问题详情:在处理70W左右的时候内存溢出
d1@qR-}bl-v3oP0'?8b@ D3c:T7_V0 一、先来看一下程序要生成的xml文件的结构51Testing软件测试网g^:e6i&}x-g:y%e
|
二、给大家说一下如何把大数据生成xml文件
'q6y+r j^+cK051Testing软件测试网K O j-u2xIV1、小数据量的情况下 < 1W条数据51Testing软件测试网GKBU`Bk6p
2b)Qm^DG0 比较好用的方法是使用开源框架,比如XStream 直接把javabean 生成 xml
aR&Br\7sd0ON0@;xWyz&[1^0 优点:api操作简单,方便维护
Nya1R1s(@H0p0S3LI7h3SR0 缺点:数据量大的情况下太消耗内存51Testing软件测试网w:_%U$oVxt
zHh K7`:Q0|0 2、大数据量生成一个xml文件(本程序采用的方法)
d%EKm*bM!sI051Testing软件测试网W'}~1ZQQU}自己做的一个可以使用极少的内存生成无限制大的xml文件框架由3部分生成xml文件
I4^(`GW%JH02@4B:Gqd1_T0 第一部分:生成文件头51Testing软件测试网 t?+l-CN{Q^_
0^WS?6t0 例如:xxx.toXML(Object obj, String fileName)51Testing软件测试网9Ok+b]%\
51Testing软件测试网5F qeO1D第二部分:通过每次向文件里面追加3000(可配置)条数据的形式生成文件块
(v+|6E3_"\W Cn-k[@+P0wq#g&V\D,a8h7U~0 例如:xxx.appendXML(Object object); //object 可以是ArrayList 或者一个单独的javaBean
1e'IB5_/L IJ~04i6P(F.OtIV0第三部分:生成xml文件尾巴51Testing软件测试网ZSPG2Htc)H
51Testing软件测试网%H.^ I\[6LW例如:xxx.finishXML();
p2l |b'[051Testing软件测试网.u7~f6pVl Zn程序中的调用:调用xxx.toXML(Object obj, String fileName) 生成文件头之后,可以循环从数据库中读取数据生成ArrayList,通过xxx.appendXML(Object object) 方法追加到xml文件里面,xxx.finishXML() 对文件进行收尾
mG-} mx.u2}051Testing软件测试网!E"cU }pZ1JS-t,S对框架说明:我上面提供的例子有文件头 + 文件块 + 文件尾巴. 如果和你们的实际使用文件不太一致的话,可以参考上面提供的思路修改一下即可,主要的方法是把相同的文件块部分分离出来通过追加的形式写入xml文件.
3|*_%e*I%V2A0rBX@0$zM$K3k&h