Indexing 如果总是需要密钥,如何创建稀疏索引?

Indexing 如果总是需要密钥,如何创建稀疏索引?,indexing,amazon-dynamodb,Indexing,Amazon Dynamodb,我被DynamoDB中的某些东西弄糊涂了: 对于表中的任何项,如果项中存在索引排序键值,DynamoDB将只写入相应的索引项。如果排序键没有出现在每个表项中,则称索引为稀疏索引 [……] 要跟踪未结订单,可以在CustomerId(分区键)和IsOpen(排序键)上创建索引。只有表中定义了等参线的订单才会显示在索引中 但是,如果使用备用排序键定义了LSI,则在创建新项时,备用排序键永远不能为null。因此,索引根本不是稀疏的,因为我创建的每一项都会在索引中结束 我缺少什么?表的排序键不能为空。

我被DynamoDB中的某些东西弄糊涂了:

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

[……]

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

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


我缺少什么?

表的排序键不能为空。您在LSI中使用的字段可以为空。

主键

必须具有哈希键,并且可以选择具有排序键。主键必须是唯一的

全球次级指数

必须具有哈希键,并且可以选择具有排序键。GSI独立于主键索引

本地二级指数

用于为现有索引提供备用排序键。根据定义,现有索引必须已经具有唯一键,因此LSI不需要有值,因此允许空值

在DynamoDB表中,组合的分区键值和排序键 每个项目的值必须是唯一的。然而,在本地中学 对于给定的索引,排序键值不需要是唯一的 分区键值。如果本地数据库中有多个项目 具有相同排序键值的二级索引,一种查询操作 将返回具有相同分区键值的所有项。 在响应中,不返回任何特定的匹配项 秩序


所以我终于明白了。我应该澄清我在使用AWS控制台

我创建了一个GSI作为测试,使用分区键
Gpart
和排序键
Gsort
。我注意到,当我创建一个新项目时,这些字段会自动添加,我不能将它们保留为空,这就是我被卡住的地方。(我会得到错误“一个或多个参数值无效:AttributeValue不能包含空字符串”)

事实证明,我所需要做的就是删除这些字段

删除任何与GSI或LSI相关的属性后,我可以保存该项,而且可以肯定的是,这些索引只显示存在这些键的项