超大批量数据的插入(200分)

  • 主题发起人 主题发起人 pychd
  • 开始时间 开始时间
P

pychd

Unregistered / Unconfirmed
GUEST, unregistred user!
前台:delphi5,后台:mssql7。
有大量的数据要从dbf迁到server,超过800万条。server上为了数据唯一性和保证日后
的查询速度,建有索引。曾采用过以下办法:
1。使用table.insertrecord,能很好的过滤无用、非法、重复数据,但是速度比较慢,
大概60条/秒,高的时候100条/秒;
2。使用batchmove,由于有些数据非法,无法跳过,不可行;
3。使用过query的insert table()...,速度比1方法还慢
4。使用adostoredproc,速度亦比1方法慢
5。未使用过query的insert ..select ...,因为不能批量放弃数据。
请各位高手指点,200分!
(新来,不太懂规矩,如有不当,请指出!)
 
用tbatchmove,设abortonkeyviolation,abortonproblem为false;
把正确的先复制过去.
 
估计没有什么好办法,60条/秒的话,一天时间也差不多啦,比找一个好方法所用时间快多啦。
 
用sqlserver的DTS (data transformation service)试试,
他是microsoft专门设计的数据传输工具.
 
用BCP试试,不过这个东西编起来很麻烦的,Sql Server中的介绍都是VC的,转换到Delphi
格式比较麻烦,我这里有一个单元,但是是公司的,不好拿出来。
如果你只是想把数据导入,并非专门为了编程导这种数据的话,Sql7中有一个工具的,在你
的Sql 7程序组下,有一个Import and export Data这个选项,这是Sql 7自带的导数据工具,
速度很快,基本上每秒几千条,应该满足你的要求了吧。
试试
 
用delphi的datapump工具就可以了,速度简直是不可想象,我把db倒到sql6.5中,40M的东西
一下子,
你先在odbc 中建个dbf数据源,再在sql7中建个数据源,用datapump就ok了
 
我同意DEDMAN的方法,速度快也能过滤非法数据和重复数据。
 
我同意foolaliu的看法,编程序的方法速度肯定不如sql7。0自带工具快。
BCP的大概思路就是把数据作成文本文件,再由SQL Server处理(SQL SERVER 可以
处理文本数据库),需要两次处理。而且,把DBF转成文本需要按照SQL Server,
和你的BCP的定义。
 
我曾经倒入大批量数据(电信用户)到sqlserver内
先是用自己编程来做2小时也只到了24%

然后 我,通过dbf->access->sqlserver 只要40分钟!,而且dbf到access 一旦进入,过滤非法
数据就非常容易,因为access提供的工具非常多,

一点经验。
 
都有道理。中原问鼎最简单。但我在从foxpro向paradox里倒的时候,blob 过不去。最后
从Access过桥。唉。
 
各种方法评判一下:
BCP:比较灵活,速度很快,如果数据太不规则,未必成功;
DTS:比较灵活,速度不错,提供比较灵活的手段,可以尝试,如果数据太不规则,未必成功;
DBF-ACCESS-MSSQL:看起来不错,ACCESS乱七八糟的东西的确不少,我没用过,值得试试;
DATA DUMP:速度的确奇快,我建议用它先把数据转到临时MSSQL数据库,然后处理数据;
编程实现:最保险了啦,把数据库分一下,几台机器一做,然后数据库合并,三、四个小时足够了吧?
 
还是CJ公允,不过还是用DATADUMP轻松些。
 
多人接受答案了。
 
后退
顶部