Frage

Mein SQLite-basierte Anwendungen verwenden derzeit Transaktionen – sowohl für die Möglichkeit eines Rollbacks als auch für die Verbesserung der Leistung.Ich denke darüber nach, alle Transaktionen durch Sicherungspunkte zu ersetzen.Der Grund dafür ist, dass die Anwendung Multithreading ist (ja, sqlite ist als Thread-sicher konfiguriert), und in manchen Fällen kann eine Transaktion von zwei Threads gleichzeitig (auf derselben Datenbank) gestartet werden.

  1. Gibt es einen Grund, es NICHT zu tun?
  2. Gibt es Fallstricke, die ich beachten muss?
  3. Muss ich einfach ersetzen? BEGIN, COMMIT, ROLLBACK mit SAVEPOINT xyz, RELEASE SAVEPOINT xyz, ROLLBACK TO SAVEPOINT xyz?
War es hilfreich?

Lösung

    It there a reason NOT to do it?

Ja.Es wird keines der von Ihnen geschilderten Probleme lösen.Sicherungspunkte werden in erster Linie verwendet, um teilweise Daten-Rollbacks durchführen zu können.Die äußere Transaktion oder der Sicherungspunkt ist das, was tatsächlich festgeschrieben wird.Nichts ist wirklich vollständig gespeichert, bis der äußerste Sicherungspunkt freigegeben und somit die Datenbank aktualisiert wird.Sie haben wieder das gleiche Problem wie bei Standardtransaktionen.

    Are there any pitfalls I need to be aware of?

Ja.Transaktionen oder Sicherungspunkte in einer Multithread-Anwendung können ziemlich leicht zum Stillstand kommen, wenn Sie dieselben Daten in zwei verschiedenen Threads aktualisieren, was meiner Meinung nach der Kern der Sache ist.In dieser Hinsicht gibt es keinen Unterschied zwischen den beiden.Sie sollten sich darüber im Klaren sein, was Sie in den einzelnen Threads aktualisieren, und entsprechend synchronisieren.

Kurz gesagt: Sofern Sie nicht die Notwendigkeit haben, einen teilweisen Transaktions-Rollback durchzuführen, bringen Ihnen Sicherungspunkte wirklich nicht viel (abgesehen von der Tatsache, dass sie benannt sind).

Hier gibt es kein Allheilmittel.Es hört sich so an, als müssten Sie eine ernsthafte Analyse Ihrer Anwendung und der Daten durchführen, die möglicherweise in mehreren Threads aktualisiert werden, und bei Bedarf eine gewisse Synchronisierung in Ihre Anwendung integrieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top