DynamoDB PutItem 在应该替换项目时使用相同的分区键创建多个项目

DynamoDB PutItem creating multiple items with same partition key when it should be replacing the item

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

我有一个 table 是这样生成的:

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 并将其设为分区键也是如此。

但是,它不会 次发生。我似乎无法始终如一地重新创建它。

我创建此 table 或更新此项目的方式是否有问题?

在这里查看项目 97/98,这张图片是我的 NoSQL Workbench,你可以看到有两个项目具有相同的 id

在与 AWS Support 取得联系后,发现这是在本地使用 DynamoDB 时的一个已知问题。他们提供了以下修复指南:

As you mentioned that you are using the docker image for deploying DynamoDB local [1], please go ahead and remove the '-optimizeDbBeforeStartup' flag given in step 2 ('Docker tab') (and then save it as docker-compose.yml):

  1. Removing '-optimizeDbBeforeStartup' from the argument list: ========== .. .. command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data" .. .. ==========

  2. Create tables and insert item

  3. docker-compose down

  4. docker-compose up