我正在为多个用户创建任务分配脚本。一个任务分配给一个用户,如果在接下来的 30 分钟内没有被接受,我需要重新分配给另一个用户。
实际上,我为此使用了 DynamoDB,每个任务分配都在 30 分钟后附加到 TTL。当 TTL 过期时,我通过 Stream 处理并检查它是否被接受。如果没有,我正在重新分配并在表中创建一个具有 30 分钟 TTL 的新条目。
我错过了 TTL 的一个概念,即它不会实时过期项目,可能需要长达 48 小时。
是否有任何其他智能方法来处理此类用例,目前我将其实现为 -
- 添加以 TTL 作为排序键和 event_type = Task 作为分区键的索引
- 每分钟查询 TTL 小于当前 epoch 的所有记录,并批量删除这些记录。
这里有两个挑战——
- 首先,由于 event_type 在整个表中是恒定的,所有数据都在索引的一个分区上,这对于大容量是不利的
- 这是一种轮询机制,我实际上需要扫描所有记录,这也不是一个可扩展的解决方案
我正在探索我们是否可以通过推送机制巧妙地做到这一点。解决此用例的任何指示或帮助?