49 votes

SQLite verrouille-t-il le fichier de base de données lors des lectures?

J'étudie SQLite en tant que moteur de stockage et je suis curieux de savoir si SQLite verrouille le fichier de base de données lors des lectures.

Je suis préoccupé par les performances de lecture car mon projet prévu aura peu d'écritures, mais beaucoup de lectures. Si la base de données se verrouille, des mesures peuvent-elles être prises (comme la mise en cache de la mémoire) pour atténuer cela?

56voto

Tombo Points 211

Vous pouvez éviter les verrous lors de la lecture, si vous définissez le mode de journal de base de données sur Write-Ahead Logging (voir: http://www.sqlite.org/wal.html ).

48voto

Joey Points 148544

À partir de sa page Wikipedia:

Ordinateur plusieurs processus ou threads peuvent accéder à la même base de données sans problèmes. Plusieurs accès en lecture peuvent être satisfaits en parallèle.

Plus précisément, à partir de sa FAQ:

Plusieurs processus peuvent avoir la même base de données en même temps. Plusieurs processus peuvent être en train de faire un SELECT en même temps. Mais un seul processus peut être apporter des modifications à la base de données à tout moment dans le temps, cependant.

Une seule écriture dans la base de données, cependant, ne verrouiller la base de données pour un court laps de temps, donc rien ne peut accéder à tous (même lecture). Les détails peuvent être trouvés dans le Fichier de Verrouillage Et de la Simultanéité Dans SQLite Version 3. Fondamentalement, la lecture de la base de données n'est pas un problème, sauf si quelqu'un veut écrire dans la base de données immédiatement. Dans ce cas, la DB est verrouillé exclusivement pour le temps qu'il faut pour exécuter la transaction et que le verrou est libéré par la suite. Cependant, les détails sont rares sur ce que fait exactement avec les opérations de lecture sur le datapase dans le temps de l'ATTENTE d'une ou verrou EXCLUSIF. Ma conjecture est qu'ils retournent SQLITE_BUSY ou de bloquer jusqu'à ce qu'ils peuvent lire. Dans le premier cas, il ne devrait pas être trop difficile d'essayer de nouveau, surtout si vous attendez quelques écritures.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X