Задать вопрос
@UnrealPelmen

Стоит ли использовать в backend базу данных SQLite?

Мы с командой создаём сервис, помогающий ученикам в учёбе. Ссылка на GitHub: click. Все запросы к базе данных идут через API на FastAPI. Может ли при непредвиденной нагрузке на API упасть база данных?
spoiler
Да, я понимаю то, что при слишком большом количестве запросов сломается уже API, об этом говорится в этом комментарии. Да, я знаю о механизмах принудительной блокировки запросов к сервису, но я не знаю, есть ли они в самом SQLite.
Также одним из аргументов необходимости перехода является отсутствие встроенного шифрования базы данных в SQLite
spoiler
Да, я читал эту статью, но не хочу настраивать механизмы, усложняющие доступ к базе данных
Также, если потребуется переход, какую реляционную базу данных выбрать? Я склоняюсь к выбору PostgreSQL, из-за наличия встроенного шифрования базы данных и разграничения прав между пользователями базой данных.
P.S.: это наш первый сколько-нибудь сложный проект, который мы пытаемся создать, оглядываясь на best practice. Не судите строго. Если есть замечание или предложение, поделитесь здесь или в этой дискуссии
  • Вопрос задан
  • 216 просмотров
Подписаться 1 Простой 3 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Продвинутый SQL
    5 недель
    Далее
  • Академия Эдюсон
    SQL-разработчик: тариф Базовый
    2 месяца
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Файловая БД не масштабируется горизонтально, соответственно вы не сможете с помощью запуска дополнительных узлов ни производительность поднять, ни отказоустойчивость. SQLite - это хорошее решение для десктопных и мобильных приложений, а также для отладочных и тестовых запусков серверных приложений. Выводить с ней бэкенд в прод не стоит.
Ответ написан
Lord_of_Rings
@Lord_of_Rings
Northern Strider
Может ли при непредвиденной нагрузке на API упасть база данных?
В таком виде как вы это понимаете - нет. SQLite — это встраиваемая библиотека. Она не является отдельным процессом/сервером, она работает в том же процессе и в том же потоке, что и ваш код. При перегрузке сервера БД упрется в блокировку файловой системы, т. к. sqlite не умеет обрабатывать параллельную запись (только параллельное чтение), в результате чего FastAPI получит ошибку database is locked и вернет пользователю 500-ю ошибку.

Также одним из аргументов необходимости перехода является отсутствие встроенного шифрования базы данных в SQLite
Есть неплохой форк SQLite - называется SQLCipher, поддерживающий 256-битное AES. Его можно без проблем использовать в SQlAlchemy.

Также, если потребуется переход, какую реляционную базу данных выбрать?
это наш первый сколько-нибудь сложный проект, который мы пытаемся создать
Я бы пока не переходил никуда. Пока проект небольшой, некоммерческий и т. д. и т. п., нет смысла усложнять себе жизнь.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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