AWS DynamoDB-如何设计一个表/索引,可以有效地检索具有特定值/状态的大量项目

外围

我有一个表,记录每个项目的工作状态(仅几个)。假设["initial", "executing", "executed"]此表中有大量具有不同工作状态的项目。

我的问题是我应该如何设计一个表/索引,使其能够快速检索具有指定作业状态的所有作业。

我考虑过要创建一个以工作状态作为哈希键的索引。这似乎可行,但我发现在dynamodb中将其视为不良设计。

是否有更好的设计来解决此类问题?

谢谢。

疯子

恐怕不,没有更好的解决方案来解决这种问题。

正如他们在docs中所说

表主键的分区键部分确定表数据存储在其中的逻辑分区。反过来,这会影响基础物理分区。表的预配置I / O容量在这些物理分区之间平均分配。因此,不能均匀分配I / O请求的分区键设计会创建“热”分区,从而导致节流并低效地使用您提供的I / O容量。

...

如果单个表只有少量的分区键值,请考虑将写操作分布在更多不同的分区键值上。换句话说,构造主键元素可避免一个“热”(大量请求)的分区键值,这会降低整体性能。

这意味着,如果值只有几个不同的值(无论是表的分区键还是索引的分区键),这些值都将放在同一分区内,这将使其变得“热”,您将不会无法将负载分配给它们。这就像一个“微扫描”:您不是在扫描整个表(好消息),而是在扫描单个分区。但是该分区仍然有大量数据,您正在对该分区进行全面扫描(坏消息)。

您可以通过并行扫描(可以扫描整个表或GSI)进行一些改进,但这并不是灵丹妙药。

一般情况:如果您通过一些唯一的值来分发大量数据,则将成为瓶颈。

您能换一个角度看这个问题吗?看来您正在为作业的状态转换做一些逻辑。您可以切换到DynamoDB流/触发器吗?在您的记录更改时启用DynamoDB流时,DynamoDB会将更改发送到流中,以便有兴趣的各方可以使用它。您可以创建一个Lambda函数,该函数将读取该流并在发生更改时立即对每个更改做出反应(嗯,不是立即执行,但延迟很小)。如果您可以将工作流程重构为此事件驱动的模型,则无需任何查询或扫描。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章