amazon-web-services - 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
解决方案
在与 AWS Support 取得联系后,事实证明这是在本地使用 DynamoDB 的一个已知问题。他们为修复它提供了以下指导:
正如您所提到的,您正在使用 docker 映像来部署 DynamoDB 本地 [1],请继续删除步骤 2(“Docker 选项卡”)中给出的“-optimizeDbBeforeStartup”标志(然后将其保存为 docker-compose.yml ):
从参数列表中删除“-optimizeDbBeforeStartup”:========== .. .. 命令:“-jar DynamoDBLocal.jar -sharedDb -dbPath ./data” .. .. ====== ====
创建表并插入项目
码头工人-撰写下来
码头工人组成
推荐阅读
- javascript - 减少 React 表单验证中的 if 数量
- powershell - 所有 AD 用户的 Powershell 删除
- amazon-web-services - Terraform 错误:运行 terraform init 时模块的无关标签
- jquery - require.js 和 jquery UI 小部件的淘汰赛可排序问题
- azure - Azure:从应用服务访问 Key Vault 时,如何解决“策略要求调用者'...'使用代表 (OBO) 流”?
- mysql - MySQL:将单行显示为列(简单地说,通过 SELECT)
- amazon-web-services - 可以将哪些选项传递给 AWS Glue DynamicFrame.toDF()?
- spring-batch - 读一行写多行
- java - 访问返回栈中立即活动的方法
- r - Shiny 应用程序中的 MathJax 方程在本地渲染,但在部署到 Shinyapps.io 时会中断