Panduan ini menunjukkan pemasukan data yang cekap ke dalam AWS DynamoDB menggunakan Python, memfokuskan pada set data yang besar. Kami akan meliputi: penciptaan jadual (jika perlu), penjanaan data rawak dan penulisan kelompok untuk prestasi optimum dan penjimatan kos. Perpustakaan boto3
diperlukan; pasangnya menggunakan pip install boto3
.
1. Persediaan Jadual DynamoDB:
Pertama, kami mewujudkan sesi AWS dan mentakrifkan rantau jadual 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>
Fungsi create_table_if_not_exists()
menyemak kewujudan jadual dan menciptanya dengan kunci utama (id
) jika tiada:
<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. Penjanaan Data Rawak:
Kami akan menjana rekod sampel dengan id
, name
, timestamp
dan 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. Penulisan Data Kelompok:
Fungsi batch_write()
menggunakan batch_writer()
DynamoDB untuk sisipan pukal yang cekap (sehingga 25 item setiap kelompok):
<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. Aliran Kerja Utama:
Fungsi utama mengatur penciptaan jadual, penjanaan data dan penulisan kelompok:
<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. Kesimpulan:
Skrip ini memanfaatkan penulisan kelompok untuk mengoptimumkan interaksi DynamoDB untuk volum data yang besar. Ingat untuk melaraskan parameter (saiz kelompok, kiraan rekod, dll.) agar sepadan dengan keperluan khusus anda. Pertimbangkan untuk meneroka ciri DynamoDB lanjutan untuk peningkatan prestasi selanjutnya.
Atas ialah kandungan terperinci Penulisan Kelompok yang Cekap ke DynamoDB dengan Python: Panduan Langkah demi Langkah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!