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

时间:2019-05-24 12:44:38

标签: nosql amazon-dynamodb dynamodb-queries

假设我有一个分区键Set<List<String>> set = new TreeSet<List<String>>(new Comparator<List<String>>() { @Override public int compare(List<String> l1, List<String> l2){ //compares the lists based on first index return l1.get(0).compareTo(l2.get(0)); } }); ,它有几个排序键,例如User:user@email.comDataSale:001

现在,如果我要删除该用户怎么办?

我已经考虑过使用API​​的两种可能方式。

1-扫描

首先执行Contact:001,其中SCAN,获取结果,并使用相应的排序键对每个返回的项目进行批量删除。

2-查询

为此,我首先需要将所有排序键更改为具有公共前缀,例如partition-key=User:user@emailUser|DataUser|Sale:001,然后在其中查询

User|Contact:001

获得结果后,我将像扫描选项一样进行批量删除。


我不清楚哪个选项是最佳选择,因为我不确定扫描是否具有“智能”功能仅在特定分区内进行扫描,还是会扫描表中的每个记录。因为在DynamoDB中,您需要为“搜索到的”项目的每kb支付费用

因为它是智能的,所以我认为它的成本与查询选项相同,而无需在我的排序键上添加前缀。

1 个答案:

答案 0 :(得分:1)

Scan()除作为过滤器表达式外,不支持partition-key=User:user@email

是的,整个表将被读取。实际上只有匹配的记录会被返回。

另一方面,

Query()需要partition-key=user:user@email作为关键条件表达式。您无需对排序键设计进行任何更改;因为包括排序键的键条件是optional

  

必须进行分区键相等性测试,并且必须在   以下格式:

     

partitionKeyName =:partitionkeyval

     

如果您还想提供排序键的条件,则必须为   结合使用AND与排序键的条件。以下是   一个示例,使用=比较运算符作为排序键:

     

partitionKeyName =:partitionkeyval和sortKeyName =:sortkeyval