Amazon dynamodb 带DynamoDB的有序任务列表

Amazon dynamodb 带DynamoDB的有序任务列表,amazon-dynamodb,was,Amazon Dynamodb,Was,我正在考虑在上面写一个排队系统 发电机B。这与SQS或后台处理不同。信息技术 是员工需要处理的事情的有序列表。有两个名字 包含较大系统中其他对象ID的队列。这 系统的一部分仅表示队列方面 商业模式是这样运作的。一个对象进入系统 并将其添加到给定队列中。一个雇员偷东西 排队。将给定项移动到工作集中的 指定时间。如果员工在指定时间之前创建任务 任务已完成并从系统中删除。如果不是的话 从工作集中删除并添加回主队列。 有多名员工同时从队列中取出物品。 这是真实的人类时间。该系统还需要支持 执行大小操作。

我正在考虑在上面写一个排队系统 发电机B。这与SQS或后台处理不同。信息技术 是员工需要处理的事情的有序列表。有两个名字 包含较大系统中其他对象ID的队列。这 系统的一部分仅表示队列方面

商业模式是这样运作的。一个对象进入系统 并将其添加到给定队列中。一个雇员偷东西 排队。将给定项移动到工作集中的 指定时间。如果员工在指定时间之前创建任务 任务已完成并从系统中删除。如果不是的话 从工作集中删除并添加回主队列。 有多名员工同时从队列中取出物品。 这是真实的人类时间。该系统还需要支持 执行大小操作。这样可以显示总作业数 在UI中

我在考虑DynamoDB,因为这是最关键的过程 在公司里。DynamoDB具有保证的性能和可扩展性。 我们现在有一个基础设施问题,因为独立的系统 没有建立在满足其需求的基础设施之上。所以我 到了这里

我以前玩过DyanmoDB,但只玩过玩具。这是 真正的交易。我不知道该如何采取这种商业模式 并映射到DynamoDB。天真的做法是采用一份文件 像这样:

    {
       "queue": "high",
       "jobs": [1,2,3,4,5,6]
    }
  Hash    Range   Job    Task
  high    1       55      328
  low     2       15      23871
  medium  1       12      38173
只需将其保存在jobs表中即可。我说天真是因为这会 正在浪费DynamoDB的性能能力,因为 吞吐量只需通过几个键(有~3个队列 实际上)用于所有读写操作。不幸的是我不能来 拿出一个完整的解决方案

我的想法是使用一个复合哈希键和一个表来存储 所有排队的任务。
队列将包含哈希和作业位置
用于范围键。比如说:

    {
       "queue": "high",
       "jobs": [1,2,3,4,5,6]
    }
  Hash    Range   Job    Task
  high    1       55      328
  low     2       15      23871
  medium  1       12      38173
等等。这将在整个表中分配读取。得到 队列中的第一项是对
queue
进行查询,然后 按
范围排序
然后拉出第一项。他在一家公司工作 类似的方式

我认为,除了散列,工作集将以类似的方式工作 将是类似于
队列.job
的作业。通过这种方式,一个
get
请求 可以在表格中选择单个项目。
作业
表实际上可能有相同的要求

我关心的是保持工作表中的一切有序。插入 新项目将使用范围键的
count+1
。我不确定 这在实践中是如何起作用的。我认为问题在于队列大小 波动。工作在开始时必须是可重新获得的 也如果他们没有及时从工作组中删除,他们必须 走到一般队列的前面。这可以通过使用
0
射程

有人在DynamoDB上实现过类似的东西吗 我的主意是彻底洗猪?如果是,请告诉我。我有机会 更新业务关键型系统并希望实现这一目标
因为我们现在有很多问题,所以非常稳定和快速。

当您需要更改作业顺序时(比如想将最后一个任务移动到第二个位置),您当前的方法会导致需要更改许多项的问题

另一种可能是有两个表-一个用于作业详细信息,另一个用于订单

  • 作业详细信息:哈希(作业ID/UUID)、作业详细信息(其他属性)
  • 作业队列:散列(员工/所有者id),散列(“高/低”),{jobid1,jobid2…}(这是一个字符串JSON)

  • 您不能将集合用于工单,因为它再次是未排序的。

    表2是否与我所说的关于在少量密钥上创建大吞吐量的内容相反?另外,如何使用您的模型获取指定队列中的所有任务?编辑:不需要重新排序。在我的模型中插入position
    0
    就足够了。因为第二个表的哈希键是employee id,所以访问权限是分布式的。如果不需要重新排序,可以考虑使用负值键。从零开始,如果在此之前需要插入-1,-2,然后继续。为什么要使用员工/所有者id?你加了什么?我不需要为给定的人检索任务,只需要检索给定队列中的任务——或者这是我工作集思想的实现吗?是的,这是工作集部分。最终一个任务被分配给一个人,所以我将它与那个人的id保持关联。