3

Railsアプリでソファレストモデルを使用してマルチテナンシーを実装する方法に関する推奨事項を探しています。私のマルチテナント アプリでは、次の 2 つのオプションを考えています。

{編集 - 将来の読者を混乱させるだけなので、私の醜いオプションを削除しました}

これが 10,000 人のユーザーでうまく機能することを望みます。

解決策: サムのアドバイスに基づいて、これが私が行ったことであり、うまく機能しています。私の場合、プロキシ データベースの標準的な名前付けが私の名前付けと一致しなかったため、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 が 10,000 を超えるデータベースを処理することは理解しています。ユーザー数をスケーリングする方法の良いスレッドを次に示します。

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

多数のデータベースを扱う際に考慮すべきいくつかの考慮事項:

  • ファイル システムのサブディレクトリ数。Ext4 では問題ありません。
  • サブディレクトリやサーバー間で分割する名前空間データベース。
  • システムのオープン ファイル制限。だいたい10kくらい。すべてのデータベースが同時にアクセスされない場合は、おそらく問題ありません。

それが役立つことを願っています。

于 2014-09-02T14:21:34.953 に答える