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