我正在爲一個新項目設計一個MySQL數據庫。我將每天導入50-60 MB的數據。將新數據導入到主數據庫與臨時數據庫?
將會有一個帶有主鍵的主表。然後將會有子表和他們自己的主鍵以及一個指向主表的外鍵。
新數據必須從巨大的文本文件中解析出來,然後在導入到主數據庫之前進行一些小的操作。解析和導入操作可能涉及大量的故障排除,因此我想將新數據導入臨時數據庫並在添加到主數據庫之前確保其完整性。
由於這個原因,我以爲每天最初都會解析和導入新的數據到一個單獨的臨時數據庫中。通過這種方式,我可以在添加到主數據庫之前檢查數據,同時我將每天的數據作爲單獨的數據庫存儲,以後我需要從各個臨時數據庫重建主數據庫。
我正在考慮在InnoDB引擎中使用主鍵/外鍵來維護表間的關係完整性。這意味着當我每天導入新數據時,我必須擔心自動增量ID(主鍵)沒有任何重複。
那麼,鑑於這種情況,最好是什麼?
製作母版的副本,並直接導入到母版的副本中。將現有主版本替換爲新副本。
每天將新數據導入臨時數據庫,但將主鍵的自動遞增起始值更改爲大於主服務器中的最大值。我是否也會爲所有表(主表及其子表)的主鍵更改自動增量值?
每天將新數據導入臨時數據庫,而不用擔心主鍵值。找到一些其他的方式來合併臨時數據庫和主數據庫,而不會碰到主鍵?如果使用這種策略,我怎樣才能在主表中更新新數據的主鍵,同時確保與子表的所有關係都保持正確?
爲什麼不能在導入數據時檢查數據?使用事務並在所有內容都看起來不錯時進行提交,或者如果要中止則回滾。以較小的塊導入,您可以驗證,因此如果某些內容沒有檢出,則不必中止整個過程。 – 2013-02-18 23:14:12
IMO列出的所有三條建議都太複雜 - 太多的方法讓它們斷裂。 – 2013-02-18 23:15:22
@Gavin,但你是不是說我應該在第一次發表評論(你爲什麼不能在導入數據時檢查數據)?有一件事是,我必須導入新的數據並在在線發佈之前在本地環境中進行測試。所以我必須在數據庫的副本下離線執行此操作......然後我只想將新數據導入在線主服務器,而不是每天上傳主服務器。每天有50-60 MB的新數據,數據庫會很快變大......然後我必須每天將這個龐大的數據庫上傳到服務器。這將是很多帶寬。 – iakkam 2013-02-18 23:21:16