En 2019, il existe deux nouvelles options d'écriture simultanée non encore publiées mais disponibles dans des branches distinctes.
"PRAGMA journal_mode = wal2"
L'avantage de ce mode journal par rapport au mode normal "wal" est que les écrivains peuvent continuer à écrire dans un fichier wal pendant que l'autre est en mode checkpointed.
COMMENCER À CONCOURIR - lien vers le document détaillé
L'amélioration BEGIN CONCURRENT permet à plusieurs rédacteurs de traiter des transactions d'écriture simultanément si la base de données est en mode "wal" ou "wal2", bien que le système sérialise toujours les commandes COMMIT.
Lorsqu'une transaction d'écriture est ouverte avec "BEGIN CONCURRENT", le verrouillage effectif de la base de données est différé jusqu'à l'exécution d'un COMMIT. Cela signifie qu'un nombre quelconque de transactions lancées avec BEGIN CONCURRENT peuvent se dérouler simultanément. Le système utilise un verrouillage optimiste au niveau des pages pour éviter que des transactions concurrentes conflictuelles ne soient validées.
Ensemble, ils sont présents dans début-concurrent-wal2 ou chacun dans un propre branche .
5 votes
J'ai oublié de mentionner le prime goall : la plupart des réponses disent que c'est bon : "mais, à mon avis, ne répondent pas en détail / n'expliquent pas clairement ce qui se passe si deux opérations d'écriture arrivent exactement au même moment (cas théorique très rare). 1) Est-ce que cela déclencherait une erreur et interromprait le programme ? ou 2) Est-ce que la deuxième opération d'écriture attendrait que la première soit terminée ? ou 3) Est-ce que l'une des opérations d'écriture serait abandonnée (perte de données !)? 4) Autre chose ? Connaître les limites de l'écriture simultanée peut être utile dans de nombreuses situations.
7 votes
@Basj En bref,2)il attendra et réessayera plusieurs fois(configurable),1)déclenchera une erreur,SQLITE_BUSY.3)vous pouvez enregistrer un Callback pour gérer les erreurs SQLITE_BUSY.