Almacenamiento LSM y MVCC

Cómo guarda cada núcleo los datos y las versiones de cada documento.

Cada núcleo guarda sus datos en un LSM. Cada documento conserva varias versiones con su marca de tiempo (MVCC).

Cómo funciona

escritura ──▶ log de Raft ──▶ memtable ──(lleno)──▶ fichero SST
                                                      │
                                       compactación ◀─┘  (junta SST y quita versiones viejas)

Una escritura entra en el log de Raft y en una tabla en memoria, la memtable. El log de Raft hace también de log de escritura del LSM. Por eso cada escritura llega al disco una sola vez. Cuando la memtable se llena se vuelca a un fichero SST inmutable y ordenado, y la compactación, que trabaja de forma continua sin que nadie la pida, junta esos ficheros y quita las versiones que ya no puede ver ninguna lectura ni ninguna transacción abierta.

Cada versión lleva su marca HLC. Una lectura a una marca ve la última versión anterior a ella.

Qué implica para tu aplicación

Las lecturas snapshot y las transacciones leen una foto coherente sin bloquear a las escrituras ni esperar por ellas, porque cada una mira solo las versiones que existían en su marca de tiempo. No hace falta lanzar compact.

Límites

Las versiones se conservan 24 horas por defecto (teselaHistoryRetention). Una lectura a una marca anterior falla con SnapshotTooOld.

Más información