Я разрабатываю небольшую систему с двумя компонентами: один опрашивает данные с интернет-ресурса и переводит их в данные sql, чтобы сохранить их локально; второй читает эти данные sql из локального экземпляра и передает их через json и остальные API.
Первоначально я планировал сохранить данные с помощью postgresql, но поскольку приложение будет иметь очень небольшой объем данных для хранения и трафика для обслуживания, я подумал, что это излишне. SQLite подходит для работы? Мне нравится идея малого размера, и мне не нужно поддерживать еще один сервер sql для этой задачи, но я обеспокоен параллелизмом.
Кажется, что при включенной записи в журнал впереди одновременное чтение и запись базы данных SQLite может происходить без блокировки какого-либо процесса из базы данных.
Может ли один экземпляр SQLite поддерживать два параллельных процесса, обращающихся к нему, если только один читает, а другой пишет? Я начал писать код, но мне было интересно, если это неправильное применение SQLite.
Ответы:
Вы ищете документацию по блокировке файлов и параллелизму .
Процессы SQLite используют серию блокировок для обработки параллелизма; читать, несколько процессов могут получить
SHARED
блокировку.Процесс, который пишет, должен будет получить
RESERVED
блокировку, и только когда фактически необходимо сбросить изменения на диск, он переходит вPENDING
состояние. Любой процесс чтения должен будет разблокировать файл, после чего процесс записи может перейти кEXCLUSIVE
записи в файл базы данных.Поскольку процессу записи необходимо блокировать файл базы данных только для фактических операций записи (сброса памяти, фиксации), установка с одним считывателем и только одним модулем записи будет работать достаточно хорошо. Я ожидаю, что он будет работать так же хорошо, если не лучше, как установка с одним процессом, выполняющим все чтение и запись.
SQLite менее подходит, когда у вас есть несколько процессов, часто пишущих в одну и ту же базу данных, поскольку запись требует получения монопольной
PENDING
блокировки для сериализации изменений.источник
Просто хотел продолжить и сообщить всем, что реализация прошла успешно. Работать с SQLite было настоящим удовольствием, и когда за один раз его писал только один процесс, у нас никогда не было проблем с блокировкой ... даже с очень быстрым параллельным чтением из вторичного процесса.
источник