我们的应用程序目前为每个客户端生成一个新数据库。我们开始怀疑是否应该考虑将其重构为多租户系统。
我们应该考虑哪些利益/权衡?在Rails中实现多租户应用程序的最佳实践是什么?
答案 0 :(得分:8)
我一直在研究同样的事情,并且发现这个演示文稿提供了一个有趣的解决方案:使用Postgre的模式(有点像名称空间)来分离数据库级别的数据,同时保持所有租户在同一个数据库中并保持(主要是)对铁轨透明。
答案 1 :(得分:6)
多租户系统将为您介绍一系列问题。我的快速想法在下面
必须检查所有SQL 重构为包含ClientId 值。
必须检查所有索引 确定ClientId是否需要 包括
SQL语句中的错误 开发人员/系统管理员将在生产中 影响所有客户。
数据库损坏/问题会 影响所有客户
您有一些数据隐私问题 因此,糟糕的代码/实施可以 允许customerA查看属于的数据 到CustomerB
使用您的系统的客户 沉重/侵略性的方式可能会影响 其他客户对绩效的看法
根据个人客户偏好调整静态数据变得更加复杂。
我确信还有其他一些问题,但这些是我最初的想法。
答案 2 :(得分:2)
这取决于你在做什么。
我们正在为印刷行业制作MIS程序,跟踪库存,员工,客户,设备,并进行一些严肃的计算,以估算基于大量输入变量执行作业的成本。
我们期待为每个客户提供非常大的数据库,目前我们有170个表。为了存储client_id,几乎每个表都添加另一列会伤害我的大脑。
我们目前处于我们计划的测试阶段,以下是我们遇到过的一些事情:
如果您对这些问题有任何疑问,我可以提供帮助。
答案 3 :(得分:0)
我个人没有任何经验,但在2009年Ruby Hoedown的闪电谈话中,Andrew Coleman提出了一个他设计的插件,用于带有子域的rails中的多租户数据库。您可以check out the lightning talk slides,这里是acts_as_restricted_subdomain repository。
答案 4 :(得分:0)
你为什么这样?您是否在用户之间进行了大量聚合,或者您是否产生了太多的数据库?您是否考虑过每个租户使用SQLite文件而不是共享数据库服务器(因为多租户应用程序通常都是低调的,并且不需要那么多的并发性)?