Estoy desarrollando un sistema pequeño con dos componentes: uno sondea datos de un recurso de internet y los traduce a datos sql para conservarlos localmente; el segundo lee los datos sql de la instancia local y los sirve a través de json y una api relajante.
Originalmente planeaba conservar los datos con postgresql, pero debido a que la aplicación tendrá un volumen muy bajo de datos para almacenar y tráfico para servir, pensé que era excesivo. ¿SQLite está a la altura? Me encanta la idea de la pequeña huella y no es necesario mantener otro servidor sql para esta tarea, pero estoy preocupado por la concurrencia.
Parece que con el registro de escritura anticipada habilitado, simultáneamente puede leer y escribir una base de datos SQLite sin bloquear ninguno de los procesos de la base de datos.
¿Puede una sola instancia de SQLite sostener dos procesos concurrentes que acceden a ella, si solo uno lee y el otro escribe? Empecé a escribir el código, pero me preguntaba si esta es una aplicación incorrecta de SQLite.
fuente
Respuestas:
Está buscando la documentación de bloqueo y concurrencia de archivos.
Los procesos SQLite usan una serie de bloqueos para manejar la concurrencia; para leer, varios procesos pueden obtener un
SHARED
bloqueo.Un proceso que escribe, necesitará obtener un
RESERVED
bloqueo, y solo cuando realmente tenga que vaciar los cambios en el disco, pasará alPENDING
estado. Cualquier proceso de lectura tendrá que desbloquear el archivo, después de lo cual el proceso de escritura podrá moverseEXCLUSIVE
para escribir en el archivo de base de datos real.Debido a que el proceso de escritura solo necesita bloquear el archivo de la base de datos para las escrituras reales (borrados de memoria, confirmaciones), una configuración con solo un lector y solo un escritor funcionará bastante bien. Esperaría que funcione igual de bien, si no mejor, como una configuración con solo un proceso haciendo toda la lectura y escritura.
SQLite es menos adecuado cuando tiene múltiples procesos que escriben frecuentemente en la misma base de datos, ya que la escritura requiere obtener el
PENDING
bloqueo exclusivo para serializar los cambios.fuente
Solo quería hacer un seguimiento y hacerles saber a todos que la implementación fue exitosa. Trabajar con SQLite fue un verdadero placer, y con solo un proceso escribiéndolo a la vez, nunca tuvimos problemas con el bloqueo ... incluso con lecturas concurrentes muy rápidas de un proceso secundario.
fuente