mysql 데이터베이스에서 DynamoDB로 데이터 (21M 행)를 전송하고 싶습니다. 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으로 올렸지 만 도움이되지 않았습니다. 동시성을 사용하고 전송을 다시 실행합니다. –
동시성을 사용해 보았지만 많은 도움이되지는 않습니다. django1.3을 실행중인 m1.large EC2 인스턴스를 사용하고 있습니다. mysql에서 S3으로 데이터를 내보내고 EMR을 사용하여 S3에서 DynamoDB로 데이터를 내보낼 생각입니다. 생각? –
좋아요, 400 개의 쓰기/초에 대해 프로비저닝 된 테이블이 있고 2100 만 개의 행이 있다면 이론적으로 약 14.5 시간 내에 완료 할 수 있습니다. 그러나 각 레코드는 최대 1K 바이트라고 가정합니다. 그것이 400의 의미입니다. 크기가 1K 이하인 400 개의 쓰기 당신의 물건은 얼마나 큽니까? – garnaat