【发布时间】:2020-07-06 13:45:05
【问题描述】:
我目前正在尝试构建一个允许许多用户查询外部 API 的 Web 应用程序(由于各种原因,我无法定期检索此 API 提供的所有数据以填充我的 PostgreSQL 数据库)。我已经阅读了几篇关于 ACID 和 MVCC 的文章,但我仍然不确定如果多个用户同时填充/读取我的 PostgreSQL 数据库不会有任何问题。所以在这里我征求意见(我对这个领域很陌生)!
假设我的用户查询外部 API 以检索文章。他们通过表单进行搜索,后端获取它,查询 api,填充数据库,然后查询数据库以将一些数据返回给前端。
- 是否可以简单地创建一个唯一的表来存储用户查询时 API 返回的文章?
- 我是否应该存储 API 返回的文章并将每篇文章与请求它的用户相关联(文章模型将包含到用户模型的外键映射)?
- 或者我应该给每个用户一个表(数据隔离会很好,但听起来效率很低)?
感谢您的帮助!
【问题讨论】:
-
使用数据库而不是直接提供 API 响应的原因是什么?性能、可靠性、统计、分页、用户将数据保存在他们的配置文件中,...?
-
消除第三个选项;可能效率低下,绝对是维护的噩梦。您对其他选项的需求取决于其他处理要求。如果您需要创建本地副本或需要跟踪查看了哪些文章,您将需要第一个选项。您是否还需要跟踪哪些用户查看了哪些文章和/或用户关于他们的信息。在这种情况下,最好创建第三个表 User_Article (左右)。此表将包含用户和文章表的 FK,以及组合所需的任何数据 - 例如 cmets。
-
@KevinLanguasco 许多指标与每篇文章相关联,可能有很多文章需要检索。我需要在返回文章之前计算一些 KPI(它们用于填充一种仪表板)。即使使用 ajax 从用户端查询 api,我仍然需要在后端处理东西,使用数据库似乎更快更容易。不过,如果您有一些资源来描述如何在 Django 中执行此类操作,我很乐意更改我的代码!
标签: django postgresql django-models database-design database-concurrency