社区
Web 开发
帖子详情
100分求教:十万条数据,如何一次性插入数据库,才能保证效率?
tttk
2006-08-31 04:44:07
一个上报数据的项目,一次上报的数据记录量可能多达十几万条,甚至更多。
曾经想过用数据库提供的import/load工具来导入,但却苦于不知道如何在java中调用。
看了论坛里以前的一些帖子,对于大批量的插入操作,很多朋友都建议使用批插入方式(batchUpdate)。但如此巨量的数据如果一次性提交,是不是会极大的影响服务器性能?
麻烦大家给点建议,谢谢。
...全文
5506
63
打赏
收藏
100分求教:十万条数据,如何一次性插入数据库,才能保证效率?
一个上报数据的项目,一次上报的数据记录量可能多达十几万条,甚至更多。 曾经想过用数据库提供的import/load工具来导入,但却苦于不知道如何在java中调用。 看了论坛里以前的一些帖子,对于大批量的插入操作,很多朋友都建议使用批插入方式(batchUpdate)。但如此巨量的数据如果一次性提交,是不是会极大的影响服务器性能? 麻烦大家给点建议,谢谢。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
63 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ljhxuer
2007-04-12
打赏
举报
回复
分页提取数据,然后再批量插入提取的数据
fest
2006-12-26
打赏
举报
回复
mark
skysss
2006-09-18
打赏
举报
回复
用JDBC装数据实在太慢.
一般做数据迁移还是用JAVA
调用外部进程(load ,import)比较实际.
参见runtime.exec吧.
tttk
2006-09-04
打赏
举报
回复
谢谢楼上。你的想法基本上和我不谋而合。
惟一的不同在于,在上传完毕后,还需要反馈数据中有错的部分。
zhb1208
2006-09-03
打赏
举报
回复
关注
tttk
2006-09-03
打赏
举报
回复
楼上的朋友,这是一个现实中遇到的问题,何疯之由?
yaray
2006-09-03
打赏
举报
回复
如果用户数据实时性不强的话,可以考虑以下方案:
用户操作后执行:
. 源数据导出到指定格式的文件(xml/txt/...)
. 上传数据文件
. 显示操作成功(用户有感知的部分完成)
----
. 后台定时执行(在访问量小的时间,比如后半夜):
. 从指定格式的文件导入数据,建立索引,....
====
以上仅为想法,未经实际测试.
bestrong
2006-09-01
打赏
举报
回复
奉劝楼主不要用临时表
除非服务器的内存特别大 ,不然会报内存错误中断服务的。
seawalt
2006-09-01
打赏
举报
回复
你用SQl事件探查器不就知道Sql Server是怎么import/output的?
SINCE1978
2006-09-01
打赏
举报
回复
mark
tttk
2006-09-01
打赏
举报
回复
测试结果:采用临时表的方式,插入10万条数据,只需要3~5秒。(包含日志,没建立索引)
gaoan
2006-09-01
打赏
举报
回复
这个帖子有点技术含量,关注。
tttk
2006-09-01
打赏
举报
回复
谢谢。plphoenix()你的经验对我很有帮助,我的确应该考虑一下分表或者临时表的方式。
现在有一个方案:每次插入一个临时表中,在该临时表中不使用日志,不建立索引。然后在后台进行数据的转储。用户得到反馈的时间将会很快。
dgrwang
2006-09-01
打赏
举报
回复
如果你能用工具连上数据库,那就直接用dts工具就可以,如果不可以,是web与数据库服务器分开的,那用sql语句
dgrwang
2006-09-01
打赏
举报
回复
sqlserver中用xp_cmdshell
例如
EXEC master..xp_cmdshell 'bcp pubs..title in e:\test.txt -c -t, -S127.0.0.1 -Usa -P '
这种是通过文本导入,可以通过参数修改,xp_cmdshell也可以导入excel
或者用BULK INSERT
例如
BULK INSERT pubs.dbo.[title] FROM 'e:\test.txt'
WITH (
DATAFILETYPE = 'char',
FIELDTERMINATOR= ',',
ROWTERMINATOR='
'
)
xp_cmdshell会有安全隐患,所以一般网站数据库管理员都可能会封,BULK INSERT在2000下没问题,在2005下好像验证更严格。
两个的速度,10w条都不超过10秒
plphoenix
2006-09-01
打赏
举报
回复
其实你可以先试一下插入1000条或多一点看看要多少时间,然后再算出来是不是能够接受这样的等待.
plphoenix
2006-09-01
打赏
举报
回复
以前是招行c/s下的sybase,项目里面也有部分功能是和你现在的一样的...
我以前是删除索引然后再建的,但是这个有个特点的,本身数据表内数据相对插入的数据不是多太多倍(300w/60w),所以会有点用处,lz现在这样可能不是太合适了,5000w的表建索引的话估计得半个小时了(我以前的服务器配置和你差不多,就是CPU是4个双核的).
我想要是我做的话我会通过先建临时表,然后直接插入主表.不删索引.写日志(其实要是直接把一张表全部插入到另一张表的话这个影响不了太多时间的,同时由于插入时间会比较长,所以为了防止意外还是应该写的).
其实现在的根本是这张表的大小相对硬件配置来说太大了,最好能分表
rikee19810706
2006-09-01
打赏
举报
回复
mark
leiyong000
2006-09-01
打赏
举报
回复
暂时关闭日志,直接在后台做吧
tttk
2006-09-01
打赏
举报
回复
呵呵,plphoenix() 何出此言啊?以前做过类似的项目?
加载更多回复(43)
数据
库
水平切
分
的实现原理解析——
分
库,
分
表,主从,集群,负载均衡器(转)
对于一个大型的互联网应用,每天几十亿的PV无疑对
数据
库
造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过
数据
切
分
来提高网站性能,横向扩展
数据
层已经成为架构研发人员首选的方式。 ...
Java中的大
数据
处理:如何在内存中加载数亿级
数据
在上一期的内容中,我们深入探讨了Java中常用的内存管理机制,如堆(Heap)、栈(Stack)以及如何使用JVM优化应用程序的性能。我们学习了如何调优垃圾回收(Garbage Collection,简称GC),并了解了Java应用程序在...
sql语句,执行,实现没有这
条
数据
就新增,如有这
条
数据
就修改
原 sql语句,执行,实现没有这
条
数据
就新增,如有这
条
数据
就修改 ...
2021 Java面试真题集锦
目录 … 1 大厂面试的基本流程 17 字节跳动 17 阿里 17 腾讯 18 网易游戏 18 面试前需要准备: 18 ...展示你在
数据
库
调优方面的经验 25 总结前文说辞 26 准备项目说辞时,更可以准备后继面试官的问
mysql
数据
库
连接过多的错误,可能的原因
分
析及解决办法
系统不能连接
数据
库
,关键要看两个
数据
: 1、
数据
库
系统允许的最大可连接数max_connections。这个参数是可以设置的。如果不设置,默认是
100
。最大是16384。 2、
数据
库
当前的连接线程数threads_connected。这是...
Web 开发
81,122
社区成员
341,743
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章