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):
Removing '-optimizeDbBeforeStartup' from the argument list:
========== .. .. command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data" .. ..
==========
Create tables and insert item
docker-compose down
docker-compose up
我在本地使用带有 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):
Removing '-optimizeDbBeforeStartup' from the argument list: ========== .. .. command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data" .. .. ==========
Create tables and insert item
docker-compose down
docker-compose up