如果总是需要键,我如何制作稀疏索引?

ffx*_*sam 5 indexing amazon-dynamodb

我对 DynamoDB 中的某些东西感到非常困惑:

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForLSI.html#GuidelinesForLSI.SparseIndexes

对于表中的任何项目,如果项目中存在索引排序键值,DynamoDB 只会写入相应的索引条目。如果排序键没有出现在每个表项中,则称该索引为稀疏索引。

[...]

要跟踪未结订单,您可以在 CustomerId(分区键)和 IsOpen(排序键)上创建索引。只有表中定义了 IsOpen 的订单才会出现在索引中。

但是,如果您使用备用排序键定义了 LSI,则在创建新项目时,备用排序键永远不能为空。因此,索引根本不是稀疏的,因为我创建的每个项目都会在索引中结束。

我错过了什么?

ffx*_*sam 7

所以我终于想通了。我应该澄清我使用的是 AWS 控制台。

我创建了一个 GSI 作为测试,带有 partition keyGpart和 sort key Gsort。我注意到当我创建一个新项目时,这些字段是自动添加的,我不能将它们留空,这就是我卡住的地方。(我会收到错误“一个或多个参数值无效:一个 AttributeValue 可能不包含空字符串”)

在此处输入图片说明

事实证明,我需要做的实际上只是删除这些字段。

在此处输入图片说明

删除任何 GSI 或 LSI 相关属性后,我可以保存该项目,果然,这些索引仅显示那些键存在的项目。