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

问题描述

我在本地将 DynamoDB 与 Nosql Workbench 和 Express API 一起使用。

我有一个这样生成的表:

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

See items 97/98 here,this image is of my NoSQL Workbench and you can see there are two items with the same id

解决方法

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

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

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

  2. 创建表格并插入项目

  3. docker-compose down

  4. docker-compose up