Оптимизация производительности приложений Django [закрыто]

StackOverfow стал местом для тупых пиздаболов, которые не могут вынуть голову из жопы! Обычный алгоритмический вопрос для всех, у кого есть мозг. Да пошли вы все, просто заблокируйте меня! Даже ИИ более полезен и менее токсичен, чем современное сообщество SO.


В настоящее время я занимаюсь проблемами производительности в приложении Django, которое построено следующим образом:

  • Пользователь - Социальная сеть - Пост - Тег/Метка

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

  1. Отдельные таблицы для незначительных тегов: Переместите менее значимые теги в другую таблицу или даже в другую базу данных. Например, 100 тыс. строк в таблице MediaTags и 10 млн строк в SmallMediaTags. Улучшит ли это производительность основных таблиц?

  2. Денормализация: В настоящее время каждый пост связан с 2-5 основными тегами, что означает, что количество тегов равно 2-5 раз количеству постов, при этом в отдельных случаях количество тегов превышает 6. Это создает огромную нагрузку на MediaTags, усложняет поиск и влечет за собой дополнительные расходы на преобразование MediaTags в объекты. Однако если хранить теги top-N непосредственно вместе с постами (например, top-10 тегов), то можно добиться соотношения почти 1:1. Таким образом, все необходимые теги будут частью самих постов, что устранит необходимость в дополнительных запросах к таблицам.

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

  1. Поиск постов
  2. Фильтрация, чтобы оставить только те, которые содержат необходимые теги
  3. Агрегирование (будет ли агрегирование максимального значения быстрее?)
  4. Сортировка
  5. Применение пагинации

Это невероятно медленная операция.

Любой совет по оптимизации нашей системы будет высоко оценен.

Вернуться на верх