如何在Python Boto中加速put_item()操作



我正试图加快将存储在AWS S3存储桶中的JSON文件中包含的记录传输到AWS DynamoDB表的速度。JSON文件中的记录存储为形式为[{'id':'123', 'name':'abc'}, {'id':'456','name':'def'}, ...]的字典列表。为了执行记录传输,我在Boto3中使用table.batch_writer()。该代码包含在AWS Lambda脚本中,这样,当S3存储桶中填充了一个新的JSON对象时,记录传输就开始了。我发现,即使为AWS Lambda设置了最大超时(15分钟(,put_item((操作也无法完成所有记录,平均约为40K。put_item((操作看起来非常慢,这让我认为这不是将记录从S3传输到DynamoDB的最佳方式。

有没有一种更快的方法可以将JSON记录从S3存储桶传输到DynamoDB表?

import json
import boto3
s3_client = boto3.client('s3')
dynamodb = boto3.resource('dynamodb',region_name='us-east-2')
def lambda_handler(event, context, verbose=True):
bucket = event['Records'][0]['s3']['bucket']['name']
json_filename = event['Records'][0]['s3']['object']['key']
json_object = s3_client.get_object(Bucket=bucket, Key=json_filename)
json_file = json_object['Body'].read()
data_dict = json.loads(json_file)
table = dynamodb.Table('the_dynamodb_table_name')
with table.batch_writer() as batch:
for rec in data_dict:
batch.put_item(Item=rec)

我建议探索batch_put_item()方法,该方法每批最多可以写入16mb的数据

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Client.batch_write_item

最新更新