假设有100个租户,mysql最大连接数50,如果1号租户当前访问比较多,会不会占完最大连接数,如果占完有处理办法吗
可以尝试只配置一个连接,然后通过USE语句切换数据库。
Db::statement('USE your_database_name');
例如写一个中间件,判断当前属于哪个租户,然后切换到对应租户的数据库。 这样每个进程只有一个数据库连接,只要保证进程数不超过数据库最大连接数就可以。
这样是不是需要把数据库放在不同的服务器上
这种方案是不同的数据库在同一个服务器,并且是同一个端口
大佬你说的方法我试过了,很棒,然后我设想了一下情况,如果a租户他的访问非常大,可以给他开通一个单独的数据库服务器,配置参数做表示A,中间件判断如果是A就切换服务器,如果不是A就用use的办法切换。但最后我感觉如果真有这样的租户,还是完整的走单独服务,要不然进程数也会限制最大连接数
这是队列消费也是带上数据库信息动态切换后在执行任务?
队列消息必须带租户信息(或数据库信息)吧,否则你都不知道处理的是谁的,需要操作数据库时也不知道操作哪个库
这是啥需求?
还有没别的方案,现在就是这么干的,感觉好麻烦
还有缓存、文件存储等等
可以尝试只配置一个连接,然后通过USE语句切换数据库。
例如写一个中间件,判断当前属于哪个租户,然后切换到对应租户的数据库。
这样每个进程只有一个数据库连接,只要保证进程数不超过数据库最大连接数就可以。
这样是不是需要把数据库放在不同的服务器上
这种方案是不同的数据库在同一个服务器,并且是同一个端口
大佬你说的方法我试过了,很棒,然后我设想了一下情况,如果a租户他的访问非常大,可以给他开通一个单独的数据库服务器,配置参数做表示A,中间件判断如果是A就切换服务器,如果不是A就用use的办法切换。但最后我感觉如果真有这样的租户,还是完整的走单独服务,要不然进程数也会限制最大连接数
这是队列消费也是带上数据库信息动态切换后在执行任务?
队列消息必须带租户信息(或数据库信息)吧,否则你都不知道处理的是谁的,需要操作数据库时也不知道操作哪个库
这是啥需求?
还有没别的方案,现在就是这么干的,感觉好麻烦
还有缓存、文件存储等等