Transacciones distribuidas
Cómo se confirma una transacción que toca varios rangos y nodos.
Una transacción de TeselaDB puede tocar documentos de varios rangos y nodos y se confirma de forma atómica.
Cómo funciona
1 rango: escrituras ──▶ un solo Write del líder (una fase)
varios: intents en cada rango ──▶ registro de transacción: confirmada
│
▼
resolución de intents en segundo planoSi todas las claves de la transacción caen en un rango, el líder la confirma con una sola escritura. Si no, cada rango guarda versiones provisionales (intents) y un registro de transacción, guardado en el rango que cubre su clave, decide si se confirma o se anula. Un lector que encuentra una intent pendiente empuja la transacción o espera a que se resuelva. La conversión de las intents en versiones sigue en segundo plano después de responder.
Qué implica para tu aplicación
Las transacciones tienen la semántica de MongoDB: withTransaction de los drivers reintenta lo que debe. Un conflicto con otra escritura da WriteConflict con la etiqueta TransientTransactionError.
Límites
Una transacción se anula al pasar de 60 segundos por defecto. Su estado tiene que caber en la memoria de su coordinador. Un recolector anula los registros abandonados.