Je développe un petit système à deux composants: l'un interroge les données d'une ressource Internet et les traduit en données sql pour les conserver localement; le second lit les données sql de l'instance locale et les sert via json et une api reposante.
Je prévoyais à l'origine de conserver les données avec postgresql, mais parce que l'application aura un très faible volume de données à stocker et du trafic à servir, je pensais que c'était exagéré. SQLite est-il à la hauteur? J'aime l'idée de la petite empreinte et pas besoin de maintenir encore un autre serveur SQL pour cette seule tâche, mais je suis préoccupé par la concurrence.
Il semble que lorsque la journalisation en écriture préalable est activée, la lecture et l'écriture simultanées d'une base de données SQLite peuvent se produire sans verrouiller l'un ou l'autre processus de la base de données.
Une seule instance SQLite peut-elle soutenir deux processus simultanés y accédant, si un seul lit et l'autre écrit? J'ai commencé à écrire le code mais je me demandais s'il s'agissait d'une mauvaise application de SQLite.
Réponses:
Vous recherchez la documentation File Locking And Concurrency .
Les processus SQLite utilisent une série de verrous pour gérer la concurrence; à lire, plusieurs processus peuvent obtenir un
SHARED
verrou.Un processus qui écrit, devra obtenir un
RESERVED
verrou, et ce n'est que lorsqu'il doit réellement vider les modifications sur le disque qu'il passe à l'PENDING
état. Tout processus de lecture devra ensuite déverrouiller le fichier, après quoi le processus d'écriture pourra se déplacer versEXCLUSIVE
pour écrire dans le fichier de base de données réel.Étant donné que le processus d'écriture n'a besoin que de verrouiller le fichier de base de données pour les écritures réelles (vidages de mémoire, validations), une configuration avec un seul lecteur et un seul écrivain fonctionnera assez bien. Je m'attends à ce qu'il fonctionne aussi bien, sinon mieux, en tant que configuration avec un seul processus effectuant toutes les tâches de lecture et d'écriture.
SQLite est moins adapté lorsque plusieurs processus écrivent fréquemment dans la même base de données, car l'écriture nécessite l'obtention du
PENDING
verrou exclusif pour sérialiser les modifications.la source
Je voulais juste faire un suivi et faire savoir à tout le monde que la mise en œuvre a réussi. Travailler avec SQLite a été un réel plaisir, et avec un seul processus à l'écrire à la fois, nous n'avons jamais eu de problèmes de verrouillage ... même avec des lectures simultanées très rapides à partir d'un processus secondaire.
la source