我有一个带有分区键和排序键的DynamoDB实例。假设它们是组织(哈希键)和员工ID(排序键)。
我想检索所有ID在列表中的员工。他们都在同一个组织中工作,但不是该组织所有员工的全部。
在SQL中,我会做类似的事情:
select * from table where organisation_id = 'org' and employee_id in [list of ids]
DynamoDB中似乎没有类似的东西。
我的选择似乎是: 1)使用查询对所有员工ID进行迭代 2)使用BatchGetItems并为所有项目提供Organisation_id:employee_id
第一个似乎会比较慢,因为它涉及多个请求,而第二个是单个请求,但可能会消耗更多的RCU。
其中哪些是该问题的首选解决方案?还是我错过了更好的第三种方式?
答案 0 :(得分:0)
我将使用GetItem遍历您的列表,将找到的每个员工添加到集合中。这种方法并不慢-DynamoDB专为使用键快速获取许多项目而设计。
因为您同时具有分区键和范围键,所以不需要使用查询。如果您说想要一个组织的所有员工,则只会使用查询。
如果列表特别大,则可以使用BatchGetItem,它将创建多个并行线程,因此减少了延迟。除非您有很多物品要买,否则您不会发现太大差异。
顺便说一下,DynamoDB确实有一个'IN'运算符,但是您不能在KeyConditions上使用它。