我正在尝试加快将存储在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分钟),对于所有记录(平均大约40K)也没有完成put_item()操作。 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)
答案 0 :(得分:2)
我建议您探索assign(test, { x: "new", y: undefined })
方法,该方法每批次最多可以写入16mb数据