当我想考虑排序键而不是分区键时,如何查询 DynamoDB?

Oct*_*pus 6 amazon-dynamodb

我不知道如何在 DynamoDB 中做到这一点。

我有一个数据表是这样的:

ID    Updated     other fields...

1200  2017-12-11              ...
1201  2018-02-05              ...
1205  2018-01-05              ...
1206  2018-01-11              ...
1210  2018-02-15              ...
1212  2018-02-10              ...
Run Code Online (Sandbox Code Playgroud)

分区键是“ID”,我有一个“已更新”的排序键。

例如,我想检索 Updated 大于“2018-02-01”的记录。

我不能单独查询“更新”,它抱怨Query condition missed key schema element: ID. 我明白这意味着什么,但我不确定如何正确执行此操作。

我尝试添加各种索引,然后查询索引,包括仅将“已更新”字段作为分区键,但随后我无法查询仅与分区键完全匹配的值范围。

那么,如何跨多个分区查询一个条件?

我可以使用扫描,但这可能很昂贵。我可以通过以某种方式索引它来做到这一点吗?或者有没有办法做一些类似于我不需要指定分区键的查询?

Cos*_*tin 2

好问题,但不是很好的解决方案!:)

\n\n

\xe2\x80\xa2 如果不以分区键为条件,则无法执行查询。
\n\xe2\x80\xa2 您需要该Updated列作为排序键,无论是在表“架构”中,还是在索引中。如果它不再是排序键,您将无法有效地查询Updated > VALUE.

\n\n

所以你需要一个恒定的分区键并Updated作为排序键。这是您的全局二级索引:
\n\xe2\x80\xa2 PK:ConstantColumn
\n\xe2\x80\xa2 SK:Updated

\n\n

当然,您将失去一些可扩展性,因为所有索引都将位于一个分区中,但是使用KEYS_ONLY投影应该可以为您提供足够的空间。

\n\n

如果您确实需要更多的可扩展性,请考虑使用PK诸如C0, C1, ...,Cn,迭代每个分区键的查询,然后合并结果(divide et impera)。

\n