DynamoDB多设备ID数据检索的方案咨询与优化实践
DynamoDB多设备ID查询问题与解决方案
使用场景
用户提供多个设备ID,需返回与这些ID完全匹配的设备数据。
原有实现方式
API发起多次DynamoDB请求,每次通过作为分区键的device_id获取单个设备数据,再合并返回给UI。
对比SQL中可实现的单条IN查询:
select * from device where device_id in ('123','234', '345')
疑问
- DynamoDB通过分区键检索是否足够快速/低成本?上述多次访问的方式是否合理?
- 是否有其他方案可通过单查询获取多个ID对应的条目?
最终解决方案
虽有使用Execute语句的建议,但希望沿用现有DDB资源查询模式。最终更新了数据模型:新增与排序键device_id值重复的search_id属性,借此使用IN运算符过滤数据(当前DynamoDB UI的过滤选项中未显示该运算符,故最初未想到)。最终查询语句如下:
aws_query = { 'Limit': self.take, 'Select': 'ALL_ATTRIBUTES', 'ScanIndexForward': False, 'TableName': 'Devices', 'KeyConditionExpression': Key('type').eq('device'), 'FilterExpression': Attr('search_id').is_in(device_ids) }
内容的提问来源于stack exchange,提问作者kaplievabell
相关产品推荐
相关产品推荐

