[英]Need suggestion for Multi-tenant database architecture?
我們正在使用SaaS模型中的PHP和MySQL開發項目,每個租戶都可以選擇使用我們的模塊創建器和表單生成器創建自己的模塊。
當他們動態創建新模塊時,我們正在為特定租戶創建新表。 因此,每個租戶都有不同的架構。
我建議使用每個租戶的每個數據庫,但是我的經理希望將所有租戶保留在單個數據庫中,因為我們將繼續對項目進行升級。
現在我的想法是每個租戶有2個DB; 一個是主數據庫,它對所有租戶都通用,下一個是輔助數據庫,它用於每個人的表創建。
多租戶應用程序可以通過多種方式進行設計
1)單一數據庫,單一代碼庫
使用單個數據庫,並將所有客戶端數據存儲在單個數據庫中。 您將必須在所有表中添加一個字段,例如“ clientid”,並修改所有SQL查詢以選擇正確的“ clientid”。 如果您已經有一個租戶應用程序,則需要對代碼進行大量修改。
優點:易於管理數據庫和更新; 沒有重復。 缺點:如果您錯過了SQL查詢中的“ clientid”,則可能導致另一個客戶端出現問題。
2)多個數據庫,單個代碼庫
為每個客戶端創建一個單獨的數據庫。 無需修改您現有的單租戶代碼庫。 您只需要修改配置文件即可根據客戶端選擇數據庫。
優點:很少修改代碼庫,易於確保不會混淆客戶端數據。 缺點:需要管理多個數據庫,因此,在更新數據庫架構時,您將必須更新每個數據庫。
3)多個數據庫,多個代碼庫
創建一個單獨的數據庫,並為每個客戶端復制完整的代碼。 完全不需要修改。
優點:無需修改代碼庫,易於確保客戶端數據不會混合,易於執行客戶端特定的修改。 缺點:要管理多個數據庫/代碼,因此,如果數據庫模式/代碼更新,則必須為每個客戶端手動更新。
因此,現在您可以確定最適合您的項目要求的選項。
我會將您的租戶的數據分離到單獨的數據庫中。 這使得實施錯誤更加困難,從而一個租戶可以意外訪問另一個租戶的數據。 據我所知,至少一個國家(德國)存在數據隱私行為,需要在多租戶系統中分離數據庫架構。
對於遷移數據庫,我建議使用像flywire這樣的模型(好吧,那不是PHP,但是這個概念很簡單,可以不費吹灰之力就可以在PHP中重新實現)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.