从mysql到DynamoDB的数据传输

时间:2012-04-05 14:30:14

标签: django boto amazon-dynamodb

我想将数据(21M行)从mysql数据库传输到DynamoDB。我使用boto Python API和django 1.3.1从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行。有什么想法可以加快这个过程吗?

我会创建更多线程并对传输进行分析,看看是否有帮助。

感谢。

2 个答案:

答案 0 :(得分:2)

首先,DynamoDB表的预配置吞吐量是多少?这将最终控制你可以进行多少次写入/秒。相应调整。

其次,获得某种并发性。您可以使用线程(确保每个线程都有自己的连接对象,因为httplib.py不是线程安全的),或者您可以使用gevent或multiprocess或您喜欢的任何机制,但并发性是关键。

答案 1 :(得分:2)

亚马逊针对批量数据传入和传出DynamoDB的解决方案是使用Elastic MapReduce。以下是文档:http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.html