1

mysql データベースから DynamoDB にデータ (21M 行) を転送したいと考えています。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 行を転送していることです。プロセスをスピードアップするためのアイデアはありますか?

より多くのスレッドを作成し、転送を並列化して、それが役立つかどうかを確認します。

ありがとう。

4

2 に答える 2

2

まず、DynamoDB テーブルのプロビジョニングされたスループットは? これにより、最終的には、1 秒あたりの書き込み回数が制御されます。それに応じて調整します。

次に、ある種の並行性を実現します。スレッドを使用することも (httplib.py はスレッドセーフではないため、各スレッドに独自の接続オブジェクトがあることを確認してください)、gevent や multiprocess など、好きなメカニズムを使用することもできますが、同時実行が重要です。

于 2012-04-05T14:35:45.073 に答える