python / intermediate
Snippet
Effiziente Datenstapelverarbeitung mit Bulk Create und Upsert-Behandlung
Das einzelne Einfügen oder Aktualisieren großer Sammlungen von Datenbankdatensätzen beeinträchtigt die Leistung durch zu viele Netzwerk-Roundtrips. Die Verwendung von bulk_create mit Konfliktaktualisierungsparametern führt Batch-Upserts in einzelnen SQL-Abfragen aus.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from myapp.models import MetricEntrydef batch_upsert_metrics(metric_data_list):instances = [MetricEntry(device_id=item['id'], value=item['val'], timestamp=item['ts'])for item in metric_data_list]MetricEntry.objects.bulk_create(instances,batch_size=500,update_conflicts=True,update_fields=['value', 'timestamp'],unique_fields=['device_id'])
django
Erklärung
1
instances = [MetricEntry(device_id=item['id'], value=item['val'], timestamp=item['ts']) for item in metric_data_list]
Erstellt nicht gespeicherte Modell-Instanzen im Arbeitsspeicher aus Rohen Dictionary-Sammlungen.
2
batch_size=500,
Teilt die Datenbankoperation in Blöcke von 500 Datensätzen pro Abfrage auf, um Abfragelängenbegrenzungen einzuhalten.
3
update_conflicts=True, update_fields=['value', 'timestamp'], unique_fields=['device_id']
Konfiguriert die Upsert-Logik auf Datenbankebene, um bestimmte Felder zu aktualisieren, wenn ein Unique-Constraint kollidiert.