2009-09-05 26 views

回答

6

多租户系统将为您带来一系列问题。我最新的想法是低于

  • 所有SQL必须检查和 重构,包括一个clientId 值。

  • 索引都必须检查,以 确定客户端Id必须 包括

  • 在生产 开发者/系统管理员将 影响所有客户在SQL语句中的错误。

  • 数据库损坏/问题将 影响您所有的客户

  • 你有一些数据保密的问题 借此差代码/实现可能 允许customerA看到数据属于 到CustomerB

  • 一位客户使用您的系统的重度/侵略性方式可能会影响其他客户对性能的看法

  • 根据个人客户偏好调整静态数据变得更加复杂。

我敢肯定,还有一些其他问题,但这些都是我最初的想法。

+0

感谢史蒂夫..你不健全太执着..在您看来,这样做有什么好处? – Dom 2009-09-05 11:57:28

+2

嗯。多数据库方法也有很多缺点。如果我设计一个系统,它往往会被多租户与特定的大客户分拆到一个单独的系统。 多租户系统确实有一些好处。数据库数量庞大成为一个令人头痛的问题。这也是painfulto脚本更新到多个数据库等。 – 2009-09-05 18:12:53

0

你为什么?你是否有很多用户之间的聚集?或者你是否产生了太多的数据库?您是否考虑过为每个租户使用SQLite文件而不是共享数据库服务器(因为多租户应用程序通常是低调的并且不需要那么多的并发)?

+0

我们考虑过这一点,但是在负载平衡的Web服务器配置中,我们会遇到在不同Web服务器上使用sqllite的问题,所以选择了两层方法 – Dom 2009-09-15 13:44:27

2

这真的取决于你在做什么。

我们正在为印刷行业制作MIS程序,跟踪库存,员工,客户和设备,并根据大量输入变量做一些严肃的计算来估计执行工作的成本。

我们正在为每个客户预计非常大的数据库,目前我们有170个表。为了存储client_id,在几乎每个表中添加另一列都会伤害我的大脑。

我们目前在我们的节目的公测阶段,这里是我们遇到了一些事情:

  • 迁移: Rails的假设是,你只会有1个数据库。您可以调整它以适应多个数据库,并且迁移就是其中之一。您需要自定义rake任务来将迁移应用到所有现有数据库。准备做很多问题解决,因为迁移可能在一个数据库上成功,但在另一个数据库上失败。
  • 产卵数据库:你如何创建一个新的数据库?从一个SQL文件,复制一个现有的数据库,或运行所有的迁移?你如何保持你的表创建系统和你的实时数据库之间的架构一致?
  • 连接到相应的数据库:我们使用cookie来存储映射到正确数据库的唯一值。我们在授权控制器中使用before过滤器,它从ActionController中获取来自该唯一值的db,并在ActiveRecord :: Base的Subclass上使用establish_connection方法。这使我们可以从一个公共数据库获取一些模型,并从客户机的特定数据库获取一些模型。

如果您有任何关于这些问题的具体问题,我可以提供帮助。

+0

我们的应用程序运行得非常好如上所述。我们一直在迁移数据库方面遇到问题,并且发现我们的开发可能会出现不同的不一致模式,这会导致我们在部署时尝试合并。将我们的应用程序重构为多租户系统的主要优点是我们不必担心大量的数据库人工迁移逻辑,我们可以基于单个数据库扩展应用程序,并且可以构建一套更清晰的管理工具 – Dom 2009-09-15 13:48:55

8

我一直在研究同样的事情,只是发现这个演示文稿提供了一个有趣的解决方案:使用Postgre的模式(有点像名称空间)在数据库级别分离数据,同时保持所有租户在同一个数据库中并保留大部分)对导轨透明。

Writing Multi-Tenant Applications in Rails - Guy Naor