【问题标题】:How to copy performant data from one database to another database?如何将高性能数据从一个数据库复制到另一个数据库?
【发布时间】:2016-01-13 09:30:46
【问题描述】:

我有一个概念性问题。

我有两个结构相同的数据库。一个数据库已经包含大量数据。这些数据应通过SelectInsert 传输到其他数据库。

如何才能以最高性能进行此数据迁移?

我的第一种方法是对列表中的所有表进行排序,其中包含外键的表将存储在引用表的后面。但是使用此解决方案将无法启动并行处理。

第二个想法是创建一个自定义类型,其中包含表名和引用表的表名以及一个布尔标志,用于存储表中的数据是否已被复制。此类型为列表中的每个表存储。然后我启动一个新线程,在复制之前检查是否已经为每个表创建了引用的表。如果没有,我执行Thread.Sleep(),然后我会再次检查。

有没有很好的方法来解决这个问题?

任何建议都会有所帮助。

编辑: 旧数据库是 SQL Base 数据库。 新数据库是一个 ms sql server 数据库。

【问题讨论】:

  • 大多数数据库系统都有bulk copy mechanism。使用它。
  • SELECT/INSERT 是最糟糕的方法。我强烈建议为此使用数据库工具。也许“数据库管理员”会是一个更好的地方。 dba.stackexchange.com
  • 问题是,旧数据库是sqlbase数据库,新数据库是ms sql server。所以现在我正在开发这些“数据库工具”之一
  • 旧数据库中的数据是否包含外键并且它们都被遵守了?如果是,对于您的迁移,您可以删除目标数据库中的所有索引和外键。完成后 - 恢复外键和索引。

标签: c# sql-server multithreading sqlbase


【解决方案1】:

你可以使用:

1) SQL Server 复制

或者 2) SQL Server Merge 语句

您可以使用 SQL Server Linked Servers 连接不同的数据库平台(例如 sql server、mysql、db2、...)

【讨论】:

  • SQL Server 复制在我的情况下不起作用,但我会检查是否会有链接服务器和 sql server 合并语句的解决方案。谢谢:)
  • 请注意merge 语句不能与链接服务器一起使用。您必须编写自己的 insertupdate 语句
  • 您不需要链接服务器。 SQLBase UNLOAD 将为您编写插入语句。只需 UNLOAD,您将拥有所有需要为 SQlServer 重新加载做好准备的 DDL、DML 和数据。
【解决方案2】:

最佳建议:坚持使用 SQLBase。 第二个最佳建议,通过 SQLTalk 使用 SQLBase UNLOAD 命令。这将写入在其他地方重新创建数据库所需的所有 DDL 语句 - 包括触发器、存储过程、索引等,以及所有要加载的数据(如果您使用正确的选项)到外部文件。如果需要采用 sql server 格式(差别不大),则可以选择以编程方式编辑此文件。 UNLOAD 命令有很多选项,这里不能详细写,但是这里有一个语法链接。 请注意,最近几个月发布了 SQLBase v12,性能提高了十倍。使用正确的调优和索引等。它将在效率和性能方面超过 Sql Server。在 100Gb 数据库上,我们的响应时间从 50 秒变为 3 秒,无需额外工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多