我有一个只有两列“EmailId”和“SubscriptionId”的DynamoDB表。 “EmailId”是主要排序键,“SubscriptionId”是主分区键。我必须在其中插入一条记录,但在此之前我需要确保该记录不存在。我从JSON数组格式的第三方API端点获取记录。因此,我将不得不在表格中进行搜索,并且必须插入遗嘱中不存在的记录。
我得到的记录采用以下格式。这是一个示例响应,我可以在阵列中获得1000条记录。
[{
"emailId": "abc1@abc1.com",
"subscriptionId": "A1"
}, {
"emailId": "abc2@abc2.com",
"subscriptionId": "A2"
}, {
"emailId": "abc3@abc3.com",
"subscriptionId": "A3"
}]
我不想从上面的数组中选择每条记录,搜索表格,如果没有找到,请插入它,因为这个表格会变得很大。有没有其他方法可以做到这一点?我在NodeJS上使用它。虽然我无法更改JSON数组,但我可以对DynamoDB表进行更改。有什么建议吗?
答案 0 :(得分:0)
batchWrite 项目API可用于将多个项目放入批处理中。批次中的最大请求数 25 。
最好的部分是,如果PutRequest
中的密钥已经存在于表中,它会更新项目而不是抛出一些错误或异常(即密钥不是唯一的)。
此方法的缺点是最新更新将覆盖表中现有项的所有属性。例如,如果表中的现有项具有5个属性,而最新更新只有3个属性,则在最新批处理执行后,该表将只有3个属性(如最新的PutRequest中所示)。
var docClient = new AWS.DynamoDB.DocumentClient();
var params = {
RequestItems: {
"subscription": [
{
PutRequest: {
Item: {
"emailId": "abc1@abc1.com",
"subscriptionId": "A1"
}
}
},
{
PutRequest: {
Item: {
"emailId": "abc2@abc2.com",
"subscriptionId": "A2"
}
}
},
{
PutRequest: {
Item: {
"emailId": "abc3@abc3.com",
"subscriptionId": "A3"
}
}
}
]
}
};
docClient.batchWrite(params, function (err, data) {
if (err) {
console.error("Unable to write item. Error JSON:", JSON.stringify(err,
null, 2));
} else {
console.log("Write Item succeeded:", JSON.stringify(data, null, 2));
}
});