Django MPTT Postgres-Aktualisierungsabfrage wird langsam ausgeführt

8

Ich benutze mptt in einem Modell, um ein Tagging-System zu verwalten (jedes Tag hat einen optionalen TreeForeignKey zu einem 'Eltern' -Tag)

Immer wenn ich ein Tag-Modell speichern muss, wird die folgende Abfrage außergewöhnlich langsam (mehr als 45 Sekunden) ausgeführt

%Vor%

Ich sende den Inhalt von Artikeln über ein automatisiertes Tagging-System, das mehr als 20 Tags generieren kann. Offensichtlich wird das nicht fliegen:)

Ich habe db_index = False hinzugefügt, in der Hoffnung, die Schreibzeiten zu ändern (Lesevorgänge scheinen kein Problem zu sein), aber das Problem besteht weiterhin.

Hier ist das Modell in Frage:

%Vor%

Und der Abfrageplan (wie von New Relic gemeldet):

%Vor%

Abschließend die Rückverfolgung von einer solchen Abfrage:

%Vor%

Irgendeine Idee, wie ich diese Modell spart, um schneller zu sein?

BEARBEITEN für weitere Informationen: Dies ist in Postgres mit der psycopg2-Engine 'ENGINE': 'django.db.backends.postgresql_psycopg2',

ZWEITE BEARBEITUNG: Wie gewünscht, habe ich die Abfrage mit EXPLAIN ANALYZE ausgeführt. Das Ergebnis ist wie folgt:

%Vor%     
Robert Townley 28.12.2015, 16:14
quelle

1 Antwort

6

django mptt verwendet das geschachtelte Mengenmodell

Wenn also Ihre Speichermethode den Einfügevorgang verursacht, muss django-mptt viele Daten neu berechnen. Es funktioniert einfach nicht an großen Tischen.

Sie müssen die Verwendung von django-mptt ablehnen und Ihr eigenes Datenbankschema erfinden.

    
Yevgeniy Shchemelev 08.01.2016, 18:32
quelle