论坛首页 Java版 企业应用

一次性插入十万条记录,如何控制在1秒之内?

浏览 15153 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2008-04-16
用导入工具做10w/s是完全有可能, 取决于每条记录的大小,类型等
以前用oracle测试过, 普通PC, SATA II硬盘, 平均每秒可以导入13W多记录.
主要瓶颈还是磁盘IO, cpu和内存问题不大, SATA II的磁盘IO速率才50MB/s

可以先将记录写成文本,考虑使用ramdisk等技术, 加快文本文件的读写, 然后导入数据库
   
0 请登录后投票
时间:2008-04-16
armorking 写道
XMLDB 写道
经常性插入10万数据?
不是楼主的需求出了问题就是把非常态当常态处理,如果几天插一次10万数据,等个把小时算得了什么


楼上上的有道理
如果是“经常性插入10万数据”的话
这样的操作作上几百次,数据就变成千万级了
往一个已经有数千万数据的表里插数据,将是一个无比艰巨的任务

对啊,楼主的需求到底是怎么样的啊?!
真的需要如此频繁的插入如此多的数据嘛?!
   
0 请登录后投票
时间:2008-04-16
journay 写道
cpu2.0,2G内存,数据库用sql2005,用prepareStatement批量提交大约在5秒左右,还能怎么优化?


难道还不够快么

插入的性能已经完全可以接受了。
我觉得需要考虑的是,如果存在频繁的这么大量数据插入,海量呀.. 该怎么提高和优化检索性能~
   
0 请登录后投票
时间:2008-04-16
lishali12345 写道
armorking 写道
XMLDB 写道
经常性插入10万数据?
不是楼主的需求出了问题就是把非常态当常态处理,如果几天插一次10万数据,等个把小时算得了什么


楼上上的有道理
如果是“经常性插入10万数据”的话
这样的操作作上几百次,数据就变成千万级了
往一个已经有数千万数据的表里插数据,将是一个无比艰巨的任务

对啊,楼主的需求到底是怎么样的啊?!
真的需要如此频繁的插入如此多的数据嘛?!

需求是没有问题的,只是你们没有碰到而已。比如抓取互联网的新闻,那就不仅仅是10w 的数据量了。
提个建议,你可以分流数据到其他机器(前提你还没有做分布式),在做个缓存。应该可以敲定。
   
0 请登录后投票
时间:2008-04-16
Godlikeme 写道
把数据转成数据库特有格式数据文件,用import类似命令是最快的。
要用程序处理多线程同时插多张临时表,然后insert into table select * from tmp_table。
如果单条记录数据量很大,不管怎么样10万条还是很难的。



我用过类似的方法,先给爷面返回数据,然后多个后台线程开工来吧这些数据进行插入。
似乎是我能想到的比较容易实现的方法了。
   
0 请登录后投票
时间:2008-04-16
因为你要插入的是一万条数据而不是几百条数据所以必须花费比几百条数据更多的时间
   
0 请登录后投票
时间:2008-04-16
有种办法就是用大型计算机插入,这样你认为有必要吗?
   
0 请登录后投票
时间:2008-04-16
dearmite 写道
supttkl 写道
我机器 :c41.6 cpu,1g内存
插入100万条记录用preparedStatement耗时883秒
用存储过程
91秒



用存储过程快这是正常,
但是,100W条记录 的数据,你的存储过程如何写呢??

有些不太明白。

打开一次连接。抛个for循环啊!
循环100万次就行了
我的测试环境单线程!没有使用批处理!
如果启用多线成,使用批处理的话!估计插入10万条记录1S能搞定吧!
存储过程确实快。快就快在sql语句存储在数据库的高速缓冲区!数据库不需要编译sql语句啊!

还有硬盘IO可能是瓶颈啊,组个硬盘阵列可能更快!
   
0 请登录后投票
时间:2008-04-16
一般硬盘的最大写入速度是40MB/s。
如果你的数据的大小超过40M,无论你怎么努力,也是没有用的。(放到内存里不算)
   
0 请登录后投票
时间:2008-04-16
还没遇到过这类问题...BT点。
   
0 请登录后投票
论坛首页 Java版 企业应用

跳转论坛:
JavaEye推荐