【发布时间】:2018-03-15 13:07:49
【问题描述】:
问题看起来相当简单,但就我而言,它涉及到一些错综复杂的问题。所以这是交易:
- 有一个本地托管的 sql 数据库和一个 sql Azure 托管的数据库。我们需要保持两个数据库同步。这些数据库包含 50 个表。
Azure 数据库不会被任何应用程序更新,但本地数据库将继续频繁更新。因此,我们需要将本地数据库中修改/插入的数据移动到 Azure 数据库。为此,我们正在使用 Azure 数据工厂 (ADF)。
所有数据库表都包含一个名为 LastModifiedDate 的列,指示记录的修改时间。
- 目前我们已经创建了与所有 50 个表相对应的临时表。我们正在维护一个包含表名的水印表,它是最高的LastModifiedDate。
- ADF 作业中有一项活动执行存储过程,该过程从水印表中具有 LastModifiedDate > 对应 LastModifiedDate 的所有表中获取记录,并将它们转储到临时表中。
- 此存储过程的执行完成后,暂存表中的所有数据都会与 Azure 数据库表同步。最后水印表被更新 每个表的 LastModifiedDate。然后刷新所有临时表。
- 此过程将不断重复,因此每当本地数据更新时,Azure 数据库也会更新。
当前方法的问题:
创建与每个表相对应的临时表看起来不是一个好主意。如果数据库中的表数量增加,我们需要那些对应的临时表。
问题:
有没有更好的方法来处理这种情况使用 ADF 并且不创建大量临时表?
【问题讨论】:
-
比如,一次性迁移还是连续迁移?
-
是持续迁移
-
数据工厂不是最适合您的用例的工具。听起来事务复制会更好,例如与 SQL 数据同步。 ADF 适合集成,但它不是数据库复制工具。如果您坚持使用 ADF,您将需要维护大量样板代码。这可以通过自动化代码生成变得更容易。另请注意,使用 ADF,您将永远无法实时复制到 Azure。
-
嗨 - 最好使用 Azure Functions 来执行此操作,调用相同的存储过程,但这次将更新的数据放入 cosmos db,然后可以使用 cosmos 中的更改馈送处理器来跟踪更改,然后基于 Cosmos db 填充/复制您的 Azure SQL 或完全废弃 Azure SQL,只需使用 Cosmos Db 作为您的在线资源。
标签: sql-server azure azure-sql-database azure-data-factory