boto dynamodb:有没有办法优化批量写入?

I Z*_*I Z 4 batch-processing boto amazon-dynamodb

我正在将大量数据索引到 DynamoDB 中,并尝试批量写入以增加实际吞吐量(即加快索引速度)。这是一段代码(是原始来源):

def do_batch_write(items,conn,table):
    batch_list = conn.new_batch_write_list()
    batch_list.add_batch(table, puts=items)
    while True:
            response = conn.batch_write_item(batch_list)
            unprocessed = response.get('UnprocessedItems', None)
            if not unprocessed:
                    break
            # identify unprocessed items and retry batch writing
Run Code Online (Sandbox Code Playgroud)

我正在使用 boto 版本 2.8.0。如果items元素超过 25 个,则会出现异常。有没有办法增加这个限制?此外,我注意到有时,即使items较短,也无法一次尝试处理所有这些。但是这种情况发生的频率或尝试后有多少元素未处理,与 的原始长度之间似乎没有相关性items有没有办法避免这种情况并一次性写出所有内容?现在,最终目标是加快处理速度,而不仅仅是避免重复,因此在连续尝试之间长时间休眠不是一种选择。

谢谢

gar*_*aat 5

文档

“BatchWriteItem 操作在一个或多个表中放置或删除多个项目。对 BatchWriteItem 的一次调用最多可以写入 16 MB 的数据,其中可以包含多达 25 个放置或删除请求。要写入的单个项目可以大为 400 KB。”

某些未成功的原因可能是由于超出了表的预配置吞吐量。您是否同时对表执行了其他写入操作?您是否尝试过增加表上的写入吞吐量以查看是否处理了更多项目。

我不知道有什么方法可以增加每个请求 25 个项目的限制,但您可以尝试在 AWS 论坛上或通过您的支持渠道提问。

我认为获得最大吞吐量的最佳方法是尽可能地增加写入容量单位,并跨多个线程或进程并行化批量写入操作。