1

我正在编写一个内部应用程序,其中一个功能是从远程系统导入数据。来自远程系统的数据以 CSV 文件的形式出现。我需要将系统中的数据与 CSV 文件中的数据进行比较。

我需要对我的系统应用任何更改(添加和更改)。我需要跟踪每个更改的字段。

我的数据库已标准化,因此我正在处理大约 10 个表以与 CSV 文件中的数据相对应。实现这一点的最佳方法是什么?每个 CSV 文件每天处理大约 500,000 条记录。我首先使用查找 ID 从我的 SQL 数据库中逐行查询,然后使用 c# 逐字段进行比较,并根据需要进行更新或插入;但是,这需要的时间太长了。

有什么建议么?

4

3 回答 3

3

您可以执行以下操作:

  • 将 cvs 文件加载到数据库中的暂存表中;
  • 对其执行验证和清理程序(如有必要)
  • 对实时数据进行比较和更新
  • 清除临时表中的所有数据

使用这种方法,您可以使用您的 RDBMS 功能实现几乎所有的清理、验证和更新逻辑。

如果您的 RDBMS 是 SQL Server,您可以利用 SQL Server Integration Services。

于 2013-01-11T01:42:08.977 回答
2

如果您有任何东西可用作唯一键,则可以执行以下操作:

  • 创建一个新表 Hashes,其中包含唯一键和与该键关联的所有字段的哈希(不要使用.NET 的 object.GetHashCode(),因为返回的值会根据设计不时更改。我个人使用 Google 的 CityHash我移植到 C#)。
  • 当你得到一个新的 CSV 文件时,计算每个键的哈希值
  • 检查 CSV 文件中每一行的哈希表。
  • 如果唯一键没有条目,则创建一个并插入行。
  • 如果有条目,请查看哈希是否已更改。
  • 如果有,请更新哈希表中的哈希并更新数据。
于 2013-01-11T01:43:16.887 回答
0

扩展对您问题的第一条评论。

创建一个与您的 csv 文件格式匹配的适当索引表,并将数据直接转储到其中。

有一个带有适当查询的存储过程来更新/删除/插入活动表。

摆脱临时表。

于 2013-01-11T01:43:14.423 回答