请教Java处理大批量的数据

请教Java处理大批量的数据,第1张

首先看是什么文件?txt?还是xml?

如果是txt的话我们直接通过IO将其中的内容看做一个字符串,接着去找个正则表达式匹配(如果楼主正则表达式不错的话)一下那么很快就可以得出你想要的结果了。

如果xml的话则遍历用户节点然后找到相应的 userId的节点下的商品id的节点。

其实还有个方法就是通过spilte方法将它分成数组。。。然后遍历数组来得到想要的结果。。。正则表达式如果写出来应该是最快的,比较符合楼主的要求。。。

List<Student>list = new ArrayList<Student>()

for(int i=0i<list.size()i++){

Student st = (Student)list.get(i)

Object o = getHibernateTemplate().get(Student.class, st.getStudentId())

if(null == o){

...

Address addr = new Address()

...

getHibernateTemplate().saveOrUpdate(addr)

getHibernateTemplate().saveOrUpdate(o)

getSession().flush()

getSession().evict(addr)

getSession().evict(o)

} else {

...

Address addr = methodForFindAddr(o)

...

getHibernateTemplate().saveOrUpdate(hql)

getHibernateTemplate().saveOrUpdate(o)

getSession().flush()

getSession().evict(addr)

getSession().evict(o)

}

}

现在实现如上面代码所示,如果list数据量比较小的话,还可勉强凑合,若超过数万条数据,需耗费大量时间,有什么好的建议对此进行优化?

我曾试两种方法:1.过线程池的方式,可方法methodForFindAddr可能会出现同步问题,线程之间数据串了。

2.将所有saveOrUpdate的对象抽取出来,循环批量保存,每循环50次,flush一次。可是两个循环耗费的时间仍然很长。

sql语句要快1.不必要的列就不用查出来2作为查询的条件列设索引3.如果查询的表数据大于500万条数据,表创建之初就应该建立表分区,依据分表去查

最最重要的是传输给前台页面的数据量尽量简化减少传输量,比如时间数据最好不传,自己规定个顺序,依据顺序前台生成对应的时间非要传可转为毫秒数去掉最后四个零(依据实际情况而定,因为时间只要求精确到分),用[]不用{}(key就不用传了,根据商量好的下标对应提取)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6831755.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存