DynamoDB中的可选二级索引

nul*_*ter 11 amazon-web-services amazon-dynamodb secondary-indexes

我正在将我的持久层从Riak迁移到DynamoDB.我的数据模型包含一个可选的业务标识符字段,希望能够将其作为密钥的替代方案进行查询.

似乎DynamoDB二级索引不能null并且需要一个范围密钥,所以尽管与Riak的二级索引名称相似,但这看起来却是一个非常不同的野兽.

有没有一种优雅的方法来有效地查询我的可选字段,而不是将数据丢入外部搜索索引?

rpm*_*rtz 17

当您提出这个问题时,DynamoDB没有全球二级索引:http://aws.amazon.com/about-aws/whats-new/2013/12/12/announcing-amazon-dynamodb-global-secondary-indexes/

现在,确实如此.

本地二级索引最好被认为是一个辅助范围密钥.@andreimarinescu是对的:您仍然必须通过项目的哈希键进行查询,只能使用辅助索引,您可以使用该范围键上的DynamoDB查询的比较运算符的有限子集(例如,大于,等于,小于等)所以,你仍然需要知道你正在进行比较的"哈希桶".

全球二级指数是一个不同的野兽.它们更像是您桌子的二级版本(亚马逊在预配置吞吐量方面向您收取类似费用).您可以将表的非主键属性用作全局二级索引中索引的主键属性,并相应地查询它们.

例如,如果您的表格如下:

|**Hash key**: Item ID | **Range Key**: Serial No | **Attribute**: Business ID |
--------------------------------------------------------------------------------
|           1          |        12345             |             1A             |
--------------------------------------------------------------------------------    
|           2          |        45678             |             2B             |
-------------------------------------------------------------------------------- 
|           3          |        34567             |            (empty)         |
--------------------------------------------------------------------------------
|           3          |        12345             |             2B             |
--------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

然后,使用本地二级索引,Business ID您可以执行查询,例如"查找具有哈希键3和业务ID等于2B"的所有项目,但是您无法"查找业务ID等于2B"的所有项目,因为二级索引需要一个哈希键.

如果要使用业务ID添加全局二级索引,则可以执行此类查询.您基本上将为表提供备用主键.您可以执行查询,例如"查找业务ID等于的所有项目,2B并获取项目2-456783-12345作为响应.

稀疏索引与DynamoDB一起工作正常; 完全允许的是,并非所有项目都具有业务ID,并且可以允许您将索引上的预配置吞吐量保持在低于表格的位置,具体取决于您预计拥有业务ID的项目数量.