社区
Web 开发
帖子详情
100分求教:十万条数据,如何一次性插入数据库,才能保证效率?
tttk
2006-08-31 04:44:07
一个上报数据的项目,一次上报的数据记录量可能多达十几万条,甚至更多。
曾经想过用数据库提供的import/load工具来导入,但却苦于不知道如何在java中调用。
看了论坛里以前的一些帖子,对于大批量的插入操作,很多朋友都建议使用批插入方式(batchUpdate)。但如此巨量的数据如果一次性提交,是不是会极大的影响服务器性能?
麻烦大家给点建议,谢谢。
...全文
5602
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)
Spring Boot 批量操作实战:别再一
条
一
条
处理
数据
本文探讨了SpringBoot中批量
数据
处理的优化策略。针对批量操作中常见的性能问题,提出了8个关键优化原则:1)避免逐
条
操作
数据
库
,改用批量SQL;2)控制批量大小(建议
100
-
100
0
条
);3)避免长事务,采用
分
批提交;4)
分
页加载大
数据
;5)异步处理批量任务;6)
分
段更新避免锁表;7)善用
数据
库
原生能力;8)构建完整批量处理架构。核心原则是减少SQL次数、控制批量规模和避免长事务/大内存操作,从而解决大
数据
场景下的性能瓶颈问题。
【高并发场景下的批量
插入
】:MyBatis中VALUES多值
插入
的极限优化方案
解决高并发下
数据
插入
性能瓶颈,深入解析MyBatis批量
插入
values多个值的优化策略。涵盖实际应用场景、foreach循环拼接与Executor批量执行的核心方法,提升
插入
效率
数十倍,系统稳定性和响应速度显著增强,值得收藏。
网易一面:25Wqps高吞吐写Mysql,
100
W
数据
4秒写完,如何实现?
当需要成批
插入
或者更新记录时,可以采用Java的批量更新机制,这一机制允许多
条
语句
一次性
提交给
数据
库
批量处理。通常情况下,批量处理比单独提交处理更有
效率
addBatch(String):添加需要批量处理的SQL语句或是参数;executeBatch():执行批量处理语句;clearBatch():清空缓存的
数据
多
条
SQL语句的批量处理;一个SQL语句的批量传参;
SpringBoot+ThreadPoolTaskExecutor 批量
插入
百万级
数据
实测
前言 开发目的:提高百万级
数据
插入
效率
。 采取方案:利用ThreadPoolTaskExecutor多线程批量
插入
。 采用技术:springboot2.1.1+mybatisPlus3.0.6+swagger2.5.0+Lombok1.18.4+postgresql+ThreadPoolTaskExecutor等。
高效
数据
管理:Sled
数据
库
条
件删除与批量操作实战指南
你是否还在为嵌入式
数据
库
中大量
数据
的筛选删除和批量处理
效率
低下而烦恼?面对
十万
级甚至百万级
数据
,传统逐
条
操作不仅耗时,还会严重影响应用性能。本文将带你深入掌握Sled
数据
库
(GitHub 加速计划 / sl / sled)的高级特性——
条
件删除与批量操作,通过实用示例和性能对比,让你轻松应对大规模
数据
管理挑战。读完本文,你将能够:掌握基于范围和自定义
条
件的高效删除方法、实现批量
数据
的原子性操作、优...
Web 开发
81,110
社区成员
341,727
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章