2012-08-14 33 views
6

現在,開發人員都擁有一個本地開發環境,其中包含生產數據庫的快照 - 他們可以扭曲,攪動並剔除數據,而不會影響除自己以外的任何人。關於維護開發數據庫的建議

這些快照開始變大,並且它們的數據導入開始需要接近一個小時。

維護開發數據有什麼更好的建議嗎? dev的數據可以被撕開了潛在的變化,然後根據需要放回到一起,如果改變的想法是不錯,等

+0

也許類似[Vagrant](http://vagrantup.com/)用於個人開發實例並管理一組可用垃圾數據運行的測試/示例SQL遷移? – Nick 2012-08-14 20:05:08

回答

1

根據我的經驗,每個環境都有一個集中的DB +數據:開發,測試+集成和生產一直是最好的方法。

  • 開發:讓開發人員做任何他們想做的事情。如果需要類似生產的數據,則混淆/刪除敏感數據。這個數據庫越輕,您移動,維護和備份的效果越好。
  • 測試:用它來模擬生產環境,讓 測試者輸入/檢索所有數據的匱乏而只能通過你的 應用程序界面。此環境還允許您在將它們發送到生產之前測試您的部署 ,但您不希望數據庫安裝程序不良 將生產應用程序置於不可用狀態。如果需要,您可以將 與生產數據一起輸入此環境,但也可以將敏感數據混淆/刪除 。您可以使用大批量的產品在生產前發現性能問題。
  • 生產:不要讓您的生產數據/環境單獨存在,您不需要 希望敏感數據最終落入錯誤的手中或DB錯誤配置允許開發人員意外更改數據。
+0

我想我的問題(對於這些答案中的大多數)是在開發人員將開發環境中的數據分解之後 - 如何在沒有拍攝產品快照的情況下將數據返回到基準 - 在此案件結束時間很長。 – cgmckeever 2012-08-14 18:04:48

+0

開發快照。 – Darthtater 2012-08-14 19:04:05

0

我在同樣的情況我。我的想法是將存檔數據移動到只讀文件組,以便我只需要備份和恢復一次。非歸檔數據會更小,並且可以更頻繁地複製到備份存儲和開發機器。

當然,只有當它是可能的拆分數據庫大小的很大一部分開了一個只讀文件組的作品。

不同的想法將是一個開發機器上一次恢復和使用數據庫快照,以便快速恢復到一個乾淨的狀態。我發現一個特別有用。

1

通常,作爲開發人員,您希望從開發數據庫中設置一些東西。

你希望它是容易的工作 - 它應該是簡單的做出改變,保持版本的這些變化,並將其應用到其他環境。

你想要有代表性的數據 - 並且可以預測這些數據。例如,如果您正在構建發票系統,您希望擁有已知信用額度的客戶,以便您可以編寫測試用例來跟蹤發生的事情,例如發票,支付等。(集成測試,而不是單元測試) 。

您希望能夠對代表性數據捲進行查詢,從而在開發和生產中都會出現性能問題。

你永遠,永遠希望能夠影響到「真實」數據 - 例如,你想要的電子郵件地址和名稱是匿名的,你希望密碼重新設置。

Continuous Database Integration提供了一個解決這個最 - 也解決了「就需要一個小時來建立一個數據庫開發環境」的問題。

2

我嘗試使用以下方法:

開發商維持基準腳本是在版本控制和建立從零開始的數據庫架構。它會像生產數據庫中一樣創建模式。

他們還維護一個'腳本'來設置測試數據。這個'腳本'實際上使用生產類,有時還使用一些DSL。爲了合理快速,腳本只生成最小的測試數據。我建議將它作爲爲任何新功能構建創建一些測試日期的完成定義的一部分。

開發人員可以在其數據庫(或數據庫模式)上隨意運行這些腳本。第一個腳本也用作運行自動數據庫測試的基礎。

開發人員完成的任何工作的結果都是一個遷移腳本。即可以應用於生產數據庫以使其達到新的期望狀態的腳本,包括對數據的更新。

這些遷移可以在生產數據庫的快照上進行測試。生產數據庫的快照也用於運行負載和性能測試。

僅適用於我使用數據庫特定工具的快照。大多數情況下,其他的一切都是用主要的編程語言編寫的(對我而言是java),所以開發人員可以使用它。

我經常遇到這種錯誤(「太多的腳本」,「太多的數據庫」,「我不想使用版本控制,因爲我的數據庫建模工具不支持它」)。但從大量的手工作品appart我沒有真正看到一個替代品。