首页 > 解决方案 > DynamoDB PutItem 在应该替换项目时创建具有相同分区键的多个项目

问题描述

我在本地使用带有 NoSQL Workbench 和 Express API 的 DynamoDB。

我有一个这样生成的表:

const params = {
  AttributeDefinitions: [
    {
      AttributeName: 'id',
      AttributeType: 'S',
    },
  ],
  KeySchema: [
    {
      AttributeName: 'id',
      KeyType: 'HASH',
    }
  ]
  TableName: table.name,
  ProvisionedThroughput: {
    ReadCapacityUnits: 1,
    WriteCapacityUnits: 1
  },
}

dynamo.createTable(params).promise() // ... simplified version

我使用 DocumentClient 更新一个项目,如下所示:

const db = new AWS.DynamoDB.DocumentClient(configOptions);
const data = await db.put({
  TableName,
  Item,
}) // ... interact with result

有时,它会在 DynamoDB 中创建一个具有完全相同id值的新项目,即使我将其创建为 HASH 并将其设为分区键。

然而,它并不是每次都会发生。我似乎无法始终如一地重新创建它。

我在创建此表或更新导致此问题的项目的方式上是否做错了什么?

在此处查看项目 97/98,此图像是我的 NoSQL Workbench 的,您可以看到有两个项目具有相同的id

在此处查看项目 97/98,此图像是我的 NoSQL Workbench,您可以看到有两个具有相同 id 的项目

标签: amazon-web-servicesamazon-dynamodbdynamo-local

解决方案


在与 AWS Support 取得联系后,事实证明这是在本地使用 DynamoDB 的一个已知问题。他们为修复它提供了以下指导:

正如您所提到的,您正在使用 docker 映像来部署 DynamoDB 本地 [1],请继续删除步骤 2(“Docker 选项卡”)中给出的“-optimizeDbBeforeStartup”标志(然后将其保存为 docker-compose.yml ):

  1. 从参数列表中删除“-optimizeDbBeforeStartup”:========== .. .. 命令:“-jar DynamoDBLocal.jar -sharedDb -dbPath ./data” .. .. ====== ====

  2. 创建表并插入项目

  3. 码头工人-撰写下来

  4. 码头工人组成


推荐阅读