Una transacción entre nodos

Qué pasa por dentro cuando una transacción de TeselaDB toca documentos de rangos que viven en nodos distintos.

TeselaDB

TeselaDB

Equipo de TeselaDB

2 min de lectura

  • transacciones
  • intents
  • aislamiento

Una transacción de TeselaDB puede tocar documentos de varios rangos y nodos y se confirma de forma atómica, con aislamiento por instantánea. Aquí sigues una transacción desde que empieza hasta que sus escrituras quedan como versiones normales.

Si todo cae en un rango

Si todas las claves de la transacción caen en un mismo rango, su líder la confirma con una sola escritura. Es el caso más rápido.

Si toca varios rangos

Si no, cada rango guarda versiones provisionales, las intents. Un registro de transacción decide si se confirma o se anula. Ese registro vive en el rango que cubre su clave, así que también está replicado con Raft.

intents en cada rango ──▶ registro de transacción: confirmada
                                   │
                                   ▼
                    resolución de intents en segundo plano

Cuando el registro dice «confirmada», la transacción ya está hecha. Tu aplicación recibe la respuesta en ese momento, y la conversión de cada intent en una versión normal, en todos los rangos que tocó la transacción, sigue en segundo plano sin retener al cliente.

Cuando dos transacciones se cruzan

Un lector que encuentra una intent pendiente con una marca menor que la suya empuja la marca mínima de commit de esa transacción y lee la versión anterior, sin esperar al commit. Una transacción de cliente que encuentra una intent ajena falla con WriteConflict y la etiqueta TransientTransactionError, como en MongoDB. withTransaction de los drivers reintenta la transacción sin que lo programes tú.

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 de las transacciones abandonadas. Si quieres verlo con código, la guía Inventario sin vender de más descuenta stock y crea un pedido en una sola transacción.

Todos los artículos