安装 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,并且
(a) 为每个数据库表添加一个“prefix_”,对应登录用户的账户;或者
(b) 根据登录用户的帐户更改数据库。
我对看到“Django 方式”来做这些特别感兴趣(希望它很简单)。例如,接受请求用户并将 django.conf.SETTINGS['DATABASE_NAME'] 更改为该用户帐户的数据库的中间件。
这引发了危险信号,即。这是线程安全的吗?即更改 django.conf.SETTINGS 会影响其他进程吗?更改 django.conf.SETTINGS 是否存在固有的危险——数据库连接是否已经设置?重新启动公共 API 的数据库连接部分吗?-- 当我再次查看这个问题时,我将查看 Django 源代码。
我意识到 2(a) 和 (b) 可能要求用户身份验证以不同于核心的机制存储和访问。
现在,我将使用 webserver 层的外部映射——它是目前最简单和最干净的。但是,我不喜欢为每个帐户运行 FastCGI 守护程序的想法——这似乎不必要地浪费内存,尤其是在有 2000 多个帐户的情况下。但是,我想保持这个讨论的开放性,因为这是一个有趣的问题,而且对于某些情况,解决方案似乎并不理想。
评论应有尽有。干杯