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

时间:2018-02-02 05:03:03

标签: indexing amazon-dynamodb

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

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

  

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

     

[...]

     

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

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

我错过了什么?

3 个答案:

答案 0 :(得分:1)

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

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

enter image description here

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

enter image description here

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

答案 1 :(得分:0)

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

答案 2 :(得分:-2)

Primary Key

Must have a hash key and can optionally have a sort key. The primary key must be unique.

Global Secondary Index

Must have a hash key and can optionally have a sort key. A GSI is independent of the primary key index.

Local Secondary Index

Is used to provide an alternative sort key to an existing index. The existing index by definition must already have unique keys, so the LSI does not need to have a value, hence NULL values are allowed.

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

In a DynamoDB table, the combined partition key value and sort key value for each item must be unique. However, in a local secondary index, the sort key value does not need to be unique for a given partition key value. If there are multiple items in the local secondary index that have the same sort key value, a Query operation will return all of the items that have the same partition key value. In the response, the matching items are not returned in any particular order.