Postgresql

關於從主數據庫編寫“粉飾”和縮小規模的開發數據庫的建議

  • July 26, 2013

目前我們(一個活躍的開源項目)有一個包含所有站點記錄的大型 PostgreSQL 生產數據庫。由於我們不能只允許每個開發人員或貢獻者訪問數據庫(包含電子郵件、密碼、電話號碼等),但我們需要為開發人員提供一些最新的 SQLite 數據庫。我們目前執行以下操作:

  1. 轉儲數據庫
  2. 使用自定義 python 腳本分析和更改它,包括截斷表以使導出到 SQLite 更容易忍受,刪除密碼等敏感數據
  3. 將其導出到 SQLite

這是非常緩慢且容易出錯的。

是否有推薦/最佳實踐方法來做到這一點,包括粉飾和表截斷,而不破壞表之間的對象關係映射?

當我分析問題域時,我看到了對象相關映射的主要問題。我不能只從所有表(帶有LIMIT)中提取前一千條記錄,因為例如,第 900 行中的一個對象可能會將外鍵映射到另一個表中的 1001 行。我猜想更改和清理數據可以通過視圖來完成,將某些列替換為計算的列(基於原始表列)。然後一個 cron 作業可以轉儲視圖。

我會很高興獲得幫助/參考。

您所指的通常稱為Test Data Management。有幾種商業解決方案,例如 IBM Optim Test Data Management(披露:我為 IBM 工作,但不代表他們)。我不知道有任何免費產品可以執行該功能,所以恐怕你必須堅持使用你的 Python 腳本,除非你財力雄厚。

附帶說明一下,我建議使用相同的數據庫平台,即 PostgreSQL,用於生產和開發——它可能會在以後為您節省一些故障排除時間。

一般來說,最佳實踐方法是擁有一組直接基於實時數據的測試數據,特別是如果您在可能持有敏感數據(例如個人或財務資訊)的環境中工作。

這種數據集的大部分可以通過將一組腳本組合在一起以自動方式創建,這些腳本生成遵循集合模式的記錄。如果您使流程可定制,那麼您可以將其用於簡單測試(用於新開發工作的小型數據庫)和性能測試(用於確保您的程式碼朝該方向擴展的大型數據庫)。例如,在我們的培訓和能力記錄系統中,您可能想要求它“給我一個數據庫,其中有 10 個團隊分佈在 4 個分支中,每個分支大約 8 人/團隊處於隨機狀態(實習生、完整的競爭顧問……)和可以追溯到 6 個月的合適記錄”或“給我一個數據庫,其中包含 1000 個團隊,分佈在 600 多個分支機構,大約 8 人/團隊處於隨機狀態(實習生、全面顧問……)和 24 個月的合適記錄”。這樣您就無需粉飾任何東西,每個開發人員都可以創建一個新的測試集,以便在需要時輕鬆快速地使用。您還可以確保您的樣本數據包含您曾經遇到(或預計會遇到)的所有邊緣案例,因此它可以成為您執行的任何自動回歸測試的重要組成部分。

當然,隨著應用程序的增長,維護腳本以生成此範例數據、修復錯誤並添加對新功能的支持,成為您需要考慮的額外工作,並且您可能偶爾仍需要針對“更真實”的數據進行測試,因此不幸的是,這並不是所有的“勝利”。

引用自:https://dba.stackexchange.com/questions/47032