Telegram bot на aiogram. Работать с памятью или с базой данных?

У меня есть Telegram bot, которого я написал и он работает следующим образом.

  1. Есть БД с таблицами, основная таблица "users" с пользователями.
  2. В Python коде есть глобальные переменные, в которые при запуске бота загружается просто вся инфа из БД.
  3. Во время работы бота, каждые 30 минут проводится выгрузка в таблицы БД из переменных. Тот же процесс происходит при выключении бота.

Недавно я задался вопросом: А нормальный ли этот подход вообще? База данных обладает широким функционалом для работы и доступа к данным: индексы, joinы и т.п, но я получается использую БД просто как место, где лежит инфа. К тому же это потребление памяти, все данные о пользователях всегда лежат в памяти. С другой стороны, таблица users весит около 1 МБ, там 5к пользователей и в памяти это так же занимает копейки, работа с памятью конечно в разы быстрее, чем постоянные запросы в БД.

Хотелось бы улышать вашу точку зрения, спасибо.


Ответы (1 шт):

Автор решения: CrazyElf

Каждое решение - это почти всегда компромисс.

  • Используйте память, если хотите, чтобы всё работало максимально быстро, у вас хватает места в памяти под все данные и вам не важно, если вы потеряете результаты работы при внезапном падении бота/сервера.
  • Используйте БД, если вам важно сохранить абсолютно всю информацию и/или если вам не хватает места в памяти, чтобы держать всю информацию и если вам не важно, что реакция бота будет не всегда быстрой
  • Используйте память + БД + кэширование, если хотите получить сбалансированный вариант. Работайте с памятью, но часто сбрасывайте в БД изменившиеся/новые данные
→ Ссылка