在多租户应用中推荐使用沙发模型

时间:2014-08-18 18:23:19

标签: couchrest

我正在寻找有关如何在rails应用程序中使用couchrest模型实现多租户的建议。对于我的多租户应用,我考虑了两个选项:

{编辑 - 删除了我丑陋的选项,因为他们只会混淆未来的读者}

我希望这能与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中创建一个&#39; site&#39;您可以在所有控制器中重复使用的方法。

  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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

希望有所帮助。