关于字符串的拼接问题的讨论

felixlv 发布于 2013/05/18 20:58
阅读 247
收藏 0
有一个需求:比如一个User对象有属性userno,name,age.从数据库查询一个User对象集( 查询 出来的数据有10W条),并按照User的属性有序的拼接成字符串。要考虑性能问题。
有两种做法考虑:1.查询对象集(10W个)---->遍历该对象集--->字符拼接
                          2.在数据库里拼接(存储过程+游标)------->直接查询
有两种实现:1.基于Ibatis实现  2.基于JDBC实现
求各路大神指教,有什么好的想法及做法?谢谢!
加载中
0
felixlv
felixlv

引用来自“何天贵”的答案

个人觉得10W条的数据需要考虑到内存问题,建议不要把这10W条数据读到内存中,否则多来几个线程,你的JVM就Outofmemory了。最原始的就是最简单的,用最原始的ResultSet +StringBuffer的append方法是最好的。用存储过程后续维护比较麻烦,并且将计算的压力也丢给数据库,久而久之,影响DB性能
基于Ibatis的查询是一次性读取10W数据到内存中的么?难道基于JDBC的ResultSet+StringBuffer不是一次性读取数据到内存中的? 我只知道Ibatis利用反射机制把ResultSet转化为Object,这步操作在实现该问题上是多余的,所以利用JDBC做法。实际上,我也做过测试,基于JDBC是比基于Ibatis要快一些。
何天贵
何天贵
关键是你这批数据在内存中的份数,用ResultSet的方式在JVM只有一份StringBuffer这份数据。ibatis好像有直接的方法能取到ResultSet,反正不要先转换成List再遍历
0
何天贵
何天贵
个人觉得10W条的数据需要考虑到内存问题,建议不要把这10W条数据读到内存中,否则多来几个线程,你的JVM就Outofmemory了。最原始的就是最简单的,用最原始的ResultSet +StringBuffer的append方法是最好的。用存储过程后续维护比较麻烦,并且将计算的压力也丢给数据库,久而久之,影响DB性能
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部