代码之家  ›  专栏  ›  技术社区  ›  Dave Durbin

DynamoDB如何搜索值列表

  •  0
  • Dave Durbin  · 技术社区  · 7 年前

    我有一个带有分区键和排序键的DynamoDB实例。假设它们是组织(散列键)和员工id(排序键)。

    我想找回名单上所有员工的身份证。他们都为同一个组织工作,但不是 全部的 是那个组织的雇员。

    在SQL中,我会做如下操作:

    select * from table where organisation_id = 'org' and employee_id in [list of ids]
    

    在DynamoDB中似乎没有等价物。

    我的选择似乎是: 1)使用查询或 2)使用BatchGetItems并为所有项目提供组织id:employee id

    第一个看起来会比较慢,因为它涉及多个请求,而第二个是单个请求,但可能会消耗更多的RCU。

    哪个是解决这个问题的首选方案?还是我错过了更好的第三条路?

    1 回复  |  直到 7 年前
        1
  •  0
  •   F_SO_K    7 年前

    我将使用GetItem迭代您的列表,将找到的每个员工添加到一个集合中。这种方法不是慢的-DynamoDB是专门为快速使用它们的键获取大量项目而设计的。

    不需要使用查询,因为您同时拥有分区键和范围键。只有当你想要一个组织的所有员工时,你才会使用查询。

    如果列表特别大,可以使用BatchGetItem,它将创建多个并行线程,从而减少延迟。除非你有很多东西要买,否则你不会发现有什么不同。

    顺便说一下,DynamoDB确实有一个“IN”操作符,但不能在KeyConditions上使用它。