如果是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就不用传了,根据商量好的下标对应提取)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)