从 dynamo db

时间:2021-06-09 14:32:12

标签: amazon-dynamodb dynamodb-queries

我环顾四周,似乎无法轻松完成我需要的工作。令人费解的是,我认为这是一个常见的用例,所以我只想仔细检查一下。

我有这样的数据:

(PK, SK -> 值)
A, 1 -> ABC
A, 2 -> DEF
B, 1 -> GHI
B, 2 -> JKL
C, 1 -> MNO

我需要一种方法来读取给定 PK 的值。例如:

getByPK([A, C]) -> ABC, DEF, MNO

我可以灵活地定义索引或以不同格式存储数据。

注意事项:

  1. 数据集很大,所以扫描不是一种选择。
  2. 传递给 getByPK 的 PK 数量很少,现在我只是一个一个地检索每个组 (getByPK(A), getByPK(C))
  3. 没有可用于对项目进行分组并用作分区键的总体属性。
  4. 我从来不需要按排序键查询。

本质上我需要一个相当于 SELECT * FROM myTable WHERE PK IN (A, C) 的东西,我说得对吗?在 DDB 世界中没有吗?

我能想到的唯一解决方案是将数据组织为:
A -> [ {1, ABC}, {2, DEF}]
B -> [ {1, GHI}, {2, JKL}]
C -> [ {1, MNO} ]

但这感觉就像滥用数据库一样。

1 个答案:

答案 0 :(得分:0)

如果您知道完整的主键(分区键 + 排序键),则可以使用 BatchGetItem API

听起来您需要获取的 PK 数量很少,因此执行多个查询操作(如果您知道完整的主键,则执行 getItem)是一个合理的选择。

如果您可以对这些项目应用逻辑分组(例如,按类型、按创建日期、某些属性组合等获取项目),则还有其他可用的策略。但是,如果不了解您的数据的具体情况,就很难详细说明。