我想获得一些帮助,以了解如何从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,因此由于效率低下,很难仅使用分页方法。您知道他们将消耗容量单位=我的钱。
我正在寻找类似的机制,例如缓存,增强型数据模型或某种可以解决此问题的机制。有人可以帮我吗?
这是二级索引的用途...
或者是本地二级索引(LSI),具有与表相同的哈希键,但排序键为C1。或具有不同哈希键(可能为C1作为哈希键)的全局二级索引(GSI)。
而不是查询表,而是查询索引。
请注意,GSI基本上是一个单独的系统维护的DDB表,具有自己的RCU / WCU和存储成本。
感谢您的回复。
如果您不介意,我可以再问一些。如果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)