De la FAQ SQLite, je sais que:
Plusieurs processus peuvent avoir la même base de données ouverte en même temps. Plusieurs processus peuvent faire un
SELECT
en même temps. Mais un seul processus peut à tout moment apporter des modifications à la base de données.
Donc, pour autant que je comprends que je peux: 1) Lire db à partir de plusieurs threads ( SELECT
) 2) Lire db à partir de plusieurs threads ( SELECT
) et écriture de fil unique ( CREATE
, INSERT
, DELETE
)
Mais, j'ai lu sur la journalisation Write-Ahead qui fournit plus de simultanéité car les lecteurs ne bloquent pas les écrivains et un écrivain ne bloque pas les lecteurs . La lecture et l'écriture peuvent se dérouler simultanément.
Enfin, j'ai complètement confus quand je trouvais cela , lorsque précisé:
Voici d'autres raisons d'obtenir une erreur SQLITE_LOCKED:
- Tentative
CREATE
ouDROP
table ou index alors qu'uneSELECT
instruction est toujours en attente.- Essayer d'écrire dans une table alors que a
SELECT
est actif sur cette même table.- Essayer de faire deux
SELECT
sur la même table en même temps dans une application multithread, si sqlite n'est pas configuré pour le faire.- fcntl (3, l'appel F_SETLK sur le fichier DB échoue. Cela peut être dû à un problème de verrouillage NFS, par exemple. Une solution à ce problème consiste à supprimer la base de données et à la recopier afin qu'elle ait une nouvelle valeur d'inode
Donc, je voudrais clarifier pour moi, il faut éviter le verrouillage? Puis-je lire et écrire en même temps à partir de deux threads différents? Merci.
isolation_level=None
. Sans mode de cache partagé, comment partager des instances entre des threads?