【问题标题】:Insert data inside SQS queue in order into DynamoDB将 SQS 队列中的数据按顺序插入 DynamoDB
【发布时间】:2021-04-19 07:22:31
【问题描述】:

我们可以在一个 sqs 消息中包含多行并将它们插入到 dynamodb 中吗?例如,如果我有多个按部门划分的 sqs 队列,并且在队列内部,我有员工列表,其中包含员工 ID、部门 ID、名字、姓氏等属性,我应该按员工 ID 的升序迭代队列的内容并插入员工id、部门 id、名字、姓氏到 dynamodb 表中。

【问题讨论】:

  • 是的,您可以将数据插入 dynamodb。不,您无法从按某些条件排序的队列中获取消息,您要么随机获取它们,要么在 fifo 队列的情况下按照它们插入的顺序获取它们,但您无法获取按员工 ID 排序的消息。
  • 谢谢 luk2302,我的意思是让队列中的顺序是随机的,我将根据员工 ID 进行迭代并按顺序插入。但是 SQS 队列会让我在一个队列中拥有多个员工 ID 吗?
  • SQS 不关心你的消息内容(除了长度限制),你可以放任何你想要的东西。

标签: amazon-web-services amazon-dynamodb amazon-sqs


【解决方案1】:

根据我的阅读,您似乎希望员工数据在 Dynamodb 中按 id 排序。

首先,SQS 不会根据您的需求/定制进行排序。它确实提供了基于您插入消息的顺序的 FIFO(先进先出)队列。

即使 SQS 确实具有您想要的功能,并且您可以按您喜欢的顺序将消息/数据插入到 dynamodb,它也不能保证您在 dynamodb 中对数据进行排序并在查询结果中进行排序。

为了在 DynamoDB 表中对数据进行排序并反映在查询结果中,您需要使用排序键(范围属性)。

您可以在 DynamoDB 表设计中尝试以下几个选项。

  1. 部门 ID 作为分区键 + 员工 ID 作为排序键

通过此设置,您可以在查询时在一个部门内对员工数据进行排序。

  1. 创建一个名为“everyone”的属性/列,插入记录时将值设置为1。然后,您可以创建 GSI(全局二级索引),其中所有人作为分区键,employeeId 作为排序键。

通过此设置,您的所有员工数据都按员工 ID 排序,而与部门 ID 无关。如果您的 GSI 大小低于几 GB,它应该可以正常工作。

此外,您可以将选项 1 和选项 2 组合在一起,以归档公司级别和部门级别的排序员工。

【讨论】:

    猜你喜欢
    • 2016-04-07
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 2017-05-16
    • 2011-09-25
    • 2013-12-18
    • 2019-05-17
    • 2020-01-28
    相关资源
    最近更新 更多