欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

多租户CRM系统中分表以及如何触发生成表和数据的问题。

程序员文章站 2022-04-20 17:13:46
...
我们公司现在在做一个多租户的crm管理系统。由于数据量已经很大,最近开始考虑分库分表的问题。
对于多租户的crm系统,目前有三种主要的数据库组织方式:
1.单一租户独享单一数据库。
2.单一数据库下单一租户独享单一schema
3.多租户共享单一数据库(用租户id来区分它们的数据)
基于各方面考虑,我们目前采用了第二种方式:在单一数据库中,每个租户都有自己的一套数据表。每一张表的表名,都采用【表名+租户id】的方式。

但是,在数据库结构确定之后,接下来遇到几个问题没有想明白。就是:
1.这些表该如何进行管理?用php代码来管理还是在mysql端有这样的中间件?
2.新注册租户的数据表,该在什么时候触发生成?(目前采用的触发位置,是在新用户注册的时候,直接生成他的用户表、菜单表之类的。而当他用到其他的功能的时候,再生成相关功能的表,总感觉这种方式有问题,有没有更好的处理方式?)

有没有做过多租户CRM系统的技术大神,给点意见?在此万分感激了

回复内容:

我们公司现在在做一个多租户的crm管理系统。由于数据量已经很大,最近开始考虑分库分表的问题。
对于多租户的crm系统,目前有三种主要的数据库组织方式:
1.单一租户独享单一数据库。
2.单一数据库下单一租户独享单一schema
3.多租户共享单一数据库(用租户id来区分它们的数据)
基于各方面考虑,我们目前采用了第二种方式:在单一数据库中,每个租户都有自己的一套数据表。每一张表的表名,都采用【表名+租户id】的方式。

但是,在数据库结构确定之后,接下来遇到几个问题没有想明白。就是:
1.这些表该如何进行管理?用php代码来管理还是在mysql端有这样的中间件?
2.新注册租户的数据表,该在什么时候触发生成?(目前采用的触发位置,是在新用户注册的时候,直接生成他的用户表、菜单表之类的。而当他用到其他的功能的时候,再生成相关功能的表,总感觉这种方式有问题,有没有更好的处理方式?)

有没有做过多租户CRM系统的技术大神,给点意见?在此万分感激了

如果是我,肯定先用软件解决初始化schema的逻辑,这样最快实现目的。后续根据实际情况再考虑使用中间件。

至于触发初始化的动作的时机,要看你初始化动作需要消耗的资源和时间了。如果消耗可以忽略不计,那新租户注册成功就立刻初始化;如果比较耗时耗资源,就定期cron去跑(业务上需要租户从注册到使用有个间隔,比如注册审核)。

按我的经验,仅仅是创建几十张表甚至几百张表(MySQL),耗费不了多少资源的~一眨眼的时间都用不了