3

我正在寻找有关如何在 Rails 应用程序中使用沙发模型实现多租户的建议。对于我的多租户应用程序,我正在考虑两种选择:

{ 编辑 - 删除了我丑陋的选项,因为它们只会让未来的读者感到困惑}

我希望它能够与 10K 用户一起工作。

解决方案:根据 Sam 的建议,这就是我所做的并且运行良好 - 就我而言,我需要覆盖 proxy_database 方法,因为代理数据库的标准命名与我的命名不匹配。

创造了主人

class Site < CouchRest::Model::Base
  property :name
  property :slug

  proxy_for :users
  proxy_for ...(all the other multi-tenant models)

  # Databases are on same server in this example
  def proxy_database
    @db ||= self.server.database!(slug)
  end

end

然后在每个多租户模型中

class User < CouchRest::Model::Base
  ...
  proxied_by :site

在 ApplicationHelper 中创建一个可以在所有控制器中重用的“站点”方法。

  module ApplicationHelper

  def site
    db_name = current_user.db_name
    @site ||= Site.create(slug: "#{db_name}_#{Rails.env}" )
  end

然后控制器可能会执行以下操作:

 def show
    user = site.users.find(params[:id])
    render :json => user
  end
4

1 回答 1

2

您可能需要为此检查 CouchRest 模型的代理功能。更多详情可在这找到:

http://www.couchrest.info/model/proxying.html

虽然我没有个人经验,但我知道 CouchDB 处理超过 10k 的数据库。这是扩展用户数量的一个很好的方法:

http://comments.gmane.org/gmane.comp.db.couchdb.user/13862

处理大量数据库时需要考虑的一些注意事项:

  • 文件系统子目录计数,Ext4 没有问题。
  • 在子目录和/或服务器之间拆分的命名空间数据库。
  • 系统打开文件限制。一般在10k左右。如果不是同时访问所有数据库,则可能没问题。

希望有帮助。

于 2014-09-02T14:21:34.953 回答