@igreklpofrss

Как на уровне кода правильно реализовать работу SQLite3 и обрабатывать запросы к БД?

Вопрос не о составлении SQL запросов. Интернет заполонён миллионами гайдов по открытию соединения, записи, чтению бд, но вопрос более практического характера я не находил.. Условный Телеграм Бот на aiogram. У него может быть большая аудитория, что равняется большому потоку обращений к БД, будь то частная музыкальная школа и ее студенты, тех. поддержка сервиса, бот для знакомств, бот с викторинами и т.п. Не будет же рабочим решением на каждый запрос обращаться к файлу открывать соединение с бд, записывать-читать данные, коммитить, если команда на запись, закрывать соединение и так по кругу на каждый запрос? Может есть какой-то стандарт обертки, менеджер для работы с sqlite3? Какие-то стандарты для решения данного вопроса? Может при первом запросе к бд открывать соединение и запускать таймер на 60 сек и собирать запросы в общую очередь, а там уже раскидывать запись, потом, если запросы прекратились, коммитить все полученные данные или не знаю.. Будут ведь какие-нибудь конфликты чтения-записи и данные могут быть потеряны и надо соблюдать очередь чтения записи. Какие варианты есть? Особенно вопрос возникает при работе асинхронной работой кода.
  • Вопрос задан
  • 886 просмотров
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Sqlite вообще плохо походит для одновременной работы из нескольких потоков.
Для более-менее серьёзной работы лучше взять MySQL или PostgreSQL. Чтобы не открывать постоянно соединения надо использовать пул.
Ответ написан
saboteur_kiev
@saboteur_kiev Куратор тега Python
software engineer
Вам вот ответили, что sqlite не очень подходит для этого, а вы сразу "в данный момент интересует sqlite"

Какое подключение отключение? sqlite это не база данных, это библиотека работы с конретным файлом. Файл открывается обычными средствами системы. И если две программы или два потока попробуют его открыть одновременно на запись, будет проблема в виде задержек.

Если у вас бот с множеством подключений и нужна параллельная работа, вам нужна именно отдельная база данных, любая.
sqlite может множественно читать, а писать - с блокировками.
Ответ написан
Комментировать
Вопрос не такой простой, как может показаться.
Может я и не прав, но, по-моему, использование SQLite перекладывает заботу о разных аспектах на разработчика, что вынуждает его переходить на другие СУБД, в которых эти вещи учтены.
SQLite позволяет работу с множественными читателями, но для множественных писателей необходимо откладывать запросы (при помощи очереди), пока текущая запись не будет выполнена.
Пул соединений не поддерживается в SQLite и поэтому нужно вести учёт соединений в самом приложении.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы