Question

Mon SQLiteL'application basée sur l'application utilise actuellement des transactions - à la fois pour pouvoir effectuer une restauration et pour améliorer les performances.J'envisage de remplacer toutes les transactions par des points de sauvegarde.La raison est que l'application est multithread (oui, sqlite est configuré pour être thread-safe), et dans certains cas, une transaction peut être démarrée par deux threads en même temps (sur la même base de données).

  1. Y a-t-il une raison pour ne pas le faire ?
  2. Y a-t-il des pièges dont je dois être conscient ?
  3. Est-ce que je viens de remplacer BEGIN, COMMIT, ROLLBACK avec SAVEPOINT xyz, RELEASE SAVEPOINT xyz, ROLLBACK TO SAVEPOINT xyz?
Était-ce utile?

La solution

    It there a reason NOT to do it?

Oui.Cela ne résoudra aucun des problèmes que vous avez évoqués.Les points de sauvegarde sont principalement utilisés pour pouvoir effectuer des restaurations partielles de données.La transaction externe ou point de sauvegarde est ce qui est réellement validé.Rien n'est vraiment entièrement enregistré jusqu'à ce que ce point de sauvegarde le plus externe soit libéré, mettant ainsi à jour la base de données.Vous revenez au même problème que celui que vous rencontrez avec les transactions standard.

    Are there any pitfalls I need to be aware of?

Oui.Les transactions ou les points de sauvegarde dans une application multithread peuvent se bloquer assez facilement si vous mettez à jour les mêmes données dans deux threads différents, ce qui, je suppose, est le cœur du problème.Il n’y a aucune différence entre les deux à cet égard.Vous devez être conscient de ce que vous mettez à jour dans chaque thread et synchroniser en conséquence.

En bref, à moins que vous n'ayez besoin d'effectuer une restauration partielle des transactions, les points de sauvegarde ne vous donneront pas grand-chose (à part le fait qu'ils sont nommés.)

Il n’y a pas de solution miracle ici.Il semble que vous deviez effectuer une analyse sérieuse de votre application et des données qui peuvent être mises à jour dans plusieurs threads et ajouter une certaine synchronisation dans votre application si nécessaire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top