Лучший способ денормализовать данные в Django? [закрытый]

Вот хорошее объяснение: http://carcino.gen.nz/tech/cpp/struct_vs_class.php

Так, еще раз: в C++ структура идентична классу за исключением того, что у членов структуры есть общедоступная видимость по умолчанию, но у членов класса есть частная видимость по умолчанию.

15
задан slacy 8 July 2009 в 22:41
поделиться

4 ответа

У вас есть менеджеры в Django.

Используйте настраиваемый менеджер, чтобы создавать и поддерживать отношения FK .

Менеджер может обновлять счетчики по мере обновления наборов дочерних элементов.

Если вы не хотите создавать настраиваемых менеджеров, просто расширьте метод save . Все, что вы хотите сделать для денормализации счетчиков и сумм, можно сделать в save .

Вам не нужны сигналы. Просто продлите save .

18
ответ дан 1 December 2019 в 01:38
поделиться

Первый подход (сигналы) имеет то преимущество, что ослабляет связь между моделями.
Однако поддерживать сигналы как-то сложнее, потому что зависимости менее явны (по крайней мере, на мой взгляд).
Если правильность подсчета комментариев не так важна, вы также можете подумать о задании cron, которое будет обновлять его каждые n минут.

Однако, независимо от решения, денормализация сделает более сложное обслуживание ; по этой причине я бы попытался избегать его в максимально возможной степени, решив вместо этого использовать кеши или другие методы - например, использование с comments.count в качестве cnt в шаблонах может улучшить производительность довольно много.
Затем, если все остальное не удается, и только в этом случае, подумайте о том, что может быть лучшим подходом для решения конкретной проблемы.

5
ответ дан 1 December 2019 в 01:38
поделиться

Почему бы просто не получить набор комментариев и не найти количество элементов, используя метод count () :

count = blog_entry.comment_set.count()

Затем вы можете передать это в свой шаблон .

Или, как вариант, в самом шаблоне вы можете сделать:

{{ blog_entry.comment_set.count }}

, чтобы получить количество комментариев.

-2
ответ дан 1 December 2019 в 01:38
поделиться

Я нашел Django-Denorm , чтобы быть полезным. Он использует триггеры уровня базы данных вместо сигналов, но, насколько я знаю, есть филиал на основе другого подхода.

11
ответ дан 1 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: