複数のユーザー (それぞれが「アカウント」を持つ) がそれぞれ独自のデータベースを持つことができるように Django をインストールするためのオプションは何ですか?
セマンティクスはかなり直感的です。アカウントには複数のユーザーが存在する場合があります。アカウントには一意のデータベースがあります (データベースはアカウントに対応します)。画像WordpressMU。:)
私はこれを検討しました:
外部ソリューション - 複数のサーバー/デーモンへの多重化
複数の Django インストール。各 Django インストール / プロジェクトは、独自の DATABASE_NAME を設定するアカウントに対応しています。
ファイルシステム:
/bob /settings.py (contains DATABASE_NAME="bob") /sue /settings.py (contains DATABASE_NAME="sue")
次に、bob と sue のそれぞれに対して Django インスタンスを実行します。私はこの方法論が好きではありません。野蛮に感じられ、悪臭がします。しかし、私はそれがうまくいくと確信しており、提案に基づいて、それを行うための最もクリーンでスマートな方法かもしれません.
アプリは別の場所に保存できます。django 構成に固有である必要があるのは settings.py だけです (さらに、DATABASE_NAME などだけが異なる必要があり、残りはインポートできます)。
(ちなみに、lighttpd と FastCGI を使用しています。)
内部ソリューション - Django 多重化データベース設定
一方、私は Django を 1 つだけインストールすることを考えていましたが、
(a) ログインしたユーザーのアカウントに対応する各データベース テーブルに「prefix_」を追加します。また
(b) ログインしているユーザーのアカウントに応じてデータベースを変更する。
これらを行うための「Djangoの方法」を見ることに特に興味があります(それが非常に単純なものであることを願っています)。たとえば、リクエストのユーザーを受け取り、django.conf.SETTINGS['DATABASE_NAME'] をこのユーザーのアカウントのデータベースに変更するミドルウェア。
これは危険信号です。これはスレッドセーフですか?つまり、django.conf.SETTINGS を変更すると、他のプロセスに影響しますか? django.conf.SETTINGS を変更することには固有の危険がありますか?DB接続はすでにセットアップされていますか? パブリック API の DB 接続部分の再起動ですか? -- この問題をもう一度見るときは、Django のソースを見てみましょう。
2(a) と (b) では、コアとは異なるメカニズムでユーザー認証を保存およびアクセスする必要がある可能性があることを認識しています。
ここでは、Web サーバー レイヤーでの外部マッピングを使用します。現時点では、これが最も単純でクリーンです。ただし、すべてのアカウントに対して FastCGI デーモンを実行するという考えは好きではありません。特に 2000 以上のアカウントがある場合は、不必要にメモリを浪費するようです。ただし、これは興味深い問題であり、特定のケースでは解決策が理想的ではないように思われるため、この議論を開いたままにしておきたいと思います。
コメントをお待ちしております。乾杯