このガイドでは、大規模なデータセットに焦点を当て、Python を使用して AWS DynamoDB に効率的にデータを挿入する方法を示します。 テーブルの作成 (必要な場合)、ランダム データの生成、および最適なパフォーマンスとコスト削減のためのバッチ書き込みについて説明します。 boto3
ライブラリは必須です。 pip install boto3
.
1. DynamoDB テーブルのセットアップ:
まず、AWS セッションを確立し、DynamoDB テーブルのリージョンを定義します。
<code class="language-python">import boto3 from botocore.exceptions import ClientError dynamodb = boto3.resource('dynamodb', region_name='us-east-1') table_name = 'My_DynamoDB_Table_Name'</code>
create_table_if_not_exists()
関数はテーブルの存在を確認し、存在しない場合は主キー (id
) を使用してテーブルを作成します。
<code class="language-python">def create_table_if_not_exists(): try: table = dynamodb.Table(table_name) table.load() print(f"Table '{table_name}' exists.") return table except ClientError as e: if e.response['Error']['Code'] == 'ResourceNotFoundException': print(f"Creating table '{table_name}'...") table = dynamodb.create_table( TableName=table_name, KeySchema=[{'AttributeName': 'id', 'KeyType': 'HASH'}], AttributeDefinitions=[{'AttributeName': 'id', 'AttributeType': 'S'}], ProvisionedThroughput={'ReadCapacityUnits': 5, 'WriteCapacityUnits': 5} ) table.meta.client.get_waiter('table_exists').wait(TableName=table_name) print(f"Table '{table_name}' created.") return table else: print(f"Error: {e}") raise</code>
2.ランダムデータ生成:
id
、name
、timestamp
、および value
を使用してサンプル レコードを生成します。
<code class="language-python">import random import string from datetime import datetime def generate_random_string(length=10): return ''.join(random.choices(string.ascii_letters + string.digits, k=length)) def generate_record(): return { 'id': generate_random_string(16), 'name': generate_random_string(8), 'timestamp': str(datetime.utcnow()), 'value': random.randint(1, 1000) }</code>
3.データ一括書き込み:
batch_write()
関数は、効率的な一括挿入 (バッチあたり最大 25 アイテム) のために DynamoDB の batch_writer()
を利用します。
<code class="language-python">def batch_write(table, records): with table.batch_writer() as batch: for record in records: batch.put_item(Item=record)</code>
4.主なワークフロー:
メイン関数は、テーブルの作成、データ生成、バッチ書き込みを調整します。
<code class="language-python">def main(): table = create_table_if_not_exists() records_batch = [] for i in range(1, 1001): record = generate_record() records_batch.append(record) if len(records_batch) == 25: batch_write(table, records_batch) records_batch = [] print(f"Wrote {i} records") if records_batch: batch_write(table, records_batch) print(f"Wrote remaining {len(records_batch)} records") if __name__ == '__main__': main()</code>
5.結論:
このスクリプトはバッチ書き込みを活用して、大量のデータに対する DynamoDB の対話を最適化します。 特定のニーズに合わせてパラメータ (バッチ サイズ、レコード数など) を必ず調整してください。 さらにパフォーマンスを向上させるために、高度な DynamoDB 機能を検討することを検討してください。
以上がPython を使用した DynamoDB への効率的なバッチ書き込み: ステップバイステップガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。