Python 3.x 使用boto3将大量数据加载到Dynamodb非常慢
我正试图使用以下来自EMR5节点集群的代码将超过2000万条记录加载到我的Dynamodb表中。但是完全加载需要越来越多的时间。我有更大的数据要加载,但我想在几分钟内加载它。如何做到这一点 下面是我的代码。我刚更改了原来的列名,我有20列要插入。这里的问题是加载速度慢Python 3.x 使用boto3将大量数据加载到Dynamodb非常慢,python-3.x,amazon-web-services,amazon-dynamodb,boto3,Python 3.x,Amazon Web Services,Amazon Dynamodb,Boto3,我正试图使用以下来自EMR5节点集群的代码将超过2000万条记录加载到我的Dynamodb表中。但是完全加载需要越来越多的时间。我有更大的数据要加载,但我想在几分钟内加载它。如何做到这一点 下面是我的代码。我刚更改了原来的列名,我有20列要插入。这里的问题是加载速度慢 import boto3 import json import decimal dynamodb = boto3.resource('dynamodb','us-west') table = dynamodb.Table('EM
import boto3
import json
import decimal
dynamodb = boto3.resource('dynamodb','us-west')
table = dynamodb.Table('EMP')
s3 = boto3.client('s3')
obj = s3.get_object(Bucket='mybucket', Key='emp-rec.json')
records = json.loads(obj['Body'].read().decode('utf-8'), parse_float = decimal.Decimal)
with table.batch_writer() as batch:
for rec in rows:
batch.put_item(Item=rec)
首先,您应该使用Amazon CloudWatch检查您是否达到表中配置写入容量单位的限制。如果是这样,您可以增加容量,至少在负载期间是这样 其次,代码正在创建一条记录的批处理,这不是很有效。
batch\u writer()
可用于处理多条记录,例如在以下示例代码中:
注意
for
循环是如何在批处理编写器()中进行的?这样,多个记录存储在一个批中。但是,您的代码示例的for
位于batch\u writer()
之外,这导致批大小为1。是的!非常感谢您的回复。我将尝试建议的更改。同时,我发现BatchWriteItemInput的加载速度也非常快。所以,我想知道在加载大量数据时,这里哪个更好。我不知道。试一下,让我们知道你发现了什么!示例代码仅使用range来演示一批中可以有许多项。您的代码只需将用于with
的中记录中的rec
。无需使用范围。您的for
循环更合适。批导入和每次导入的速度相同(
with table.batch_writer() as batch:
for _ in xrange(1000000):
batch.put_item(Item={'HashKey': '...',
'Otherstuff': '...'})