假設(shè)有100個租戶,mysql最大連接數(shù)50,如果1號租戶當(dāng)前訪問比較多,會不會占完最大連接數(shù),如果占完有處理辦法嗎
可以嘗試只配置一個連接,然后通過USE語句切換數(shù)據(jù)庫。
Db::statement('USE your_database_name');
例如寫一個中間件,判斷當(dāng)前屬于哪個租戶,然后切換到對應(yīng)租戶的數(shù)據(jù)庫。
這樣每個進(jìn)程只有一個數(shù)據(jù)庫連接,只要保證進(jìn)程數(shù)不超過數(shù)據(jù)庫最大連接數(shù)就可以。
大佬你說的方法我試過了,很棒,然后我設(shè)想了一下情況,如果a租戶他的訪問非常大,可以給他開通一個單獨(dú)的數(shù)據(jù)庫服務(wù)器,配置參數(shù)做表示A,中間件判斷如果是A就切換服務(wù)器,如果不是A就用use的辦法切換。但最后我感覺如果真有這樣的租戶,還是完整的走單獨(dú)服務(wù),要不然進(jìn)程數(shù)也會限制最大連接數(shù)
Db::statement('USE your_database_name');這種在并發(fā)的時候會不會有問題,多個請求打到了同一個worker進(jìn)程上,然后有一個請求修改了數(shù)據(jù)庫,其它請求會不會查詢到錯誤的數(shù)據(jù)