我正在构建一个用于在Heroku部署的Rails 3应用程序,我想知道如何在我的模型中处理多租户方面有任何建议.半年前,有一个相关的问题(
#3776593)发布在这里,但没有得到很多答案.我也看过
Guy Naor’s presentation on writing multi-tenant applications with Rails,但似乎3个提出的解决方案中的2个在Heroku上不起作用.我会链接到这些,但新的Stackoverflow用户只限于2个超链接.
我也遇到了以下工具:
> http://samuel.kadolph.com/2010/12/simple-rails-multi-tenancy/
> http://blog.codecrate.com/2011/03/multitenant-locking-down-your-app-and.html
只是想知道你是否有经验丰富的多元宝石或简单的轨道多租户宝石.似乎最简单的解决方案就是简单地将一个belongs_to放在所有需要在一个帐户下的模型上,但是我真的很想知道你在现实世界中的使用情况!
解决方法
方法的范围从“无分享”,通常意味着每个租户的一个数据库,以“共享一切”,这通常意味着每个表包含许多租户的行.频谱(以下)可以通过隔离度,成本(每个租户的成本,即)以及容易的灾难恢复来分解.
>每个租户一个数据库;成本最高,隔离最高,恢复最简单.
每个租户一个模式;成本在另外两个之间,良好的隔离度,相当容易恢复,但恢复通常会降低其他租户的业绩.
>租户分享表最低成本,最低隔离度(共享表),难度恢复(恢复通常意味着为每个表恢复一些行).恢复通常会降低其他租户的表现“很多”.
所有这些都在一定程度上是平台特定的.当dbms禁止查询访问多个数据库时,“每个租户的一个数据库”具有最高的隔离度.但有些平台允许跨多个数据库进行查询.
MSDN有一个体面的文章,击中了高点:Multi-Tenant Data Architecture.
但是,如果你限于Heroku,你必须选择Heroku支持的选项.我不知道这些选项可能是什么,但我知道你最好不要在开发中使用sqlite. Heroku部署将在Postgresql上运行;你需要开发Postgresql.