Pregunta

Mi SQLiteLa aplicación basada actualmente utiliza transacciones, tanto para poder revertirlas como para mejorar el rendimiento.Estoy considerando reemplazar todas las transacciones con puntos de guardado.La razón es que la aplicación es multiproceso (sí, sqlite está configurado para ser seguro para subprocesos) y, en algunos casos, dos subprocesos pueden iniciar una transacción al mismo tiempo (en la misma base de datos).

  1. ¿Hay alguna razón para NO hacerlo?
  2. ¿Hay algún peligro que deba tener en cuenta?
  3. ¿Acabo de reemplazar? BEGIN, COMMIT, ROLLBACK con SAVEPOINT xyz, RELEASE SAVEPOINT xyz, ROLLBACK TO SAVEPOINT xyz?
¿Fue útil?

Solución

    It there a reason NOT to do it?

Sí.No resolverá ninguno de los problemas que describió.Los puntos de guardado se utilizan principalmente para poder realizar reversiones parciales de datos.La transacción externa o punto de guardado es lo que realmente se confirma.En realidad, nada se guarda por completo hasta que se libera el punto de guardado más externo, actualizando así la base de datos.Vuelve a tener el mismo problema que tiene con las transacciones estándar.

    Are there any pitfalls I need to be aware of?

Sí.Las transacciones o puntos de guardado en una aplicación multiproceso pueden bloquearse con bastante facilidad si actualiza los mismos datos en dos subprocesos diferentes, lo cual supongo que es el meollo del asunto.No hay diferencia entre los dos a este respecto.Debes tener en cuenta lo que estás actualizando en cada hilo y sincronizarlo en consecuencia.

En resumen, a menos que tenga la necesidad de realizar una reversión parcial de la transacción, los puntos de guardado realmente no le brindarán mucho (aparte del hecho de que tienen un nombre).

Aquí no existe una solución milagrosa.Parece que necesita realizar un análisis serio de su aplicación y los datos que pueden actualizarse en varios subprocesos y agregar algo de sincronización en su aplicación si es necesario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top