我想从mysql数据库传输数据(21M行)到DynamoDB。我使用boto Python API和django 1.3.1从mysql中导出数据并将其传输到DynamoDB。下面是代码:从mysql到DynamoDB的数据传输
conn = boto.connect_dynamodb()
start_date = datetime.date(2012, 3, 1)
end_date = datetime.date(2012, 3, 31)
episode_report = TableName.objects.filter(viewdt__range=(start_date, end_date))
#Paginate 21 million rows in chunks of 1000 each
p = Paginator(episode_report, 1000)
table = conn.get_table('ep_march')
for page in range(1, p.num_pages + 1):
for items in p.page(page).object_list:
item_data = {
'id': int(items.id),
'user_id': format_user(items.user), #Foreign Key to User table
'episode_id': int(items.episode.id), #Foreign Key to Episode table
'series_id': int(items.series.id), #Foreign Key to Series Table
'viewdt': str(items.viewdt),
}
item = table.new_item(
# Our hash key is 'id'
hash_key= int(items.id),
# Our range key is 'viewdt'
range_key= str(items.viewdt),
# This has the
attrs=item_data
)
item.put()
的问题是,这一进程已经运行了12个小时以上,并仍在转移3M行。任何想法加快这一进程?
我会创建更多的线程和parellize转移,看看是否有帮助。
谢谢。
谢谢,我把预置写吞吐量提高到400,但它没有帮助。我会使用并发性并再次运行传输。 – 2012-04-05 14:41:01
我尝试使用并发性,但它没有太大的帮助。我正在使用运行django1.3的m1.large EC2实例。我正在考虑将数据从mysql导出到S3,然后使用EMR将数据从S3导出到DynamoDB。思考? – 2012-04-06 00:00:43
好的,如果您的表的配置为每秒400次写入,并且您有2100万行,理论上可以在大约14.5小时内完成。但是,假定每个记录最多为1K字节。这就是400的意思;大小为1K或更小的400个写入。你的物品有多大? – garnaat 2012-04-06 01:03:47