Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 如何在Dynamo db中使用DynamoDBAutoGeneratedKey作为哈希键来优化我的表的性能,因为每次插入PutRequest都会变慢_Performance_Amazon Dynamodb_Amazon Dynamodb Streams - Fatal编程技术网

Performance 如何在Dynamo db中使用DynamoDBAutoGeneratedKey作为哈希键来优化我的表的性能,因为每次插入PutRequest都会变慢

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表提供性能调优建议吗

我使用dynamo db表来保存API请求的事务数据。 我在维护两张桌子 1.计划-使用SId作为哈希键 2.摘要-使用DynamoDBAutoGeneratedKey(UUID)作为hashkey,SId作为其属性

schedule表为每个请求填充一行,而summary表为每个SId和唯一UUID填充10项

我们正在这两个表上运行负载测试,可以观察到schedule表的性能良好,但是summary表在每次调用10个项目的请求中消耗了大量时间

有人能为我的总结dynamodb表提供性能调优建议吗? 将UUID保留为hashkey是否会降低PutItemRequest的速度

非常感谢您提供的任何帮助


此外,我们还激活了这些表上的流,lambda使用这些流进行交叉复制。

需要考虑的事项有:

1) 对于给定的负载测试,您的数据库吞吐量是否足够高?请注意,如果您有多个分区,那么吞吐量将在它们之间分配,尽管如果您在每次写入时使用随机UUID,那么在写入时不应该有热分区问题

2) 是数据库速度变慢了,还是应用程序速度变慢了?可能是您正在按顺序而不是并行地执行写入,或者可能是使用同步调用而不是异步调用


3) 您在控制台中查看过dynamoDB指标吗?您应该能够在那里看到诸如平均放置延迟和限制请求等指标。这可能会为您带来一些启示

您不会想到以下几件事:

  • 你有没有可能使用扫描?这可以解释性能下降的原因,因为扫描并没有利用任何关于数据在DynamoDB中如何组织的知识,而只是一个蛮力搜索。您应该避免使用扫描,因为扫描本身速度慢且成本高

  • 你有“热分区”吗?你写道:

  • 计划-SId作为哈希键2。摘要-使用DynamoDBAutoGeneratedKey(UUID)作为hashkey,SId作为 它
  • 对这些值的访问是否均匀分布?您是否有比其他人更经常访问的项目?如果是这样,那么这可能是一个问题,如果您的大多数读/写操作都涉及到ID的一小部分,那么这就意味着您正在用请求淹没单个分区(物理机器)。我也建议对此进行调查

    一种解决方案是使用缓存并将频繁访问的项存储在那里。您可以使用ElasticCache或-Dynamo中的新缓存解决方案

    您可以了解更多关于热分区和

    • 您正在使用事务吗?你写道:
    我使用dynamo db表来保存事务数据

    如果这意味着您正在使用DynamoDB事务,那么您需要阅读


    长话短说,DynamoDB存储执行事务时更新/删除/添加的所有项目的副本。此外,DynamoDB事务非常昂贵,每个事务需要7N+4次写入,其中N是事务中涉及的项目数。

    使用UUID作为分区键不会降低put请求的速度。实际上,将UUID作为分区键是一种最佳实践。但是,是否在同一请求中为UUID插入10项?它可能会减慢写入速度,因为它将进入同一分区。您是否尝试过增加写入容量单位?您所说的“事务数据”是什么意思?之前我使用的是10个WCU,在其上执行了负载测试。将负载测试的WCU更改为50,并提供以下详细信息,从而缩短了响应时间。使用3个用户加载1小时。这一次,我分析了该表的矩阵,有Put延迟和Scan延迟,但没有观察到限制写入请求摘要表上没有扫描。没有热分区,只有UUID作为hashkey。