[英]How to achieve fast database sync. with a read-only source?
我有一个源数据库(Sybase),它是只读的,您可以使用导入文件将其写入数据库。 另一面是我自己的数据库(MSSQL),没有限制。
主要问题是第一个数据库上没有时间戳,而且我无权更改源数据库。 因此,有没有一个引擎/解决方案来实现此同步。 完成了吗
diff算法可能会起作用,但它并不快,因为您必须扫描整个源数据库以进行每次同步。
基本上,您将以一种一致且稳定的方式进行完整的数据提取(即,两次这样的提取而没有任何变化将产生相同的输出)。
然后将其与您之前所做的提取进行比较,然后您可以找到所有更改。 需要一些比纯文本差异稍微更智能的东西,以帮助确定行不只是被删除+插入,而是实际上被更新。
不幸的是,如您所指出的,如果没有办法通过缺少时间戳或类似机制来询问源数据库的最新变化,那么我看不出有什么比完整的要好每次提取。
现在,我对Sybase的了解并不多,但是在MS SQL Server中,您可能会创建另一个数据库,该数据库可以映射第一个数据库,而在第二个数据库中,您可以进行所需的任何更改。
但是,如果可以在Sybase中建立这样的数据库,并使用SQL同时访问这两个数据库,则可以运行产生差异的查询。
例如,类似以下内容的东西:
SELECT S.*
FROM sourcedb..sourcetable1 AS S
FULL JOIN clonedb..sourcetable1 AS C
ON S.pkvalue = C.pkvalue
WHERE S.pkvalue IS NULL OR C.pkvalue IS NULL
这将产生插入或删除的行。
要查找已更改的内容,您将需要以下WHERE子句:
WHERE S.column1 <> C.column1
OR S.column2 <> C.column2
OR ....
由于这些表是联接在一起的,因此WHERE子句会过滤掉先前提取的数据和当前状态不同的任何行。
现在,这可能也不很快,您必须进行测试以确保。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.