python - 许多小请求与少量大请求 - Angular 到 Django REST API - 不涉及数据库

标签 python django angular client-server backend

我知道 SO 上有相关问题,但我不确定要求我处理的条件是否会导致答案发生任何变化,所以我在这里询问。

我正在 Angular 中创建一个简单的 Web 应用程序,该应用程序从用户导入电子表格数据并将数据发送到 Django 后端,后者对其进行数据分析。数据结果返回到前端,Angular 创建结果的仪表板。电子表格的每一列都会显示一个图表。我面临两个选择:

a) 将电子表格保存在浏览器内存中,并将每列数据分别发送到 Django 服务器,由 Django 服务器分析数据并返回结果。

Pros: Simple architecture. No caching required.

Cons: If there are 150 columns in the sheet, it will result in 150 calls to the API for that user.

b) 发送整张数据并让 python 处理一切。它将返回大量数据,这些数据必须由 Angular 解包。

Pros: Only one request per file.

Cons: For subsequent calls for the same file, I might need caching? If the file has changed, it might cause stale data. I might also need to maintain sessions per user.

我正在使用的限制:我无法将文档存储在 Django 服务器或数据库上。尽管这只是一个内部应用程序,但文档可能很敏感,并且用户不会接受任何类型的存储。

此外,文件大小很可能超过 100 MB,因此这也成为一个因素。

在这种情况下,“许多小请求”是否更有意义? 如果问题重复,请提前道歉。

最佳答案

您没有考虑的另一个因素是浏览器(比如 Chrome)仅分配 6 TCP ports per host 。这意味着,如果您采用“许多小请求”方法,您可能会面临一些严重的性能问题,具体取决于后端处理该请求所需的时间。

另一个需要考虑的因素是您将如何处理数据回滚?如果您完成了 50% (75) 的请求,而用户想要取消或浏览器崩溃等,那么其他 50% 会发生什么?

如果这是在快速网络上运行的内部应用程序,我个人会只处理每个文件的批量一个请求。 100GB 网络上的 100MB 并不是什么大问题。

如果不是在内网,那么我就必须选择微交易,因为上传到 99% 并在 10 分钟后失败的用户体验我相信我们都经历过(可怕的) )。至少通过微事务方法,您可以控制数据回滚,甚至在前端打开套接字以进行更新。就像如果某个列在处理过程中失败,那么 Angular 可以尝试重新发送它等等。

这里没有一种方法适合所有情况,这只是我的意见。

关于python - 许多小请求与少量大请求 - Angular 到 Django REST API - 不涉及数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58517038/

相关文章:

python - 为什么在转换为 exe 后出现 pyttsx3 错误?

python - Django Compressor 编译 SASS 时出错(--scss 无效选项)

Django: 'Module' 对象没有属性 '__file__'

python - 如何使 Django ModelForm 菜单项默认选中?

css - 从 Angular Material <mat-chip> 中移除 box-shadow

python-pptx 访问类别轴元素 "tickLblSkip"& "tickMarkSkip"

python - 在 Amazon 的 DynamoDB 中编写分布式队列

angular - 根据具有反应形式的单选按钮更改形式 - Angular 2+

html - angular2 : Supplied parameters do not match any signature of call target, 即使我有所有需要的参数

python - 确定可执行文件(或库)是 32 位还是 64 位(在 Windows 上)