按 KB 大小而不是项目数限制 DynamoDB 查询结果
Limit DynamoDB query result by KB size and not number of Items
我有一项服务允许用户从存储在 DyanmoDB 中的 JSON 中提取属性。
示例.. 他们可以发送 thing1
其中 returns 一个像 ABCDEFG
这样的小字段,或者他们可以发送 thing2
其中 returns 一个巨大的数组JSON 中的字符串。或其他 400 个 thing
请求之一。
这是在通过 API 网关调用的 lambda 中。两者都有负载限制。
我已经知道您可以限制返回的项目数并像这样使用分页:
const params = {
TableName: 'tableName',
KeyConditionExpression: 'ID = :_id',
ScanIndexForward: false,
Limit: 500,
ExpressionAttributeValues: {
':_id': anId,
},
};
但是,如果用户请求 thing
大 (KB),则 Limit
500 可能会超过 lambda/gateway 限制。
如果没有将限制设置得较低,对结果进行分页,并累加每个 Item.thing
的大小,直到接近限制,有没有办法通过 DynamoDB SDK 做到这一点?我倾向于认为,不。
恐怕你是对的,没有办法在 DDB 中本地执行此操作。请记住,在分页结果之前,DDB 不会 return 大于 1MB 的数据集,即使您要求它更多。在您的 1KB 大小项目示例中,limit=500 的请求将 return 半 MB。这应该远低于 lambda 和 API 网关负载限制(我相信目前分别为 6MB 和 10MB)
我有一项服务允许用户从存储在 DyanmoDB 中的 JSON 中提取属性。
示例.. 他们可以发送 thing1
其中 returns 一个像 ABCDEFG
这样的小字段,或者他们可以发送 thing2
其中 returns 一个巨大的数组JSON 中的字符串。或其他 400 个 thing
请求之一。
这是在通过 API 网关调用的 lambda 中。两者都有负载限制。
我已经知道您可以限制返回的项目数并像这样使用分页:
const params = {
TableName: 'tableName',
KeyConditionExpression: 'ID = :_id',
ScanIndexForward: false,
Limit: 500,
ExpressionAttributeValues: {
':_id': anId,
},
};
但是,如果用户请求 thing
大 (KB),则 Limit
500 可能会超过 lambda/gateway 限制。
如果没有将限制设置得较低,对结果进行分页,并累加每个 Item.thing
的大小,直到接近限制,有没有办法通过 DynamoDB SDK 做到这一点?我倾向于认为,不。
恐怕你是对的,没有办法在 DDB 中本地执行此操作。请记住,在分页结果之前,DDB 不会 return 大于 1MB 的数据集,即使您要求它更多。在您的 1KB 大小项目示例中,limit=500 的请求将 return 半 MB。这应该远低于 lambda 和 API 网关负载限制(我相信目前分别为 6MB 和 10MB)