2012-03-12 6 views
5

Moja SQLite -na aplikacja obecnie używa transakcji - zarówno dla mogąc wycofać i poprawy wydajności. Zastanawiam się nad zastąpieniem wszystkich transakcji punktami zapisywania. Powodem jest to, że aplikacja jest wielowątkowa (tak, sqlite jest skonfigurowana tak, aby była bezpieczna dla wątków), aw niektórych przypadkach transakcja może zostać rozpoczęta przez dwa wątki w tym samym czasie (w tej samej bazie danych).sqlite przejście od transakcji punkty zapisu

  1. Czy istnieje powód, aby tego NIE robić?
  2. Czy są jakieś pułapki, o których muszę wiedzieć?
  3. Czy ja po prostu zastąpić BEGIN, COMMIT, ROLLBACK z SAVEPOINT xyz, RELEASE SAVEPOINT xyz, ROLLBACK TO SAVEPOINT xyz?
+1

użyłem _savepoints wewnątrz transakcji do realizacji zagnieżdżonych transactions_ ale ** co się sugeruje to nonsens **. punkty zapisu nie działają w ten sposób. –

Odpowiedz

7
It there a reason NOT to do it? 

Tak. Nie rozwiąże żadnego z problemów, które opisałeś. Punkty zapisu są przede wszystkim wykorzystywane do częściowego wycofywania danych. Zewnętrzna transakcja lub punkt zapisu jest tym, co faktycznie zostało popełnione. Nic tak naprawdę nie jest w pełni zapisane, dopóki ten najbardziej zewnętrzny punkt zapisu nie zostanie zwolniony, co spowoduje aktualizację DB. Wracasz z powrotem do tego samego problemu, który masz przy standardowych transakcjach.

Are there any pitfalls I need to be aware of? 

Tak. Transakcje lub punkty zapisu w aplikacji wielowątkowej mogą się dość łatwo zakleszczyć, jeśli aktualizujesz te same dane w dwóch różnych wątkach, które, jak zakładam, stanowią sedno sprawy. Nie ma różnicy między tymi dwoma w tym zakresie. Powinieneś zdawać sobie sprawę z tego, co aktualizujesz w każdym wątku i odpowiednio synchronizować.

W skrócie, chyba że masz potrzebę zrobienia częściowe wycofywanie transakcji, punkty zapisu przyzwyczajenie naprawdę daje dużo (poza faktem, że są one o nazwie).

Nie ma panaceum tutaj. Wygląda na to, że musisz wykonać poważne analizy swojej aplikacji i dane, które mogą być aktualizowane w wielu wątkach i dodać synchronizację w twojej aplikacji, jeśli zajdzie taka potrzeba.

+1

Dzięki! Wiedziałem, że czegoś mi brakuje :-) – noamtm