我有一个执行以下操作的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控制台上为表设置的最大吞吐量。现在,线处理步骤可能存在严重的低效率。但我想知道我是否也可以通过不同的方式写入表格来加快速度。例如,收集一系列项目然后一次写下它们是否有意义?如果是这样,有没有办法确定阵列的最佳大小?任何其他简单(也许不是那么简单的方法)使写作更快?
答案 0 :(得分:0)
您没有获得最大吞吐量的原因是您正在创建“热区”。也就是说,你对表的同一分区有太多的调用。
最快的解决方法是反转你的密钥或哈希它们,因为它们可能具有相同的前缀。
预配置吞吐量取决于主键选择以及各个项目的工作负载模式。存储数据时,Amazon DynamoDB会将表的项划分为多个分区,并主要根据散列键元素分发数据。与表关联的预配置吞吐量也在分区之间平均分配,而不跨分区共享预配置吞吐量。
总预配置吞吐量/分区=每个分区的吞吐量。
因此,要实现为表配置的全部请求吞吐量,请将工作负载均匀分布在散列键值之间。跨越散列键值分发请求会跨分区分发请求。