簡體   English   中英

多租戶-是預先創建表格還是根據需要創建表格?

[英]Multi-tenancy - Create tables up-front or as needed?

我目前正在開發一個SaaS類型的應用程序,對於多租戶,我已經為每個用戶建立了一個數據庫,每個數據庫都包含用戶有權使用(已付費)功能所需的所有表。 該應用程序旨在捕獲數據(例如,類似於Web分析)並將其呈現給用戶。 該設計應該能夠擴展到成千上萬的用戶(最終)。

當應用程序檢測到需要表時,可行的解決方案是“動態”創建表嗎? 還是我一知道可能需要在用戶數據庫中創建所有最終需要的表(用戶升級,新功能等)?

我當前的體系結構將允許我執行以下操作:

function insertData($table, $data) {
    mysql_query("INSERT INTO ".$table." VALUES ('".implode("', '", $data)."')");
    if ( mysql_errno() ) {
      if (mysql_errno() == 1146) { // table does not exist
        if ( $this->createTable($table) ) {
          $this->insertData($table, $data)
        }
      } else {
        // other errors
      }
    }
}

我希望能夠靈活地添加功能而不必遍歷所有用戶數據庫來添加表,因此像上面的設置將幫助我實現這一點。 但是我不確定是否遺漏了會讓我后悔這一決定的東西?

使用插入來測試表是否存在可能不是您的最佳選擇,尤其是考慮到行的大小和數據庫服務器的延遲。 更好的解決方案可能是使用“顯示表​​”,即:

SHOW TABLES LIKE 'TABLENAME';

結果集將如下所示:

Tables_in_DATABASENAME (TABLENAME)
----------------------------------
be_groups

如果行數為零,則顯然該表不存在。

就您的流程而言,我想我會采用混合方法。 當客戶升級時,作為您的供應工作流程的一部分,請創建為客戶提供新服務所需的所有表。 這樣一來,客戶所占用的資源(在這種情況下主要是磁盤)就不會花費比他們所支付的更多的資源,並且不會給自己帶來動態配置的麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM