繁体   English   中英

如果始终需要密钥,如何创建稀疏索引?

[英]How can I make a sparse index if the key is always required?

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

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

对于表中的任何项目,DynamoDB仅在项目中存在索引排序键值的情况下才会写入相应的索引条目。 如果排序键未出现在每个表项中,则该索引被认为是稀疏的。

[...]

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

但是,如果您有一个用备用排序键定义的LSI,则在创建新项目时,该备用排序键永远不能为空。 因此,索引一点也不稀疏,因为我创建的每个项目都会出现在索引中。

我想念什么?

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

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

在此处输入图片说明

原来,我所需要做的只是删除这些字段。

在此处输入图片说明

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

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

首要的关键

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

全球二级指数

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

本地二级指数

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

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LSI.html

在DynamoDB表中,每个项目的组合分区键值和排序键值必须唯一。 但是,在本地二级索引中,对于给定的分区键值,排序键值不需要唯一。 如果本地二级索引中有多个具有相同排序键值的项目,则Query操作将返回所有具有相同分区键值的项目。 在响应中,不按任何特定顺序返回匹配项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM