我們公司現在在做一個多租戶的crm管理系統。由於資料量已經很大,最近開始考慮分庫分表的問題。
對於多租戶的crm系統,目前有三種主要的資料庫組織方式:
1.單一租戶獨享單一資料庫。
2.單一資料庫下單一租戶獨享單一schema
3.多租戶共用單一資料庫(用租戶id來區分它們的資料)
基於各方面考慮,我們目前採用了第二種方式:在單一資料庫中,每個租戶都有自己的一套資料表。每一張表的表名,都採用【表名+租戶id】的方式。
但是,在資料庫結構確定之後,接下來遇到幾個問題沒有想明白。就是:
1.這些表該如何進行管理?用php代碼來管理還是在mysql端有這樣的中介軟體?
2.新註冊租戶的資料表,該在什麼時候觸發產生?(目前採用的觸發位置,是在新使用者註冊的時候,直接產生他的使用者表、菜單表之類的。而當他用到其他的功能的時候,再產生相關功能的表,總感覺這種方式有問題,有沒有更好的處理方式?)
有沒有做過多租戶CRM系統的技術大神,給點意見?在此萬分感激了
回複內容:
我們公司現在在做一個多租戶的crm管理系統。由於資料量已經很大,最近開始考慮分庫分表的問題。
對於多租戶的crm系統,目前有三種主要的資料庫組織方式:
1.單一租戶獨享單一資料庫。
2.單一資料庫下單一租戶獨享單一schema
3.多租戶共用單一資料庫(用租戶id來區分它們的資料)
基於各方面考慮,我們目前採用了第二種方式:在單一資料庫中,每個租戶都有自己的一套資料表。每一張表的表名,都採用【表名+租戶id】的方式。
但是,在資料庫結構確定之後,接下來遇到幾個問題沒有想明白。就是:
1.這些表該如何進行管理?用php代碼來管理還是在mysql端有這樣的中介軟體?
2.新註冊租戶的資料表,該在什麼時候觸發產生?(目前採用的觸發位置,是在新使用者註冊的時候,直接產生他的使用者表、菜單表之類的。而當他用到其他的功能的時候,再產生相關功能的表,總感覺這種方式有問題,有沒有更好的處理方式?)
有沒有做過多租戶CRM系統的技術大神,給點意見?在此萬分感激了
如果是我,肯定先用軟體解決初始化schema的邏輯,這樣最快實現目的。後續根據實際情況再考慮使用中介軟體。
至於觸發初始化的動作的時機,要看你初始化動作需要消耗的資源和時間了。如果消耗可以忽略不計,那新租戶註冊成功就立刻初始化;如果比較耗時耗資源,就定期cron去跑(業務上需要租戶從註冊到使用有個間隔,比如註冊審核)。
按我的經驗,僅僅是建立幾十張表甚至幾百張表(MySQL),耗費不了多少資源的~一眨眼的時間都用不了