使用带有全局二级索引的 boto3 在 dynamodb 上进行有条件的放置

Posted

技术标签:

【中文标题】使用带有全局二级索引的 boto3 在 dynamodb 上进行有条件的放置【英文标题】:Conditional Put on dynamodb using boto3 with global secondary Index 【发布时间】:2016-05-26 04:44:32 【问题描述】:

我有一个 dynamodb 哈希键:联系人ID 全球二级索引:EmailIndex(Email), 移动索引(移动)

我想将项目插入到 dynamodb 中,条件是新项目没有 表中已存在 EmailId 或手机号码

我听说conditional put是否可以将其用于上述条件。

需要注意的是,Email 和 Mobile 字段并不总是出现在项目中

下面是我现在用来插入项目的代码

table = dynamodb.Table('Contacts')
response = table.put_item(
   Item=
        'ContactID': str(uuid.uuid4()),
        'Email': 'user@ymail.com',
        'Mobile':'020298377783',
        'City':"Alaska",

    ,
    Expected='Email': 'Exists': False, 'Mobile':'Exists': False

)

但即使我提供相同的电子邮件或手机,它也会继续添加项目

【问题讨论】:

【参考方案1】:

如果每个项目都确定有一个电子邮件和一个与之关联的手机,您可以创建一个具有复合分区键模式的表,其中分区键是mobile_email=[Mobile,Email]。然后,您可以在 PutItem 请求中使用 attribute_not_exists(mobile_email) 条件来防止创建新项目。

【讨论】:

以上是关于使用带有全局二级索引的 boto3 在 dynamodb 上进行有条件的放置的主要内容,如果未能解决你的问题,请参考以下文章

DynamoDB:查询中的全局二级索引利用率

并行执行DynamoDB查询(全局二级索引的BatchGetItems)

使用 DynamoMapper 和类 Annotation 创建具有全局二级索引的表

使用全局二级索引的 DynamoDB 表查询项

如何在无服务器框架中使用全局二级索引定义 DynamoDB 表

跨主索引和全局二级索引的 DynamoDB 键唯一性