我有下表:
表1
我需要通过Attribute1和Attribute2(以及运算符)进行查询。
设计表的最佳方法是什么(使用二级索引,全局二级索引等)以及通过属性检索数据的最佳方式(性能)是什么?只能通过扫描?
答案 0 :(得分:0)
假设您的查询要求是 key EQ keyvalue AND Attribute1 OPERATOR1 value_1 AND Attribute2 OPERATOR2 value_2
/ *其中keyvalue是您要使用的哈希键的值,value_1和value_2分别是对应于Attribute1和Attribute2的值* /
在这种情况下,使用HashKey = key,RangeKey = Attribute1或Attribute2定义一个表 - 以较高的基数为准。让我们假设Attribute1具有更高的基数
创建查询时, KeyConditions部分将有
密钥(即散列密钥)EQ密钥值
属性1(即范围键)OPERATOR1 value_1
/ * OPERATOR1可以是以下运算符之一 - EQ | LE | LT | GE | GT | BEGINS_WITH | BETWEEN * /
QueryFilter部分将有
和
Attribute2(即非键属性)OPERATOR2 value_2
/ * OPERATOR2可以是以下运算符之一 - EQ | NE | LE | LT | GE | GT | NOT_NULL | NULL |包含| NOT_CONTAINS | BEGINS_WITH | IN | BETWEEN * /
请注意,将根据哈希键和Attribute1获取项目,然后根据Attribute2过滤它们。有关查询API的更多详细信息,请参阅此文档http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html
如果您希望查询满足以下方案
然后,您可以使用HashKey = key,RangeKey = Attribute_1以及具有Index HashKey = key和Index RangeKey = Attribute2的全局二级索引(GSI)或本地二级索引(LSI)来定义表。
有关GSI和LSI之间的比较,请参阅以下文档 http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/SecondaryIndexes.html