2010-06-29 69 views
2
獨立Live和測試數據庫

我的單位是從頭開始重寫我們的數據庫驅動的網站,包括一個全新的數據庫架構。數據庫設計:爲PHP網站

在當前的設置現場和測試網站使用完全相同的數據庫。

我們希望下一個版本爲網站的實況和測試版本分別提供一個數據庫。

從測試中更新新的模式更改數據庫的實時版本不是一個問題。

的問題是實時數據庫中的數據不斷地被改變。例如,用戶上傳圖像,修改元數據,創建新對象等。

什麼是保持測試服務器上的數據與用戶輸入的數據在現場服務器上同步的正確方法?

回答

1

一般情況下,你不保持同步。測試數據庫是一個獨立的系統,其中的數據應該生成 - 因此您可以轉儲它並在不同測試之間恢復其狀態。

無論何時更改模式,您都應該針對測試數據庫生成「遷移」(由RoR推廣,但它們是個好主意)。遷移是ALTER TABLE語句,它將數據庫的佈局更新爲新的模式。然後,您可以在升級時針對實時數據庫運行遷移。

當然,事前,它會無疑是一個好主意,轉儲真正的數據庫到另一測試數據庫,以確保遷移順利......所以呀。

我會分離出一對數據庫,並開始正確的單元測試。如果您正在尋找一種更爲現成的解決方案,我會將實時數據庫複製到測試數據庫,並使用cron-job每晚運行您的遷移。

1

上分離的生產和測試良好的通話。

這是一個加載的問題,如果您可以告訴我們您正在使用哪個數據庫以及您希望從生產遷移到測試的數據量,我們可能會指出您正確的方向。例如,對於一個相對較小的數據庫,您可以將mysqldump out of production轉換爲測試數據庫實例上的全新數據庫。其他解決方案涉及複製,但這在配置,運行時和維護方面會有一些開銷。

您是否確實需要爲您的測試環境複製生產數據?

+0

數據庫是MySQL的5.1和大約是1 GB的大小。雖然我們只能移植一小部分。但是數據的大小不是問題,對我們來說這是頻率。 在高峯時段,我們每分鐘看到大約1000次更新,並且我一直在尋找一種方法使它們始終保持同步。我能想到的唯一真正的方法是將每個實時服務器查詢發送到測試服務器,這對我來說似乎是荒謬的。 但是,在您的問題和Frio的評論之後,我想知道是否讓測試數據庫與現場測試數據庫保持同步是非常必要的。 – Linus 2010-06-29 01:54:11