Это главный недостаток SQLite.
Базы данных имеют механизм блокировки , чтобы предотвратить изменение данных / схемы во время выполнения запроса. Большинство серверов баз данных будут работать в ОЗУ, после чего данные будут сохраняться на диск в поточном режиме (т.е. записывать в ОЗУ, возвращать ответ, затем записывать на диск). Вы уже должны знать, что запись в память в газиллион раз быстрее, чем запись на диск. Поскольку SQLite выполняет запись непосредственно на диск, он сначала блокирует базу данных, записывает, а затем снимает блокировку. Запись (на диск) занимает намного больше времени, чем на обычном сервере баз данных (например, MySQL, PostgreSQL и т. Д.), Что приводит к длительному времени отклика при выполнении нескольких запросов с небольшой задержкой.
Решение, которое я нашел, состоит в том, чтобы использовать базу данных памяти (то есть: :memory:
) и регулярно выгружать на диск. Основным недостатком этого подхода является то, что данные на диске не обязательно в курсе последних данных (поскольку фактические данные в реальном времени хранятся в памяти).
Волшебного решения не существует, это коренная «проблема» SQLite. Если вы планируете запускать несколько одновременных операций записи в базу данных, вам следует подумать об использовании реального сервера базы данных.