我有多个最终用户mySQL dbs,其数据量相当大,必须与外部数据源填充的数据库(也就是mySQL)同步。最终用户可以将数据添加到“本地”数据库,但不能添加到源。
问题是如何合并/同步两个数据库,包括DB表之间的外键,而不会覆盖“本地”添加或更改本地添加的键。
我考虑过的事情包括使用Feed数据库的csv转储并使用LOAD DATA INFILE
执行IGNORE
,然后只比较文件以查看Feed中哪些行未写入,并手动编写它们并编写一些脚本以逐行通过Feed DB并在本地DB中创建新行,同时创建新键。但是,这似乎可能非常慢,特别是对于多个dbs。
对此有何想法?如果有一种方法可以合并这些数据库,那么使用一种简单和速度加载的方式来保存密钥,这将是理想的。
答案 0 :(得分:3)
使用复合主键。
主键(id,source_id)
使每个数据库为source_id使用不同的值。这样你就可以在没有PK冲突的情况下复制数据库内容。
答案 1 :(得分:1)
一种选择是使用GUID而不是整数键,但进行如此重大的更改可能不切实际。
假设您只是从中央“feed”数据库更新用户数据库,我将使用CSV和LOAD INFILE
,但加载到目标数据库中的临时表中。然后,您可以使用新值替换键,最后将行插入永久表中。
如果您没有处理大量数据,可能就像查找现有数据的最高ID和传入数据的最低ID之间的差异一样简单。将此金额添加到传入数据中的所有键,并且不应存在冲突。这会浪费一些PK值,但除非您的记录数量达到数百万,否则这可能不值得担心。这假设您的PK是整数和顺序。