我有一个DynamoDB表,其中包含以下键:
data._ref
(值是一个uuid) - 这是主键
loader.construct_mapping(node, deep=True)
- 只是常规密钥
我希望能够查询DynamoDB以获取id
等于某个值的项目。
为了做到这一点,some_other_field
是否需要成为排序键?
我可以改为存储一个Document项而不是键值项吗?但是,我没有找到如何做到的文档。
答案 0 :(得分:1)
我猜你有一个带有键的DynamoDB 表(不是项目):
id
- 字符串 - 将其命名为分区键或哈希键some_other_field
- 字符串|数字| blob - 如果键不在键中,则称之为排序键或范围键或常规列无论您的情况如何,我都会使用分区键定义全局二级索引:some_other_field
和投影:KEYS_ONLY
。
您可以使用some_other_field = VALUE
查询项目的索引。因此,你永远不会扫描整个表格,只能得到你需要的东西。
// There may be some small errors in names, consider that code a hint ;)
const params = {
TableName: 'MY_TABLE_NAME',
IndexName: 'MY_INDEX_NAME',
KeyConditionExpression: '#pk = :pk',
ExpressionAttributeNames: {
'#pk': 'some_other_field', // GSI partition key
},
ExpressionAttributeValues: {
':pk': MY_VALUE,
},
}
这不是唯一的解决方案,您也可以使用过滤器表达式扫描表格以保留与条件匹配的项目,但它比上面的解决方案更昂贵,因为它总是扫描所有表格。