快速从多个文件插入原始二进制数据以访问数据库

时间:2011-02-24 18:03:24

标签: c# sql database ms-access ado.net

我正在寻找从多个二进制文件中读取的最快方法,并将所有内容写入多个表中的单个MS Access数据库中。 SQL Server或任何其他数据库都不是一个选项。我正在使用C#。

假设我只有一个包含1 GB数据的文件。

  1. 文件以标题(包含列名代码)开头,后跟超过700 000个测量数据块。标头长度不到100个字节。一个数据块长度为1500字节(372 x单浮点数+ 12个字节,用于日期和时间)

  2. 必须在第一个数据库表中插入前84个单值

  3. 剩下的288个单值在9个表中平均分配,每个值为32个
  4. 每个表格行都有时间和日期作为第一列
  5. 目前,我正在使用二进制阅读器。我正在逐块读取并每块执行10次INSERT语句(ADO.NET)。那将是超过7百万的INSERT。

    1.5MB的执行时间约为1分钟--1GB将超过10小时。

    有没有办法更快地做到这一点?您认为可以期待什么?

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

您可能正在承诺每个插页。最好开始一个事务,处理一些固定数量的数据块,比如100或500,然后提交事务并开始另一个事务。保留已提交记录的文本文件日志,以便在出于某种原因需要重新启动时,您知道从哪里开始。

您可以尝试更改用于sycing的Jet引擎属性,但最好只在连接上开始SQL事务,然后在大量记录之后提交。您还需要像this VB example中一样启用自动提交。

此外,如果您指定了排序键,则撤消该键。加载所有数据后,使用ADOX将它们作为索引键。