|
|
1
0
我们对这类工作采用封闭式流程。 将数据从远程系统获取到暂存表中,导入到产品表中。
如果您可以自由地向临时表添加列(远程端将忽略这些列),或者临时表具有唯一/不重复的标识或GUID,则可以创建并行表。 理想情况下,在暂存表中创建行的例程将使用批次号,然后在成功时创建“批次号完成”记录。因此,您有一个信号量来停止导入,直到所有相关记录都已导入。 (它们可以插入到事务块中,但您必须确信插入到暂存表中的所有进程都能做到这一点)。 给定标识/GUID,我将创建一个1:1的“错误表”来存储描述导入失败的任何消息。 您可以选择将故障行移动或复制到单独的故障暂存表中,这样主暂存表就不会被阻塞,并且更容易确保故障被分拣(我想是由人工分拣的)。 话虽如此,以下是我们具体流程的更详细描述:
插入此表,共个 刚出现的
如果在源表中找不到stagin表行,我们会定期标记stagin表行Action=Deleted。
在目标服务器上,检查数据并将其导入生产的例程仅在更新日期起作用(处理自上次更新日期起的所有内容) 所有暂存表都位于一个单独的数据库中,该数据库具有最少的日志记录-如果恢复,该数据库将从“上次更新日期”自动刷新,因此我们的目标是最大限度地减少事务日志记录。我们没有;t将暂存表存储在生产数据库中(将有完整的事务日志记录),以避免TLOG膨胀
我们以源数据库的方式传输数据,并且只在目标端进行数据操作。这样做的原因是,如果数据操作错误,并且我们修复了它,我们只需要在目标端重新运行它-源数据都存在于目标端的暂存表中。如果我们在源端进行操作,我们还必须重新传输所有数据。 对于调试,在暂存表中更新日期很有帮助。我们经常会听到“为什么会有这种不同”,看到更新的on会告诉我们目标端的操作是错误的(即,我们有显示预期源数据的最新数据)还是源端(未找到最新数据!) |
|
|
nickolakis · 基于R中的列名复制列 3 年前 |
|
|
imbrian21 · Cassandra中的复制时间 8 年前 |
|
|
user3198603 · Mongo是否在异步模式下提供一致性? 8 年前 |
|
|
Mustermann · mariadb:中继日志写入失败 8 年前 |
|
CycleGeek · Postgresql 9.6复制建议 8 年前 |
|
|
VladislavLysov · SolrCloud索引复制 10 年前 |