我正在寻找改进以下查询扫描的方法。我需要根据3个键进行查询
DynamoDB 在关键条件表达式中仅允许 2 个条件。我必须使用过滤器表达式,它会扫描太多记录。
我还在考虑在 GSI 中组合 2 个键作为排序键作为替代方案。这是正确的方法吗?
aws dynamodb query \
--table-name bundles \
--index-name GSI-RegulationSidBundleStatus \
--key-condition-expression "RegulationSid = :regulationSid AND BundleStatus = :bundleStatus" \
--filter-expression "AccountSid = :accountSid" \
--expression-attribute-values '{
":accountSid": {
"S": "XXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
":regulationSid": {
"S": "YYYYYYYYYYYYYYYYYYYYYYYYYYY"
},
":bundleStatus": {
"S": "APPROVED"
}
}'
是的,将多个键添加到分区键或排序键中是一种常见模式。为了帮助识别密钥,通常在每个密钥前添加密钥类型或缩写作为前缀,后跟哈希值以及每个密钥之间的哈希值。
对于您的情况,排序键类似于:
r#${RegulationSid}#b${BundleStatus}
。
这对于分区键来说也很常见,即使您只有一个键。对于您的情况:a#${AccountSid}
。
在决定是否重载分区键或排序键以及键的顺序时,请查看您的访问模式。如果您知道您有一个获取所有法规的模式,那么您需要将此密钥放在第一位。或者,如果您知道需要获取给定捆绑包状态的所有法规,请将捆绑包状态放在第一位。然后,您可以使用
begins_with
查询来获取这些项目列表,重复使用相同的 GSI。
在代码文档中,您可以列出使用的缩写,以确保不会对多个键类型使用相同的缩写。
我建议始终将客户帐户 ID 作为分区键中的第一个键。如果您稍后决定使用领先键行级授权,这会派上用场。
如果您想使用排序键,DynamoDB 在查询数据时仅允许其中一种组合。
1. Primary Partition key + Sort Key
OR
2. GSI Partition key + GSI Sort Key
作为另一种选择,您可以将两个密钥合并为一个密钥并保存到表中。稍后您可以使用组合列来查询数据。
这有助于使用 python 查询 DynamoDB。 https://www.youtube.com/watch?v=x8IxY4zoBGI