0

我有一个执行以下操作的 python 脚本。它逐行读取文本文件。每行的信息都必须记录在 DynamoDDB 表中。我处理每条摄取的行,然后像这样执行一次写入:

with open(fPath, 'r') as f:
   for line in f:
      # process line, extract data to be written into DDB into item_data
      # also extract key
      item = table.new_item(hash_key=key_from_line,attrs=item_data)
      item.put()

我注意到有效吞吐量,即我每秒(平均)进行的写入次数远低于我在 AWS DDB 控制台上为表设置的最大吞吐量。现在,生产线处理步骤可能存在严重的低效率。但我想知道我是否也可以通过不同的方式写入表格来加快速度。例如,收集一组项目然后一次将它们全部写入是否有意义?如果是这样,有没有办法确定数组的最佳大小?还有其他简单的(也许不是那么简单的方法)可以加快写作速度吗?

4

1 回答 1

0

您没有获得最大吞吐量的原因是您正在创建“热区”。那就是您对表的同一分区有太多调用。

最快的解决方法是反转您的密钥或对它们进行哈希处理,因为它们可能具有相同的前缀。

预置吞吐量取决于主键选择以及各个项目的工作负载模式。在存储数据时,Amazon DynamoDB 将表中的项目划分为多个分区,并主要基于散列键元素分发数据。与表关联的预置吞吐量也在分区之间平均分配,不跨分区共享预置吞吐量。

总预配吞吐量/分区 = 每个分区的吞吐量。

因此,要实现您为表预置的全部请求吞吐量,请保持您的工作负载均匀分布在哈希键值上。跨哈希键值分配请求将请求跨分区分配。

您可以在此处查看更多信息:http: //docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.DataUpload

于 2013-01-29T15:04:12.317 回答