【问题标题】:Moving large amounts of data from one database to another in chunks将大量数据从一个数据库分块移动到另一个数据库
【发布时间】:2011-05-19 22:18:12
【问题描述】:

我有一个表格,其中包含至少 1200 万行数据,如下所示:

Id (varchar(10) | Image (varbinary(max)
---------------- -------------------------
X123456789      | 0x....
1121132121      | 0x....
JF13232131      | 0x....

将数据从该表分块移动到另一个表的有效方法是什么。 我正在编写一个简单的 .net 控制台应用程序来执行此操作,我担心当我尝试一次加载所有 1200 万行时,我的应用程序会崩溃。

感谢您的帮助

附录#1:源数据库是oracle,目标数据库是sql server

附录 #2:我还将图像数据从 tiff 转换为 jpeg

【问题讨论】:

  • 请注意,发帖人强调这与复制数据无关——完全是虚假陈述。二进制数据是 TIFF,必须以 JPEG 格式写入目标数据库。所以,这不是数据传输问题。

标签: .net sql-server oracle data-migration


【解决方案1】:

“什么是有效的方法? 将数据从这个表移到另一个 分块表”

您认为需要以块的形式移动数据,因为您是在手动滚动工具而不是使用 SSIS。您认为您不能使用 SSIS,因为您想“在初始拉取后对数据进行一些转换/翻译”。你想应用哪些你认为你不能用 SSIS 做的转换?我的意思是 SSIS 可以做很多事情。 Find out more.

因为使用专门构建的工具比尝试编写自己的工具更有效。另一件事是,就避免数据损坏和数据丢失而言,在单个操作中迁移整个表是一个更安全的选择。


“我正在从 tiffs 转换图像 到 jpeg。 SSIS 可以为我做这件事吗?”

好的,很明显这是一个相当专业的要求,而不是我们期望 SSIS 内置的那种东西。但 SSIS 确实支持custom transformations,因此您可以编写一个转换图像的组件。

【讨论】:

  • 我正在将图像从 tiff 转换为 jpeg。 SSIS 可以为我做这件事吗?
  • 没有。但是,您的速度问题不是读取和写入数据之一 - tifff / jpeg 重新编码会烧毁您的 CPU。很好地歪曲了问题。
【解决方案2】:

首先,我不会尝试通过 .NET 应用程序移动 12M 行。我会使用像 SSIS(SQL Server 集成服务)这样的工具来做到这一点。 SSIS 非常快,可以支持事务并支持复杂的数据转换。 SSIS 就是为做这类事情而设计的。

但是,如果您必须在 .NET 应用程序中执行此操作。我可能会一次读取 1K 到 5K 行,将它们插入目标数据库,然后获取接下来的 1K 到 5K 行等。但这会比通过 SSIS 之类的工具慢得多。

【讨论】:

  • 鉴于我只有 2 个字段,您如何一次提取 1k 到 5k 行?这是我实际上无法理解如何实现的部分
  • 我还需要在初始拉取后对数据执行一些转换/翻译,这就是我不使用 ssis 的原因。
  • @zSysop - 每行的列数有什么区别?您一次移动 1-5K 行。每行有两列数据。
  • 我将如何拉 1k 和下一个 1k 等。我不能只从表中选择 * 行 = 第一个 1k,第二个 1k...
  • @zSysop - 您将要从“页面”中的数据库中检索行。你没有说你使用的是什么数据库,但如果你使用的是 SQL Server,你会想要使用 Row_Number() 函数。看看这篇文章:blog.sqlauthority.com/2007/04/03/…
【解决方案3】:

你应该看看SqlBulkCopy class,你也许可以用它一次移动整个桌子。

【讨论】:

  • 如果目标是 SQL Server,这很好。这个问题被标记为 Oracle,所以不清楚。
【解决方案4】:

我解决问题的方法是连接到 .Net 中的 Oracle 数据库并使用 DataReader 逐行读取数据。然后处理每一行以进行图像转换,然后只需将新数据插入 Sql Server 数据库。现在,我想这不会是一件快速的事情,但我看不出它会崩溃的任何原因,因为数据是从 Oracle 流式传输然后直接推送到 Sql Server 中的。

如果你想让它运行得更快一点,那么让多个线程进行转换并插入到 Sql Server 中不会太难。

【讨论】:

    【解决方案5】:

    你看过BCP吗?我们遇到了类似的问题,但对我们来说效果很好。

    【讨论】:

      猜你喜欢
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 2016-06-10
      • 2020-03-16
      • 2020-07-02
      相关资源
      最近更新 更多