如题,我想快速的导入,如果用读取每行一行行导入的话,真的很慢,谁能告诉我个快速的方法,每行的格式都是一样的
“读取每行一行行导入”并不是慢的原因,因为任何解决方案最后都是如此。区别在于,你如何分配CPU和IO来处理这个流程。
因此,你需要先摸清你的需求,文本文件中每行记录的长度固定吗?每行都是以换行符结束吗?有需要将数据类型转换的列吗?需要类型检查吗?如果需要的话,有多严格?数据插入需要检查吗?是否要处理插入失败的场景?
一些需求并不严格,因为数据的类型就是表中字段的,能不能详细说下应该怎么插入!
@ychyx: 我提到的类型转换是这个含义,你在txt中存放了一个表示数字:2034.12的字符串,很遗憾的是,数据库中对应字段的数据类型是浮点,那么在你的程序里你需要先读出字符串“2034.12”,然后再转换成浮点类型存入数据库。一般的情况下,这种应用都遵循如下流程:
1,从输入流读取一定大小的数据;
2,将读入的数据解析成标准格式;
3,插入数据库;
4,回到 1;
利用并行运算的优势,1,2,3可以并行执行,合理的分配为每一个阶段分配的线程数,可以找到一个最优的组合以发挥硬件的最大性能。其中每一个阶段又可以单独的优化,比如在1中,可以根据数据特点来制定如何读取数据,已经每次读取数据的大小;在2中,根据数据特点,采用最佳的标准化方式;在3中,可以采用SqlBulkCopy来简单的提高插入速度,当然批量插入多大,应该通过实际测试来调整,同时也要调整传输大小来适配。
代码的优化是无止尽,涉及到I/O操作时,尽可能的利用并行和IOCP可以提高CPU的利用率,让CPU把更多的精力的放在数据标准化上。
DTS,直接选择导入数据就行。很快的。当年csdn的密码就是这么导入的。其他的方法不太容易。
问题是我得需要在程序中插入
sql server中有导入数据的功能的。
我是需要用代码插入,c#
@ychyx: 用NPOI(excel 03) 或者是 EPPLUS(excel 07) 读取excel的内容,然后用多线程的方式插入这些读取到数据到数据库中。 数据的读取一次可以读取几万条,然后插入,下次再来读取剩下的几万条数据,这个可以做个定时的windows服务。 excel有行的限制,最多是 65535条吧。我先如果几万的数据读取影响到内存。可以几千条一读取。
读到内存,直接插
读到内存的话,由于我的数据量太大,在执行的过程中,当插入几万条数据的时候就会说内存溢出!!
@ychyx: 我做3千万条数据处理时候使用用DataRead,数据量大的话,3分钟搞定不过是SQL SEVER中,文本文件,要么你就分割一下,放到内存Table里面进行处理,一般4G内存的话,100多万条数据不是问题,不过我也不懂具体你一条数据占用多少字节,其他目前没有尝试过。
如果写程序的话,你看一下BULKCOPY的例子,可以先程序内把文本读取插入到datatable,再用bulkcopy类的方法插入表。
你可以参考我写的一篇博客:
某社区600万用户数据导入MYSQL、MSSQL、Oracle数据库方法。
我要将 username # password # email这样的格式导入到sql server中去,一共有600万行。使用bulk insert。