【发布时间】:2020-10-17 15:48:19
【问题描述】:
这不是一个问题,而是一个“我的思路是否正确?”主题。
我有一个使用 Pyramid 编写的相当大规模的应用程序的想法,使用多个数据库,并想发表一些我的想法,看看我的想法是否可行。我正在设计应用程序,但还没有开始编写任何代码,以测试它是否可以工作。
我正在考虑扩大规模,因为我预计数据库会显着增长。
要点:
- 主路由采用www.domain.com/[name]/whatever 的形式,其中[name] 是决定向客户端呈现哪些数据的关键参数。
- 将有多个数据库:1 个数据库,比如说 site.db,其中包含站点范围的信息和配置,其余的数据库将是 [name].db,其中包含每个人的用户特定数据。这是我预计大部分扩展发生的地方,因为我希望将应用程序设计为接受 100 个数据库,每个用户一个,以划分数据并防止数据交叉污染。
选项:
-
2 个数据库。 site.db 和 userdata.db。我将使用相同的数据库模型,但表名将使用 [name] 参数动态确定,例如:[name]_table1、[name]_table2 等,其中 table1/2/n 比那。从某种意义上说,这可能更简单,因为我只有 2 个数据库会话可以使用,并且只要我将会话分开,我应该能够单独查询每个会话。缺点是 userdata.db 可能会随着 100 多个用户而变大。理论上,如果我可以使用 [name] 参数查询正确的表,应该不成问题。
-
1 + n 个数据库。管理数据库会话在这里可能很痛苦,但一种可能的解决方案可能是扫描文件夹中的所有 .db 文件,并为每个数据库创建一个会话,并构建一个会话字典,其中字典键是文件名. session['site'] 之类的东西指向处理站点范围数据的 DB 会话,而 session['name'] 指向操纵 name.db 的会话——如果这有意义的话。这样,我可以在路由中使用 [name] 参数来使用适当的数据库会话。
除了上述之外,还将有一个子应用程序,以 IRC 机器人的形式,将监视聊天事件和操作相同数据库的命令。我在想一种方法是运行 IRC bot 的实例,将 [name] 作为参数传入,这样 IRC bot 的每个实例都只能访问一个数据库。 IRC bot 和 Pyramid 应用程序仍有可能尝试操作同一个数据库,这可能会出现问题。也许解决这个问题的一种方法是让 IRC 机器人导入数据库会话(如上面第 2 点所述),并在 IRC 机器人应用程序中使用相同的会话(这会利用 Pyramid 的事务管理器吗?大概是的)。
这就是我现在所拥有的。我希望我正确地考虑了这一点。有什么我大错特错的吗?
【问题讨论】:
标签: python sqlalchemy pyramid