我们有三个按地区物理分隔的数据库,一个在LA,SF和NY。所有数据库共享相同的模式,但包含特定于其区域的数据。我们希望将这些数据库合并为一个数据库,并对其进行镜像。我们需要保留每个区域的数据,但将它们合并到一个数据库中。这给我们带来了相当多的问题,例如,我们肯定会有重复的主键,而外键可能是无效的。
我希望找到一个人谁有这样的任务经验,谁可以提供一些提示,战略和经验的话,我们可以如何完成合并。
例如,一个想法是创建组合键,然后更改我们的代码和sprocs以通过组合键(region/原始pk)查找数据。但这需要我们更改所有的代码和sprocs。
另一个想法是只导入数据,让它生成新的主键,然后将所有的FK引用更新到新的主键。这样我们就不需要修改任何代码了。
欢迎任何经验!
发布于 2009-07-07 19:13:20
我没有这方面的第一手经验,但在我看来,您应该能够为每个服务器的PK ->新PK的唯一映射。例如,生成新的==,使得来自LA服务器的数据具有PK%3 == 2,SF具有PK%3 == 1,并且NY具有PK%3== 0。而且,正如我所理解的那样,每个服务器只将FK关系存储到它自己的数据中,所以您可以以相同的方式更新FK。
NewLA = OldLA*3-1
NewSF = OldLA*3-2
NewNY = OldLA*3然后,您可以合并这些,并且没有重复的主键。正如您已经说过的,这本质上只是生成新的PKs,但是以这种方式构造它允许您轻松地更新FK(假设,像我一样,每个服务器上的数据都是独立的)。祝好运。
发布于 2009-07-07 19:19:08
BEST:为RegionCode添加一个列,并将其包含在您的PKs中,但是您不想做所有的临时工作。
HACK:如果您的ID是INTs,一个快速的解决办法是在导入时为每个键添加一个基于区域的固定值。整数可以大小为: 2,147,483,647
本地服务器数据:
LA IDs: 1,2,3,4,5,6
SF IDs: 1,2,3,4,5
NY IDs: 1,2,3,4,5,6,7,9在LA的ID上加100000000
在SF的ID上加200000000
在纽约的ID上加300000000
组合的服务器数据:
LA IDs: 100000001,100000002,100000003,100000004,100000005,100000006
SF IDs: 200000001,200000002,200000003,200000004,200000005
NY IDs: 300000001,300000002,300000003,300000004,300000005,300000006,300000007,300000009发布于 2009-07-07 19:56:10
我已经这样做了,我说的是改变你的密钥(选择一个方法)而不是改变你的代码。你总是会错过一个存储过程,或者引入一个bug。随着数据的变化,很容易编写测试来查找孤立的记录或验证事物是否正确匹配。随着代码的改变,特别是正常工作的代码,很容易遗漏一些东西。
https://stackoverflow.com/questions/1094144
复制相似问题