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