大数据量插入方案咨询!

bgxbd 2019-06-12 01:58:27
有大概 5~6 万行数据需要入库(MsSQL),ADO 一次性 post 时间相当长而且网络中断就完蛋了,请问有什么方法可以分批导入,而且可以知道进度。 post 的过程貌似无法通过进度条显示数据的更新进度。
...全文
459 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
belsai 2019-06-19
  • 打赏
  • 举报
回复
PowerBuilder的数据管道了解一下。不知道你的数据源是什么,不能在服务器端通过MSSQL处理吗?SQL命令导入或SQLServer复制功能都可以
LinY_X 2019-06-19
  • 打赏
  • 举报
回复
看情况 应该没有太强的实时性要求吧 那就丢进队列 让后台开线程慢慢处理就是
bgxbd 2019-06-18
  • 打赏
  • 举报
回复
引用 7 楼 qq_42653619 的回复:
问题描述的有点简单,不会是用ado插入是直接通往互联网直连数据库吧?还是三层的架构?插入这么多数据的频率是什么样的?
三层架构,这个数量一周内至少有一次,分开线程处理是个好办法,但将数据合理分批次对我有些难道,另外网络环境的影响也很大;顺便了解一下,用ado插入是直接通往互联网直连数据库除了慢还有其他问题吗?
q1390539 2019-06-17
  • 打赏
  • 举报
回复
问题描述的有点简单,不会是用ado插入是直接通往互联网直连数据库吧?还是三层的架构?插入这么多数据的频率是什么样的?
bgxbd 2019-06-17
  • 打赏
  • 举报
回复
引用 5 楼 doloopcn 的回复:
批量插入,还要防止网络中断,那么应该开户事务分批执行,如: 线程1:Thread1 begin try ADOCN.BeginTrans; ADOQuery.SQL.Text:=分批1; ADOCN.CommitTrans; SuccessCount:=SuccessCount+1; except ADOCN.RollbackTrans; end; end; 如果还要进行失败重试操作的,在线程中的Except中记录好SQL,然后重试 你说的漫长的等待应该是没有开启事务,开启的事务,MSSQL服务器会自动分配资源以最优方式执行事务
数据分批大概的思路应该如何? 将数据分批读入内存再分派线各线程处理吗? 还是说在内存中将数据分配好批次号再让线程处理 ?
doloopcn 2019-06-13
  • 打赏
  • 举报
回复
批量插入,还要防止网络中断,那么应该开户事务分批执行,如:
线程1:Thread1
begin
try
ADOCN.BeginTrans;
ADOQuery.SQL.Text:=分批1;
ADOCN.CommitTrans;
SuccessCount:=SuccessCount+1;
except
ADOCN.RollbackTrans;
end;

end;

如果还要进行失败重试操作的,在线程中的Except中记录好SQL,然后重试

你说的漫长的等待应该是没有开启事务,开启的事务,MSSQL服务器会自动分配资源以最优方式执行事务
lao_yunger 2019-06-12
  • 打赏
  • 举报
回复
如果不用ADO,倒方便。如果一定要用ADO就麻烦多了,firedac数据访问技术倒容易子。
p47655255 2019-06-12
  • 打赏
  • 举报
回复
insert into XXX
select XXX
union all
select XXX

每白条 或千条 提交一次
bgxbd 2019-06-12
  • 打赏
  • 举报
回复
引用 1 楼 早打大打打核战争 的回复:
生成一个脚本文件,内容就是: insert into xxx ... insert into xxx ... ... 每次读一行执行一次SQL
这机制其实距 post 的意义一样,虽然可以知道进度,但慢长的等待不是我想要的
  • 打赏
  • 举报
回复
生成一个脚本文件,内容就是:
insert into xxx ...
insert into xxx ...
...
每次读一行执行一次SQL

2,507

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧