在DynamoDB中,如何在多个条件下(按顺序和限制)获取某些数据

问题描述 投票:0回答:2

我想获得一些帮助,以了解如何从DynamoDB获取满足某些条件的某些数据。以下是我所面临的情况。

数据:

| pk | sk | c1 |

| 1 | 1 |一个|

| 1 | 2 | b |

| 1 | 3 | b |

| 1 | 4 |一个|

| 1 | 5 |一个| ...

应用程序:我的应用程序将获取最后2行(项),并且必须具有特定的值c1。它可以表示为SQL,例如:

select * from TABLE where pk=1 and c1=b order by sk limit 2;

问题在于,DynamoDB的工作方式就像是将数据提取到数字'limit',然后反映条件。我有很多行具有相同的PK,因此由于效率低下,很难仅使用分页方法。您知道他们将消耗容量单位=我的钱。

我正在寻找类似的机制,例如缓存,增强型数据模型或某种可以解决此问题的机制。有人可以帮我吗?

nosql amazon-dynamodb data-modeling datamodel dynamodb-queries
2个回答
0
投票

这是二级索引的用途...

或者是本地二级索引(LSI),具有与表相同的哈希键,但排序键为C1。或具有不同哈希键(可能为C1作为哈希键)的全局二级索引(GSI)。

而不是查询表,而是查询索引。

请注意,GSI基本上是一个单独的系统维护的DDB表,具有自己的RCU / WCU和存储成本。


0
投票

感谢您的回复。

如果您不介意,我可以再问一些。如果c1有多个条件怎么办?

例如:

| pk | sk | c1 |

| 1 | 1 |一个|

| 1 | 2 | b |

| 1 | 3 | c |

select * from TABLE where pk=1 and c1 in (b,c) order by sk limit 2;

我实际上在这种情况下遇到了麻烦。如果使用c1进行了倒排(GSI,LSI ...)索引,则将不符合预期。这是因为我理解DynamoDB在执行查询时不能使用多个主键。

我对上述情况的期望是:获得2行=(1,2,b),(1,3,c)

但是在DynamoDB中:1行(1,2,b)

© www.soinside.com 2019 - 2024. All rights reserved.