Como alguém configura várias contas com bancos de dados separados para o Django em um servidor?

Quais são as opções para instalar o Django, de modo que vários usuários (cada um com uma "Conta") possam ter seu próprio banco de dados?

A semântica é bastante intuitiva. Pode haver mais de um usuário para uma conta. Uma conta possui um banco de dados exclusivo (e um banco de dados corresponde a uma conta). Imagem WordpressMU. :)

Eu considerei isso:

Solução externa - Multiplex para vários servidores / daemons

Várias instalações do Django, com cada instalação / projeto do Django correspondente a uma conta que define seu próprio DATABASE_NAME, por exemplo

Sistema de arquivo:

/bob
  /settings.py (contains DATABASE_NAME="bob")

/sue
  /settings.py (contains DATABASE_NAME="sue")

Depois, ter uma instância do Django em execução para cada um dos processos bob e sue. Eu não gosto dessa metodologia - parece brutal e cheira mal. Mas estou confiante de que funcionaria e, com base nas sugestões, pode ser a maneira mais limpa e inteligente de fazê-lo.

Os aplicativos podem ser armazenados em outro lugar; a única coisa que precisa ser exclusiva da configuração do django é o settings.py (e mesmo lá, apenas DATABASE_NAME, etc. precisam ser diferentes, o restante pode ser importado).

(Aliás, estou usando o lighttpd e o FastCGI.)

Solução interna - configurações do banco de dados de multiplexação do Django

Por outro lado, pensei em ter uma única instalação do Django, e

(a) Adicionando um "prefixo_" a cada tabela do banco de dados, correspondente à conta do usuário logado; ou

(b) Alterando o banco de dados de acordo com a conta do Usuário conectado.

Eu estaria particularmente interessado em ver o "caminho do Django" para fazer isso (esperando que seja algo simples). Por exemplo, middleware que pega o usuário de uma solicitação e altera o django.conf.SETTINGS ['DATABASE_NAME'] para o banco de dados da conta desse usuário.

Isso levanta bandeiras vermelhas, viz. Este thread é seguro? ou seja, alterar django.conf.SETTINGS afeta outros processos? Existe apenas um perigo inerente na alteração do django.conf.SETTINGS - a conexão com o banco de dados já está configurada? O reinício da conexão com o banco de dados faz parte da API pública? - Vou dar uma olhada na fonte do Django quando olhar para esse problema novamente.

Estou ciente de que 2 (a) e (b) podem exigir que a autenticação do usuário seja armazenada e acessada em um mecanismo diferente do núcleo.

Por enquanto, vou usar o mapeamento externo na camada do servidor da web - é mais simples e limpo por enquanto. No entanto, não gosto da ideia de daemons FastCGI sendo executados em todas as contas - parece que desperdiçamos desnecessariamente memória, principalmente se houver mais de 2000 contas. No entanto, gostaria de manter essa discussão aberta, pois é um problema interessante e a solução não parece ideal para certos casos.

Comentários devidamente apreciados. Felicidades