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-45678和3-12345作为响应.
稀疏索引与DynamoDB一起工作正常; 完全允许的是,并非所有项目都具有业务ID,并且可以允许您将索引上的预配置吞吐量保持在低于表格的位置,具体取决于您预计拥有业务ID的项目数量.
| 归档时间: |
|
| 查看次数: |
5844 次 |
| 最近记录: |