多租户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),耗费不了多少资源的~一眨眼的时间都用不了
上一篇: PHP设计模式之工厂模式详解
下一篇: Nginx下php如何动态裁剪图片