amazon-dynamodb - 有条件地从列表属性中删除项目
问题描述
我有一个带有列表属性的项目,列表的每个元素都是一个地图。
"listAttr": [
{"field1":"value1", "field2":"value2", ...}
, {"field1":"value3", "field2":"value4", ...}
....
]
我想执行如下所示的 REMOVE 语句:
REMOVE listAttr[x]
有一个条件
listAttr[x].field1 = :val
我想删除列表中符合我的条件的所有元素
我不想先查询项目来计算 id,因为它会在插入和删除之间产生竞争(在我执行 REMOVE 时,id 可能会不同步)
SQL 等价物是:
DELETE from listAttr where field1=?
我该怎么做呢 ?
解决方案
我的理解是,这在 DynamoDB 中是不可能的。您可以使用带有乐观锁定的 PUT 操作来避免丢失更新。
如果频繁写入该项目会使此操作不可行,那么您可以查看“垂直分区”,将单个大项目拆分为多个项目,这样可以降低竞争条件的风险,仅在应用程序的情况下一次更改项目的某些部分,并可能降低读取或写入的成本,以防单个项目很大,并且您可以进行更有针对性的查询。
推荐阅读
- c - 当 inet_pton 失败但 getaddrinfo 成功时?
- python-3.x - Discord.py - Asyncio 超时无法正常工作
- php - PHP preg_replace 多行指南
- maven - 使用 maven javafx 嵌入 derby db 的 jpa
- php - PHP 创建函数回文
- r - 如何正确使用 lapply 和 Bloomberg Rblpapi 包来提取多组代码
- python - 计算 MNIST 数据库灰度图像的密度
- python - 我需要使用 pyodbc 模块才能连接到 SQL-server 但我不能使用 SQL-SERVER 驱动程序
- c++ - 一个类的实例(不是类本身)可以是另一个类的许多实例的父类吗?
- javascript - 在 JQuery/Javascript 中与 SQLite 数据库交互?