我环顾四周,似乎无法轻松完成我需要的工作。令人费解的是,我认为这是一个常见的用例,所以我只想仔细检查一下。
我有这样的数据:
(PK, SK -> 值)
A, 1 -> ABC
A, 2 -> DEF
B, 1 -> GHI
B, 2 -> JKL
C, 1 -> MNO
我需要一种方法来读取给定 PK 的值。例如:
getByPK([A, C]) -> ABC, DEF, MNO
我可以灵活地定义索引或以不同格式存储数据。
注意事项:
getByPK
的 PK 数量很少,现在我只是一个一个地检索每个组 (getByPK(A), getByPK(C)
)本质上我需要一个相当于 SELECT * FROM myTable WHERE PK IN (A, C)
的东西,我说得对吗?在 DDB 世界中没有吗?
我能想到的唯一解决方案是将数据组织为:
A -> [ {1, ABC}, {2, DEF}]
B -> [ {1, GHI}, {2, JKL}]
C -> [ {1, MNO} ]
但这感觉就像滥用数据库一样。
答案 0 :(得分:0)
如果您知道完整的主键(分区键 + 排序键),则可以使用 BatchGetItem API。
听起来您需要获取的 PK 数量很少,因此执行多个查询操作(如果您知道完整的主键,则执行 getItem)是一个合理的选择。
如果您可以对这些项目应用逻辑分组(例如,按类型、按创建日期、某些属性组合等获取项目),则还有其他可用的策略。但是,如果不了解您的数据的具体情况,就很难详细说明。