在本 DynamoDB 查询/扫描最佳实践指南中,我读到您可以通过减小查询/扫描的页面大小(默认最大 1MB)来帮助避免读取活动突然激增。
我有一些需要扫描整个表格的实例,我使用
paginateScan
来循环并获取所有项目 - 类似这样:
async function fetchAll() {
const pagedScan = paginateScan({
client: ddbDocClient,
pageSize: 100
}, {
TableName: 'tickets'
});
const results = [];
for await (const page of pagedScan) {
results.push(page.Items)
}
return results;
}
但不明白将
pageSize
设置得较低或保持在最大 1MB 是否有任何权衡。
设置较小的页面大小是否只会使查询/扫描花费更长的时间,因此读取会分散在更长的时间内?例如,如果我需要扫描整个表格并且不在乎是否需要一段时间,我应该将页面大小设置为 1 项吗?
如果我最终只是循环获取所有项目,这有什么关系吗?
页面大小对延迟和性能都有影响。
较小的页面大小显然需要对 DynamoDB 进行更多往返,这会增加扫描的延迟。
较小的页面大小实际上会在一定程度上增加成本,因为每个页面都会四舍五入到最接近的 4KB。因此,页面大小为 1 的扫描将为每个项目花费 1 RCU,而实际上您可能可以将 10 个项目放入 4KB 限制中。
如果它是后台进程并且您不想消耗表中的所有容量而影响正常流量,则减小页面大小会很有帮助。较小的页面大小将使读取时间延长,并减少每秒消耗的容量。如果使用配置模式,这也可以节省成本,但这是与我前面提到的四舍五入到 4KB 的观点之间的权衡。