AWS DynamoDB + python:未达到吞吐量,我该如何加速?

时间:2013-01-29 14:47:52

标签: python amazon-web-services amazon-dynamodb

我有一个执行以下操作的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控制台上为表设置的最大吞吐量。现在,线处理步骤可能存在严重的低效率。但我想知道我是否也可以通过不同的方式写入表格来加快速度。例如,收集一系列项目然后一次写下它们是否有意义?如果是这样,有没有办法确定阵列的最佳大小?任何其他简单(也许不是那么简单的方法)使写作更快?

1 个答案:

答案 0 :(得分:0)

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

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

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

  

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

因此,要实现为表配置的全部请求吞吐量,请将工作负载均匀分布在散列键值之间。跨越散列键值分发请求会跨分区分发请求。

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