假設有100個租戶,mysql最大連接數50,如果1號租戶當前訪問比較多,會不會占完最大連接數,如果占完有處理辦法嗎
可以嘗試只配置一個連接,然后通過USE語句切換數據庫。
Db::statement('USE your_database_name');
例如寫一個中間件,判斷當前屬于哪個租戶,然后切換到對應租戶的數據庫。 這樣每個進程只有一個數據庫連接,只要保證進程數不超過數據庫最大連接數就可以。
這樣是不是需要把數據庫放在不同的服務器上
這種方案是不同的數據庫在同一個服務器,并且是同一個端口
大佬你說的方法我試過了,很棒,然后我設想了一下情況,如果a租戶他的訪問非常大,可以給他開通一個單獨的數據庫服務器,配置參數做表示A,中間件判斷如果是A就切換服務器,如果不是A就用use的辦法切換。但最后我感覺如果真有這樣的租戶,還是完整的走單獨服務,要不然進程數也會限制最大連接數
Db::statement('USE your_database_name');這種在并發(fā)的時候會不會有問題,多個請求打到了同一個worker進程上,然后有一個請求修改了數據庫,其它請求會不會查詢到錯誤的數據
請求處理前先走中間件切換數據庫,可以保證每個請求使用正確的數據庫。
這是隊列消費也是帶上數據庫信息動態(tài)切換后在執(zhí)行任務?
隊列消息必須帶租戶信息(或數據庫信息)吧,否則你都不知道處理的是誰的,需要操作數據庫時也不知道操作哪個庫
這是啥需求?
還有沒別的方案,現在就是這么干的,感覺好麻煩
還有緩存、文件存儲等等