用于过程/事务监控的Dynamodb数据模型



我想跟踪多阶段处理作业。

可能只需要以下字段

batchId (guid) | eventId (guid) | statusId (int) | timestamp | message (string)

每个批次的事件数量相对较少。

我希望能够轻松查询状态Id小于n(仍在处理或未完成处理)的事件

对每个状态更改使用多行,并查询最新状态是最好的方法吗?我会使用全局二级索引,但StatusId似乎不是hashkey的好候选者(少于10个状态)。

如果更新同一事件行,则可以使用DynamoDB文档中"使用计算值"一节中描述的技术,而不是对每个状态更改使用多行。基本上,这将涉及添加另一个属性(比如"derivedStatusId"),该属性将通过在向DynamoDB写入时向statusId添加一个随机数来派生。例如,对于2的statusId,derivedStatusId可以是{"2-00"、"2-01"、.."2-99"}之一。在derivedStatusId上设置一个全局二级索引会给你一些扇出,这将有助于防止索引变得热门。

如果您确信将仅对未完成的事件使用此索引,那么在记录转换到已完成状态时从记录中删除derivedStatusId属性也将从索引中删除它-如果事件最终要完成处理,并且它们永远存在,则这可能是一个很好的属性。这种技术被称为"稀疏索引",在这里有更详细的描述。

从您的问题来看,保持状态历史记录似乎是一种理想的属性(我认为这是因为您希望有多行用于状态更改)。请考虑将这些历史信息放在同一行中。DynamoDB支持列表数据类型,还具有400KB的项目限制,这可能只允许您在同一记录中捕获所有所需的历史信息。

相关内容

  • 没有找到相关文章

最新更新