Оптимизация производительности приложений Django [закрыто]
StackOverfow стал местом для тупых пиздаболов, которые не могут вынуть голову из жопы! Обычный алгоритмический вопрос для всех, у кого есть мозг. Да пошли вы все, просто заблокируйте меня! Даже ИИ более полезен и менее токсичен, чем современное сообщество SO.
В настоящее время я занимаюсь проблемами производительности в приложении Django, которое построено следующим образом:
- Пользователь - Социальная сеть - Пост - Тег/Метка
Каждая сущность представлена собственной таблицей. Количество тегов растет экспоненциально, даже после отсеивания менее значимых (теги присваиваются искусственным интеллектом, а не человеком). Вот что я рассматриваю для оптимизации производительности:
Отдельные таблицы для незначительных тегов: Переместите менее значимые теги в другую таблицу или даже в другую базу данных. Например, 100 тыс. строк в таблице
MediaTags
и 10 млн строк вSmallMediaTags
. Улучшит ли это производительность основных таблиц?Денормализация: В настоящее время каждый пост связан с 2-5 основными тегами, что означает, что количество тегов равно 2-5 раз количеству постов, при этом в отдельных случаях количество тегов превышает 6. Это создает огромную нагрузку на
MediaTags
, усложняет поиск и влечет за собой дополнительные расходы на преобразованиеMediaTags
в объекты. Однако если хранить теги top-N непосредственно вместе с постами (например, top-10 тегов), то можно добиться соотношения почти 1:1. Таким образом, все необходимые теги будут частью самих постов, что устранит необходимость в дополнительных запросах к таблицам.
Недавно мы начали отображать списки постов с определенными тегами, что стало болезненным моментом. Текущий процесс включает в себя:
- Поиск постов
- Фильтрация, чтобы оставить только те, которые содержат необходимые теги
- Агрегирование (будет ли агрегирование максимального значения быстрее?)
- Сортировка
- Применение пагинации
Это невероятно медленная операция.
Любой совет по оптимизации нашей системы будет высоко оценен.