You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js中处理DynamoDB的ProvisionedThroughputExceededException且不调整读写容量

Node.js环境下DynamoDB ProvisionedThroughputExceededException 无容量调整解决方案

1. 开启AWS SDK自带指数退避重试

DynamoDB返回的该错误自带retryable: true标记,AWS SDK原生支持指数退避重试策略,无需手动处理基础重试逻辑。

配置示例(AWS SDK v2)

const AWS = require('aws-sdk');
// 配置DynamoDB实例重试参数
const dynamodb = new AWS.DynamoDB({
  maxRetries: 10, // 最大重试次数,可根据业务场景调整
  retryDelayOptions: {
    base: 200 // 重试延迟基数,单位ms,第一次重试延迟200ms,后续按指数递增
  }
});
// 如果使用DocumentClient,配置方式相同
const docClient = new AWS.DynamoDB.DocumentClient({
  service: dynamodb
});

配置示例(AWS SDK v3)

const { DynamoDBClient } = require("@aws-sdk/client-dynamodb");
const { DynamoDBDocumentClient } = require("@aws-sdk/lib-dynamodb");
const client = new DynamoDBClient({
  maxAttempts: 10, // 最大尝试次数
  retryMode: "adaptive" // 自适应重试模式,更适合限流场景
});
const docClient = DynamoDBDocumentClient.from(client);

2. 批量写入时处理未处理项UnprocessedItems

批量写入接口BatchWriteItem的返回结果中会包含因限流未写入的条目,你需要循环重试这些未处理的条目,直到全部写入成功:

async function batchWriteWithRetry(items, tableName) {
  let unprocessedItems = { [tableName]: items };
  while (Object.keys(unprocessedItems).length > 0) {
    const result = await docClient.batchWrite({
      RequestItems: unprocessedItems
    }).promise();
    unprocessedItems = result.UnprocessedItems || {};
    // 还有未处理项时,等待300ms再重试,避免再次触发限流
    if (Object.keys(unprocessedItems).length > 0) {
      await new Promise(resolve => setTimeout(resolve, 300));
    }
  }
}
// 调用示例,单次批量最多25条,超过的话提前拆分批次
const items = [/* 你的写入条目数组 */];
await batchWriteWithRetry(items, '你的表名');

3. 客户端主动限流

从源头控制请求速率,避免短时间内产生远超预置容量的请求:

  • 将大批次写入拆分为更小的批次,比如从单次25条调整为单次10-15条
  • 使用限流库控制并发请求数,示例使用p-limit:
const pLimit = require('p-limit');
// 限制同时最多发起3个批量写入请求
const limit = pLimit(3);
const writeTasks = batches.map(batch => limit(() => batchWriteWithRetry(batch, '你的表名')));
await Promise.all(writeTasks);

GSI限流场景适配

你报错中的触发原因是全局二级索引(GSI)预置容量不足,上述所有方案均适用,SDK重试和UnprocessedItems处理逻辑会自动覆盖GSI限流的场景,无需额外适配。

内容的提问来源于stack exchange,提问作者Mradul Jain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:15:02