Nosql DynamoDB—删除分区的最有效方法?

Nosql DynamoDB—删除分区的最有效方法?,nosql,amazon-dynamodb,dynamodb-queries,Nosql,Amazon Dynamodb,Dynamodb Queries,假设我有一个分区键,它是User:user@email.com并且它有几个排序键,如数据,销售:001,联系人:001 现在,如果我想删除这个用户呢 我想到了使用API的两种可能的方法 1-扫描 首先进行扫描,其中分区键=用户:user@email,获取结果并使用相应的排序键对每个返回的项目进行批量删除 2-查询 为此,我首先需要将所有排序键更改为具有公共前缀,例如User | Data,User | Sale:001,User | Contact:001,然后在 partition-key=U

假设我有一个分区键,它是
User:user@email.com
并且它有几个排序键,如
数据
销售:001
联系人:001

现在,如果我想删除这个用户呢

我想到了使用API的两种可能的方法

1-扫描

首先进行
扫描
,其中
分区键=用户:user@email
,获取结果并使用相应的排序键对每个返回的项目进行批量删除

2-查询

为此,我首先需要将所有排序键更改为具有公共前缀,例如
User | Data
User | Sale:001
User | Contact:001
,然后在

partition-key=User:user@email.com and sort_key.begins_with(User)
得到结果后,我会像扫描选项一样批量删除


我不清楚哪个选项是最好的,因为我不确定扫描是否具有仅扫描特定分区内的“智能”,或者它将扫描表中的每条记录。因为在DynamoDB中,您为“搜索”的每kb项目付费

因为如果它是智能的,那么我认为它的成本将与查询选项相同,而无需为我的排序键添加前缀。

Scan()不支持
partition key=User:user@email
除作为筛选表达式外

所以是的,整个表格都会被阅读。只有匹配的记录才会实际返回

另一方面,Query()需要
分区键=用户:user@email
作为关键条件表达式。您不需要对排序键设计进行任何更改;因为包含排序键的键条件是

分区键相等测试是必需的,必须在中指定 以下格式:

partitionKeyName=:partitionkeyval

如果还希望为排序键提供条件,则必须为 与排序键的条件结合使用和。以下是 例如,对排序键使用=比较运算符:

partitionKeyName=:partitionkeyval和sortKeyName=:sortkeyval


哦,我不知道排序键的条件是可选的