Оптимизация приложения Django для эффективного отображения агрегированных данных из нескольких связанных объектов.Python

Программы на Python
Anonymous
Оптимизация приложения Django для эффективного отображения агрегированных данных из нескольких связанных объектов.

Сообщение Anonymous »

Я разрабатываю приложение Django, в котором пользователи могут создавать иерархические структуры данных с несколькими уровнями (в моем случае только 4 уровня) и управлять ими. Приложению необходимо эффективно отображать агрегированные данные (например, средние значения, суммы и другие более сложные показатели) для каждого уровня на основе агрегированных данных уровня ниже него.
Вот упрощенная версия. моих моделей данных:

Код: Выделить всё

from django.db import models

class Level1(models.Model):
name = models.CharField(max_length=100)

class Level2(models.Model):
level1 = models.ForeignKey(Level1, on_delete=models.CASCADE)
name = models.CharField(max_length=100)

class Level3(models.Model):
level2 = models.ForeignKey(Level2, on_delete=models.CASCADE)
name = models.CharField(max_length=100)

class DataPoint(models.Model):
level3 = models.ForeignKey(Level3, on_delete=models.CASCADE)
value = models.FloatField()
Например, агрегированные данные для объектов Level3 будут основаны на DataPoints, агрегированные данные для объектов Level2 будут основаны на агрегированных данных для связанные с ним объекты Level3, а агрегированные данные для моделей Level1 будут основаны на агрегированных данных связанных с ним объектов Level2.
Это означает, что На самом деле мне приходится пересчитывать агрегированные данные уровня только в том случае, если данные с уровня ниже него меняются.
В настоящее время я вычисляю агрегированные данные каждый раз, когда их запрашивают, но это, вероятно, это плохо сказывается на производительности (например, я показываю агрегированные данные нескольких объектов Level1 одновременно, а это значит, что мне приходится выполнять много дорогостоящих вычислений).
Одно из решений, которое Я думаю о том, чтобы использовать сигналы для повторного вычисления агрегированных данных только при необходимости и хранить вычисленные данные где-нибудь в базе данных. Однако недостатком этого является то, что операции записи будут выполняться намного медленнее, поскольку мне придется ждать завершения всех вычислений.

Подробнее здесь: https://stackoverflow.com/questions/786 ... ated-objec

Вернуться в «Python»