Оптимизация приложения 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Счетчик Prometheus для агрегированных данных временных рядов
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Счетчик Prometheus для агрегированных данных временных рядов
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Altair Impute не работает для агрегированных данных с течением времени
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Подход, необходимый для фильтрации агрегированных данных в Laravel/MySQL 8
    Anonymous » » в форуме Php
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Подход, необходимый для фильтрации агрегированных данных в Laravel/MySQL 8
    Anonymous » » в форуме MySql
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous

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