我正在考虑在 DynamoDB之上写排队系统。这不像SQS或后台处理。它是 是员工需要处理的事情的有序列表。有名为 的队列包含更大系统中其他对象的ID。该系统的 部分仅代表队列方面。有序的任务列表与DynamoDB
商业模式是这样工作的。一个对象进入系统 并将其添加到给定的队列中。一名员工从队列中挑选一些东西关掉 。将指定的项目移动到指定时间的 的工作集中。如果员工在指定时间 之前创建任务,则任务完成并从系统中删除。如果不是,则从工作集中删除 并将其添加回主队列中。 有多名员工立即将事情从队列中拉出。 这发生在真正的人类时代。该系统还需要支持 性能规格操作。通过这种方式,可以在UI中显示 的总作业。
我在考虑DynamoDB,因为这是公司最关键的流程 。 DynamoDB保证了性能和可伸缩性。 我们现在有一个基础设施问题,因为独立系统 不是建立在适合他们需求的基础设施之上的。所以我 到达这里。
我之前玩过DyanmoDB,但玩过的东西只有玩过。这是 真实的交易。我无法弄清楚如何采取这种商业模式 并映射到DynamoDB。天真的办法是采取文件 这样的:
{
"queue": "high",
"jobs": [1,2,3,4,5,6]
}
而且只需保存,在工作表中。我说天真,因为 会浪费DynamoDB的性能,因为全部 吞吐量只能通过几个键(实际上有3个队列 在所有读写)。不幸的是,我不能来 了一个完整的解决方案。
我的想法是使用复合散列键和一个表来存储 所有排队的任务。对于范围键,queue
将散列和作业位置 。所以像这样:
Hash Range Job Task
high 1 55 328
low 2 15 23871
medium 1 12 38173
依此类推。这将在整个表中分配读取。获取 队列中的第一项将在queue
和 上执行查询,然后按range
排序,然后拉出第一项。计数的工作方式类似于 。
我认为工作集会以类似的方式工作,除了散列 将是类似于queue.job
。通过这种方式,get
请求 可以在表格中选出一个单独的项目。表格的jobs
实际上可能具有相同的要求。
我的关注点是让所有东西都按照工作表排序。插入 新项目将使用count + 1
作为范围键。我不确定 如何在实践中发挥作用。我看到队列大小 波动的问题。工作必须在开始 也是必需的。如果他们没有及时从工作集中删除,他们必须 到通用队列的前面。这可以通过对范围使用0
来完成。
有没有人在DynamoDB上实现过类似的东西,或者是 我的想法完成了猪洗?如果有,请告诉我。我有一个机会 更新业务关键系统,并希望使这件事 稳定&快地狱,因为我们现在有很多问题。
表2不是针对我说的关于在小容量的密钥上创建大吞吐量的说法吗?另外,如何使用模型获取指定队列中的所有任务? 编辑:重新排序不是必需的。在我的模型中插入'0'位置就足够了。 – ahawkins
由于第二个表的散列键是员工ID,访问将分布。如果你不需要重新排序,你可以考虑使用负值键。从零开始,如果在此之前需要插入,则使用-1,-2并继续。 –
为什么使用employee/owner_id?你添加了什么?我不需要为特定人员检索任务,只需要在特定队列中执行任务 - 或者这是我的工作集思路的实现? – ahawkins