Performance 如何在Dynamo db中使用DynamoDBAutoGeneratedKey作为哈希键来优化我的表的性能,因为每次插入PutRequest都会变慢
我使用dynamo db表来保存API请求的事务数据。 我在维护两张桌子 1.计划-使用SId作为哈希键 2.摘要-使用DynamoDBAutoGeneratedKey(UUID)作为hashkey,SId作为其属性 schedule表为每个请求填充一行,而summary表为每个SId和唯一UUID填充10项 我们正在这两个表上运行负载测试,可以观察到schedule表的性能良好,但是summary表在每次调用10个项目的请求中消耗了大量时间 有人能为我的总结dynamodb表提供性能调优建议吗? 将UUID保留为hashkey是否会降低PutItemRequest的速度 非常感谢您提供的任何帮助Performance 如何在Dynamo db中使用DynamoDBAutoGeneratedKey作为哈希键来优化我的表的性能,因为每次插入PutRequest都会变慢,performance,amazon-dynamodb,amazon-dynamodb-streams,Performance,Amazon Dynamodb,Amazon Dynamodb Streams,我使用dynamo db表来保存API请求的事务数据。 我在维护两张桌子 1.计划-使用SId作为哈希键 2.摘要-使用DynamoDBAutoGeneratedKey(UUID)作为hashkey,SId作为其属性 schedule表为每个请求填充一行,而summary表为每个SId和唯一UUID填充10项 我们正在这两个表上运行负载测试,可以观察到schedule表的性能良好,但是summary表在每次调用10个项目的请求中消耗了大量时间 有人能为我的总结dynamodb表提供性能调优建议吗
此外,我们还激活了这些表上的流,lambda使用这些流进行交叉复制。需要考虑的事项有: 1) 对于给定的负载测试,您的数据库吞吐量是否足够高?请注意,如果您有多个分区,那么吞吐量将在它们之间分配,尽管如果您在每次写入时使用随机UUID,那么在写入时不应该有热分区问题 2) 是数据库速度变慢了,还是应用程序速度变慢了?可能是您正在按顺序而不是并行地执行写入,或者可能是使用同步调用而不是异步调用
3) 您在控制台中查看过dynamoDB指标吗?您应该能够在那里看到诸如平均放置延迟和限制请求等指标。这可能会为您带来一些启示您不会想到以下几件事:
- 你有没有可能使用扫描?这可以解释性能下降的原因,因为扫描并没有利用任何关于数据在DynamoDB中如何组织的知识,而只是一个蛮力搜索。您应该避免使用扫描,因为扫描本身速度慢且成本高
- 你有“热分区”吗?你写道:
- 您正在使用事务吗?你写道:
长话短说,DynamoDB存储执行事务时更新/删除/添加的所有项目的副本。此外,DynamoDB事务非常昂贵,每个事务需要7N+4次写入,其中N是事务中涉及的项目数。使用UUID作为分区键不会降低put请求的速度。实际上,将UUID作为分区键是一种最佳实践。但是,是否在同一请求中为UUID插入10项?它可能会减慢写入速度,因为它将进入同一分区。您是否尝试过增加写入容量单位?您所说的“事务数据”是什么意思?之前我使用的是10个WCU,在其上执行了负载测试。将负载测试的WCU更改为50,并提供以下详细信息,从而缩短了响应时间。使用3个用户加载1小时。这一次,我分析了该表的矩阵,有Put延迟和Scan延迟,但没有观察到限制写入请求摘要表上没有扫描。没有热分区,只有UUID作为hashkey。