Ich habe eine Django App, die Django-Kolben verwendet, um XML-Feeds an interne Clients zu senden. Im Allgemeinen funktionieren diese ziemlich gut, aber wir haben einige XML-Feeds, die derzeit über 15 Minuten lang laufen. Dies verursacht Timeouts und die Feeds werden unzuverlässig.Django ORM: Organisieren große Mengen von Daten, der richtige Weg
Ich versuche zu überlegen, wie ich dieses Setup verbessern kann. Wenn es eine Umstrukturierung der Daten erfordert, könnte das auch möglich sein.
Hier ist, wie die Datensammlung zur Zeit aussieht:
class Data(models.Model)
# fields
class MetadataItem(models.Model)
data = models.ForeignKey(Data)
# handlers.py
data = Data.objects.filter(**kwargs)
for d in data:
for metaitem in d.metadataitem_set.all():
# There is usually anywhere between 55 - 95 entries in this loop
label = metaitem.get_label() # does some formatting here
data_metadata[label] = metaitem.body
Offensichtlich ist der Kern des Programms viel mehr tut, aber ich bin nur darauf hin, wo das Problem liegt. Wenn wir eine data
Liste von 300 haben, wird es einfach unzuverlässig und überschreitet die Zeit.
Was ich versucht habe:
- Immer eine Sammlung aller Daten-IDs, dann eine einzige große Abfrage tun, um die s
MetadataItem
‘alles zu bekommen. Schließlich filtere ich diese in meiner Schleife. Dies war, um einige Abfragen zu erhalten, die es reduziert hat. - Verwenden Sie
.values()
, um den Modellinstanz-Overhead zu reduzieren, der die Geschwindigkeit jedoch nicht wesentlich erhöht hat.
Eine Idee ich eine einfachere Lösung für dieses Problem zu denken ist an einen Cache in Schritten zu schreiben. Also um die Zeit zu verkürzen; Ich würde die ersten 50 Datensätze schreiben, im Cache speichern, einen Zähler einstellen, die nächsten 50 schreiben, usw. Muss noch darüber nachdenken.
Ich hoffe, jemand kann helfen, mich in die richtige Richtung zu führen.
haben Sie die Möglichkeit, Ihre Daten neu zu strukturieren, sodass Sie keine Unterabfragen ausführen müssen? – Evgeny