Transacciones distribuidas

La confirmación de 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 plano

Si 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.

Más información