同 database 不同 schema 多租户连接池问题

查看 102|回复 6
作者:dandankele   
我开发的是一个多租户的系统,使用的是mysql,采用的是同 database 不同 schema 方式的数据库隔离方式。每个租户对应一个 schema ,并且拥有特定的 username 和 password 才能连接访问。
目前在用 Hikari 尝试做数据库连接池,由于多租户的特性,我需要延时到 runtime 中才能确定哪个租户,才能使用对应的连接信息建立连接,建立连接时如果不使用 username 和 password 就无法认证和完成连接。但如果使用了 username 和 password 成功建立连接,并放入连接池,等处理下一个租户时,从连接池中拿的连接的 schema 就不对了。
但如果要为每个租户创建一个连接池,有些浪费,首先就是不确定每个租户对数据库的使用程度如何,不可能为每个租户设置特定大小的连接池,否则会存在连接数的浪费,所以势必要采用共享连接池才能最大的利用上。然后就是阿里云的 RDS 一个 database 实例有最大连接数的限制,所以更要求最好是共享连接池。
我也查了下相关的 github ,也有类似的issue还没人解决。而且 mysql 应该是不支持在一个连接中切换 user 的吧,必须 quit 断开连接使用新的 user 重新建立连接。
难道我要创建一个高权限帐号,可以访问所有 schema 才行吗?还有其他方法吗?
有处理过这问题的朋友吗?

连接, 租户, schema, username

bthulu   
mysql 哪来的 schema? mysql 只有 database 没有 schema!!!
Morii   
dynamic-datasource
root71370   
mybatis 动态数据源
dandankele
OP
  
动态数据源我实现了,现在的问题是如何针对我的场景把连接进行池化复用,各位要审题啊
RedBeanIce   
提问
1 ,租户数量问题,目前一共有多少呢,一年后一共有多少呢
1 ,如果是租户数量少,一个 schema 一个数据库链接池,就简单解决问题了。不用动太多脑子。
dandankele
OP
  
@RedBeanIce 租户数量适中吧,我也想过一个 schema 一个连接池,然后每个池子最大连接数设置为 database 的最大允许的连接数量,空闲时间设置短一点,一个池子如果空闲连接多的话会释放给其他忙的池子。。但感觉又有些不妥。在每个租户都需要较为繁忙时,某个池子的空闲连接来不及释放给另一个池子
您需要登录后才可以回帖 登录 | 立即注册

返回顶部