社区
Web 开发
帖子详情
100分求教:十万条数据,如何一次性插入数据库,才能保证效率?
tttk
2006-08-31 04:44:07
一个上报数据的项目,一次上报的数据记录量可能多达十几万条,甚至更多。
曾经想过用数据库提供的import/load工具来导入,但却苦于不知道如何在java中调用。
看了论坛里以前的一些帖子,对于大批量的插入操作,很多朋友都建议使用批插入方式(batchUpdate)。但如此巨量的数据如果一次性提交,是不是会极大的影响服务器性能?
麻烦大家给点建议,谢谢。
...全文
5645
63
打赏
收藏
100分求教:十万条数据,如何一次性插入数据库,才能保证效率?
一个上报数据的项目,一次上报的数据记录量可能多达十几万条,甚至更多。 曾经想过用数据库提供的import/load工具来导入,但却苦于不知道如何在java中调用。 看了论坛里以前的一些帖子,对于大批量的插入操作,很多朋友都建议使用批插入方式(batchUpdate)。但如此巨量的数据如果一次性提交,是不是会极大的影响服务器性能? 麻烦大家给点建议,谢谢。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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)
MySQL批量
插入
性能优化:从
100
万行
数据
导入实战看大
数据
导入
效率
提升
在
数据
库
日常运维和开发中,
数据
导入
效率
是衡量
数据
库
性能优化水平的重要场景。当面对百万级
数据
量的迁移或初始化任务时,单
条
INSERT的逐行写入往往因网络往返、事务提交与SQL解析等固定开销而变得异常缓慢。理解MySQL批量
插入
的底层原理,掌握多VALUES语句、JDBC的rewriteBatchedStatements参数以及LOAD DATA INFILE等主流导入方式的适用边界,是提升
数据
处理
效率
的关键。同时,合理调整innodb_flush_log_at_trx_commit、max_allowed_p
【高并发场景下的批量
插入
】:MyBatis中VALUES多值
插入
的极限优化方案
解决高并发下
数据
插入
性能瓶颈,深入解析MyBatis批量
插入
values多个值的优化策略。涵盖实际应用场景、foreach循环拼接与Executor批量执行的核心方法,提升
插入
效率
数十倍,系统稳定性和响应速度显著增强,值得收藏。
Spring Boot 批量操作实战:别再一
条
一
条
处理
数据
本文探讨了SpringBoot中批量
数据
处理的优化策略。针对批量操作中常见的性能问题,提出了8个关键优化原则:1)避免逐
条
操作
数据
库
,改用批量SQL;2)控制批量大小(建议
100
-
100
0
条
);3)避免长事务,采用
分
批提交;4)
分
页加载大
数据
;5)异步处理批量任务;6)
分
段更新避免锁表;7)善用
数据
库
原生能力;8)构建完整批量处理架构。核心原则是减少SQL次数、控制批量规模和避免长事务/大内存操作,从而解决大
数据
场景下的性能瓶颈问题。
网易一面:25Wqps高吞吐写Mysql,
100
W
数据
4秒写完,如何实现?
当需要成批
插入
或者更新记录时,可以采用Java的批量更新机制,这一机制允许多
条
语句
一次性
提交给
数据
库
批量处理。通常情况下,批量处理比单独提交处理更有
效率
addBatch(String):添加需要批量处理的SQL语句或是参数;executeBatch():执行批量处理语句;clearBatch():清空缓存的
数据
多
条
SQL语句的批量处理;一个SQL语句的批量传参;
一文读懂
数据
库
事务
首先说一下什么是事务。事务(Transaction)指一个操作,由多个步骤组成,要么全部成功,要么全部失败。比如我们常用的转账功能,假设A账户向B账号转账,那么涉及两个操作:(1)从A账户扣钱;(2)往B账户加入等量的钱。因为是独立的两个操作,所以可能有一个成功,一个失败的情况。但是因为在这种场景下,必须要
保证
事务,即要么同时成功,要么同时失败(一个失败需要回滚),不能存在从 A 账户扣钱成功,往 B 账户加入等量钱失败这种情况。
Web 开发
81,108
社区成员
341,721
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章