google-cloud-datastore - 使用 Google Cloud Functions 发送过大响应时出现“错误:无法处理请求”
问题描述
这里有一点上下文:目前,我们正在使用 Google Cloud Datastore 在我们的应用程序中存储许多不同类型的记录,并且我们正在使用 Google Cloud Functions 来返回各种类型的所有记录。我们通过 HTTP 请求执行此操作,因此这是一个 HTTP 触发器。就在昨晚,我们遇到了一个问题,当我们所有field
类型记录的总大小太大时,我们的端点突然失败,并出现“错误:无法处理请求”。
我们的包装器非常简单:我们的端点接受种类的类型作为路径参数,运行带有过滤器的数据存储查询,用于所有该种类的记录,然后用于res.send
发送查询的结果。
起初,这似乎是交易规模超过谷歌提供的限制的问题。但是,当我添加更多日志记录时,我确定该查询确实正确地找到了所有字段记录而没有发生意外;然而,无论出于何种原因,它在最后一步中断了res.status(200).send(resultsArr);
。
这似乎与被发回的响应的大小有关,因为降低所有实体的总大小是成功的。在这一点上我唯一能想到的就是res.send
不会发回这种大小的响应,但是在谷歌搜索时我找不到关于这些限制的任何信息。
有没有人遇到过这样的事情?有谁知道对此有什么好的预期解决方案?我知道我们可以对端点进行多次调用,但有限制,但我担心这根本是个问题。遇到查询大小的限制是一回事,但我没想到res.send
自己会在这里限制我们。
(编辑:是的,响应超过 10MB。如果您需要帮助确定这是否是您的问题,您可以使用以下内容进行验证:
let size = Buffer.from(JSON.stringify(resultsArr)).length;
console.log('Attempting to send response of size:', size);
)
解决方案
HTTP 触发器的传入和传出有效负载的限制当前设置为 10MB,如此处所述。
推荐阅读
- python - 谷歌云平台:正常运行时间检查/响应验证“403(禁止)”
- isabelle - 如何使用 OpenTheory 将 HOL-light 格式的定理转换为 Isabelle 格式的定理
- angular - 在角度服务中可观察到
- spring-batch - Spring Batch - 发生任何异常时不要写入文件(或删除文件)
- google-analytics - 将数据推送到 Google Analytics
- google-pay - Google Pay 集成 - 密码编码
- aspnetboilerplate - 如果一个用户具有多个角色,则在 asp net 零中切换角色明智的屏幕
- python - 我需要对每个数字重复此操作,直到 20,000
- python - 为什么我的更改没有保存在 django 的静态 css 文件中?
- php - 如何计算特定行中有多少列为空?在 SQL 中