gpt4 book ai didi

node.js - 在单个查询中将多个 JSON 对象插入 Dynamodb

转载 作者:搜寻专家 更新时间:2023-11-01 00:16:25 30 4
gpt4 key购买 nike

我的设置 - AWS Lambda、AWS Dynamo DB、nodejs 和无服务器。

我正在从一些 API 获取一个 JSON 对象数组并尝试将它们插入我的 Dynamo 数据库中。到目前为止,我得到的唯一解决方案是遍历数组并对每个对象进行 DocumentClient() PUT 调用。
我的数据有大约 1000 个对象,写入吞吐量设置为 1。因此,在插入大约 300 条记录并出现此错误后,即使该解决方案对我来说也失败了 - 已超出为表配置的配置吞吐量级别。

可以在一个查询中完成吗?

最佳答案

每个项目插入将消耗 1 WCU(每 KB),没有其他办法。

您可以使用 batchWrite 而不是单独的插入哪个更有效率。但是,您仍然需要根据表写入吞吐量调整插入率。

另外,请注意您的插入使用的是 300 seconds of burst capacity (您的前 300 次插入)在开始时但在这些插入被消耗之后,您只能使用 1 个 WCU 进行 1 次写入/秒。

这是一个批量插入的例子,它将在 block 之间等待并重新安排失败的插入:

async function batchedAsync({list, callback, chunkSize=10, msDelayBetweenChunks=0}) {
const emptyList = new Array(Math.ceil(list.length / chunkSize)).fill();
const clonedList = list.slice(0);
const chunks = emptyList.map(_ => clonedList.splice(0, chunkSize));
for (let chunk of chunks) {
if (msDelayBetweenChunks) {
await new Promise(resolve => setTimeout(resolve, msDelayBetweenChunks));
}
await callback(chunk, chunks);
}
}

async function writeItems(tableName, chunk, chunks) {
const {UnprocessedItems} = await documentClient.batchWrite({
RequestItems: {
[tableName]: chunk.map(item => {
return {PutRequest: {Item: item}};
})
}
}).promise();
if (UnprocessedItems.length) {
chunks.push(UnprocessedItems);
}
}

// Example
batchedAsync({
list: itemsToInsert,
callback: writeItems.bind(null, myTableName),
chunkSize: 2, // adjust to provisioned throughput. Max 25 (batchWrite dynamodb limit)
msDelayBetweenChunks: 1000
});

关于node.js - 在单个查询中将多个 JSON 对象插入 Dynamodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49167962/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com