amazon-web-services - Dynamodb 更新多个数据
问题描述
假设这是我的数据库表
[
{PK:'#author_1', SK: 'author', name: 'aytor'},
{PK:'#author_2', SK: 'author', name: 'ryan'},
{PK:'#book_1', SK: '#author_1', title: 'hello 123', author_name: 'aytor'},
{PK:'#book_2', SK: '#author_1', title: 'hello 456', author_name: 'aytor'},
{PK:'#book_3', SK: '#author_1', title: 'hello 789', author_name: 'aytor'},
]
我的问题是,如果管理员更改作者姓名,我如何更新所有书籍作者姓名。
访问模式:获取author_pk
并更新 Book 所在的所有书籍SK=author_PK
我正在尝试使用AWS-SDK
for node解决这个问题js
解决方案
复制数据是在 DynamoDB 中为一对多关系建模的好方法。但是,如果您要复制的数据可能会发生变化,那么它的吸引力可能会降低。如果这是一个不常见的操作,比如更新一本书的作者,它可能是一种可以接受的方法。
使用此数据模型,您需要按作者获取所有书籍并手动更新每本书的作者姓名。您可以使用scan
该作者所有书籍的表格,也可以在索引 PK = author_id 和 SK = book_id 的书籍项目上引入全局二级索引。这样,您就可query
以为每个作者列出书籍列表并相应地发布更新。
DynamoDB 不提供批量更新操作。但是,您可以在应用程序中处理并发。使用 was node SDK,它看起来像(在伪代码中,我没有测试过这个)
const updates = [];
let new_author_name = "Clancy"
for (let i = 0; i < books.size; i++) {
updates.push(ddb.update({
TableName: 'MY_TABLE',
Key: { PK: books[i].PK},
UpdateExpression: 'SET #name = :name',
ExpressionAttributeValues: {
':name': new_author_name
},
ExpressionAttributeNames: {
'#name': 'name'
}
}).promise());
}
await Promise.all(updates);
推荐阅读
- python - 在 setup_module 和 teardown_module 中使用固定装置
- java - 一个类声明了一个带有两个参数的构造函数。你将如何创建一个没有参数的类的实例?
- regex - 正则表达式和可选匹配组
- c++ - 为什么 Python 需要在 DLL 中使用 GetMessage 进行消息泵送而不是 Qt?
- xslt - xslt for substring- before or get a specific value for a input
- php - symfony 4中的模型转换器和预期的表单视图数据不匹配
- excel - 使用我的 vba 获取需要对象的错误消息
- excel - Excel 在分析服务器上的枢轴速度很慢,powerbi 桌面中的相同交叉表速度很快
- c++ - tpp.c:84:使用 pcl_ros::transformPointCloud 时断言失败
- javascript - jQuery AJAX JSON 数据被展平