2009-07-09 74 views
17

は、人々がジャンゴを使用したマルチテナントアプリケーションを作成するための使用が一般的なパターンです。組み込みの「サイト」フレームワークはオプションのようです。人々が成功した他のアプローチはありますか?サイトのフレームワークを使用してマルチテナントDjangoのアプリケーション

+1

[djangoでのマルチテナントアプリケーションの最適アーキテクチャ]の複製が可能です(http://stackoverflow.com/questions/7194341/optimal-architecture-for-multitenant-application-on-django) – akaihola

答えて

9

を使用すると、各サイトのインスタンスに一意のテーブルを与えると仮定すると、「テナント」にセキュリティ保証を提供に向けた長い道のりを行きます。

一方、テナントの数が少なく、膨大な量のサーバーリソースを浪費すると、大変な労力を要します。なぜなら、顧客あたり少なくとも1つのサーバープロセスが必要になるからです。システムを使用していません。あなたはテナントの数が多い場合は、関係なく、あなたのアプローチのソリューションを自動化することを余儀なくされますので、それは非常に同じくらい面倒ではありません。

ほとんどすべてのモデルにテナントの外部キーを入れても問題ありません.DjangoのORMは、custom managersを使用してセキュリティを強化するのは簡単です(簡単です)。あなたはスケールアップする簡単な方法はありませんので、多くのユーザーに打た取得開始した場合の欠点は、パフォーマンスです。

スケールする必要がある場合、私はベストソリューションの両方の方法の組み合わせと考えることができます。全てのモデルが、データベースを共有することができるように、テナントのForeignKeyを持っているが、その後、あなたはサイトのインスタンスへのルート顧客へのジャンゴよりも高いレベルでいくつかのメカニズムを開発しています。これにより、大規模なテナントを適切に調整したリソース(mod_wsgiデーモンの適切な数、データベース接続数、memcacheプールのサイズなど)と小さなテナントが共通のリソースを共有するように、データベースに入れることができます。

7

https://github.com/bcarneiro/django-tenant-schemas あなたは1つのプロジェクトインスタンスしか持たず、コードに多くの変更を加える必要はありません。

+0

これは素晴らしいアプローチです複数のDBをしたい - 少ないオーバーヘッドのために、あなたは、単一のDBに複数のスキーマを使用することができます。 PostgreSQLが必要です。 Djangoのシンプルテナントスキーマも面白いです。 – RichVel

+0

@RichVel **複数のDBを必要としない**ことを意味します。 – Clash

+1

私は "あなたが複数のDBのようなアプローチを望むならスキーマを使用したい"と申しますが、申し訳ありません – RichVel

関連する問題