1

我有一个非常大(超过 5000 万条记录)的数据集,我从旧的 Interbase 数据库导入到新的 SQL Server 数据库中。

我目前的做法是:

  1. 从 Interbase 数据库中获取 csv 文件(完成,使用了我在网上某处找到的名为“FBExport”的程序)

  2. 旧数据库的架构与新数据库不匹配(不在我的控制之下),所以现在我需要批量编辑某些字段,以便它们在新数据库中工作。这是我需要帮助的领域

  3. 编辑到正确的模式后,我正在使用SqlBulkCopy将新编辑的数据集复制到 SQL Server 数据库中。

第 3 部分运行速度非常快,诊断显示一次导入 10,000 条记录几乎可以立即完成。

我对第 2 部分的当前(缓慢)方法是我只是逐行读取 csv 文件,并查找相关信息(例如,csv 文件的 ID 为 XXX########,而新数据库每个 XXX 和 ######## 都有一个单独的列。ex2. csv 文件通过字符串引用模型,但新数据库通过模型表中的 ID 引用)然后将新行插入我的本地表,然后SqlBulkCopy在我的本地表变大之后。

我的问题是:这个数据编辑步骤的“最佳”方法(性能方面)是什么?我认为很可能有一种 linq 类型的方法来解决这个问题,它会表现得更好,如果可以的话,我将如何去做?

4

1 回答 1

1

如果第 3 步的导入非常快,我会很想创建一个其架构与旧数据库完全匹配的临时数据库并将记录导入其中。然后我会考虑在临时表中添加额外的列,您需要将 XXX######## 拆分为 XXX 和########。然后,您可以使用 SQL 将源列拆分为两个单独的列。您还可以使用 SQL 来执行您需要的任何基于 ID 的查找和更新,以确保记录关系继续正确。

将数据处理为可接受的格式后,您可以使用 IDENTITY_INSERT ON 将记录插入到最终表中,不包括所有遗留列/信息。

在我看来,在临时 SQL 数据库中执行此操作的主要优点是,您可以随时编写查询以确保使用旧键的记录关系仍然与使用新数据库自动生成键的记录正确相关。

这当然是基于我在 SQL 中进行数据转换/验证比在 C# 中更舒服。

于 2013-08-28T16:11:34.440 回答