我们的应用程序目前为每个客户端生成一个新的数据库。我们开始怀疑我们是否应该考虑将其重构为多租户系统。有关Rails中多租户与多数据库应用程序的任何想法
我们应该考虑哪些好处/权衡?在Rails中实现多租户应用的最佳实践是什么?
我们的应用程序目前为每个客户端生成一个新的数据库。我们开始怀疑我们是否应该考虑将其重构为多租户系统。有关Rails中多租户与多数据库应用程序的任何想法
我们应该考虑哪些好处/权衡?在Rails中实现多租户应用的最佳实践是什么?
多租户系统将为您带来一系列问题。我最新的想法是低于
所有SQL必须检查和 重构,包括一个clientId 值。
索引都必须检查,以 确定客户端Id必须 包括
在生产 开发者/系统管理员将 影响所有客户在SQL语句中的错误。
数据库损坏/问题将 影响您所有的客户
你有一些数据保密的问题 借此差代码/实现可能 允许customerA看到数据属于 到CustomerB
一位客户使用您的系统的重度/侵略性方式可能会影响其他客户对性能的看法
根据个人客户偏好调整静态数据变得更加复杂。
我敢肯定,还有一些其他问题,但这些都是我最初的想法。
我个人没有这方面的经验,但在2009年Ruby Hoedown的闪电谈话中,Andrew Coleman提出了一个他设计并用于带有子域的rails的多租户数据库的插件。您可以check out the lightning talk slides,这里是acts_as_restricted_subdomain repository。
你为什么?你是否有很多用户之间的聚集?或者你是否产生了太多的数据库?您是否考虑过为每个租户使用SQLite文件而不是共享数据库服务器(因为多租户应用程序通常是低调的并且不需要那么多的并发)?
我们考虑过这一点,但是在负载平衡的Web服务器配置中,我们会遇到在不同Web服务器上使用sqllite的问题,所以选择了两层方法 – Dom 2009-09-15 13:44:27
这真的取决于你在做什么。
我们正在为印刷行业制作MIS程序,跟踪库存,员工,客户和设备,并根据大量输入变量做一些严肃的计算来估计执行工作的成本。
我们正在为每个客户预计非常大的数据库,目前我们有170个表。为了存储client_id,在几乎每个表中添加另一列都会伤害我的大脑。
我们目前在我们的节目的公测阶段,这里是我们遇到了一些事情:
如果您有任何关于这些问题的具体问题,我可以提供帮助。
我们的应用程序运行得非常好如上所述。我们一直在迁移数据库方面遇到问题,并且发现我们的开发可能会出现不同的不一致模式,这会导致我们在部署时尝试合并。将我们的应用程序重构为多租户系统的主要优点是我们不必担心大量的数据库人工迁移逻辑,我们可以基于单个数据库扩展应用程序,并且可以构建一套更清晰的管理工具 – Dom 2009-09-15 13:48:55
我一直在研究同样的事情,只是发现这个演示文稿提供了一个有趣的解决方案:使用Postgre的模式(有点像名称空间)在数据库级别分离数据,同时保持所有租户在同一个数据库中并保留大部分)对导轨透明。
感谢史蒂夫..你不健全太执着..在您看来,这样做有什么好处? – Dom 2009-09-05 11:57:28
嗯。多数据库方法也有很多缺点。如果我设计一个系统,它往往会被多租户与特定的大客户分拆到一个单独的系统。 多租户系统确实有一些好处。数据库数量庞大成为一个令人头痛的问题。这也是painfulto脚本更新到多个数据库等。 – 2009-09-05 18:12:53