2011-05-12 54 views
1

我有多個最終用戶mySQL數據庫,其數據量相當大,必須與由外部數據源填充的數據庫(也是mySQL)同步。最終用戶可以將數據添加到他們的「本地」數據庫,但不會添加到數據源。合併自動增量表數據

問題是如何合併/同步兩個數據庫,包括數據庫表之間的外鍵,而不會覆蓋「本地」添加項或更改本地添加項的鍵。

事情我已經考慮包括使用飼料DB的CSV轉儲和做與IGNORE一個LOAD DATA INFILE,然後就比較文件,查看從飼料行沒有被寫入,並手工編寫和寫作一些腳本逐行通過饋送數據庫並在本地數據庫中創建新行,同時創建新的密鑰。但是,這似乎可能會非常緩慢,特別是對於多個dbs。

對此有何看法?如果有一種合併這些數據庫的方法,以一種簡單和快速的方式保存密鑰,這將是理想的。

+0

這是飼料數據庫和用戶數據庫之間的雙向更新嗎?或者只是從Feed數據庫更新用戶的數據庫? – 2011-05-12 23:41:09

+0

只是從Feed中更新用戶的dbs。 – julio 2011-05-13 03:27:56

回答

1

一種選擇是使用GUID而不是整數鍵,但做出如此重大的改變可能不切實際。

假設你只是從中央「feed」數據庫更新用戶數據庫,我會使用CSV和LOAD INFILE,但加載到目標數據庫中的臨時表中。然後,您可以用新值替換這些鍵,最後將行插入永久表中。

如果您不處理大量數據,它可能很簡單,只需找到現有數據的最高ID和傳入數據的最低ID之間的差異即可。將此數量添加到傳入數據中的所有密鑰,並且不應有衝突。這會浪費一些PK值,但這可能不值得擔心,除非你的記錄數量在數百萬。這假定你的PK是整數和順序的。

+0

感謝Jon,我同意GUID是要走的路,但在這種情況下意味着應用程序的重新編寫。 – julio 2011-05-13 15:22:56

3

使用複合主鍵。

主鍵(id,SOURCE_ID)

使每個DB使用不同的值SOURCE_ID。這樣你可以複製數據庫內容而不會發生PK衝突。

+0

@ N.B .--你能解釋一下更多關於這是如何工作的?此時,我將source_id作爲源中的ID進行跟蹤 - 因此源中的源ID和用戶數據庫中的源ID將匹配,儘管用戶數據庫和數據源數據庫中的「主鍵」ID不匹配。 – julio 2011-05-13 03:50:35