Cómo una Tabla SQL Se Convierte en un Espacio Clave-Valor Ordenado: Codificación Lexicográfica y Ranges de 512 MB (50 min)
Cómo una Tabla SQL Se Convierte en un Espacio Clave-Valor Ordenado: Codificación Lexicográfica y Ranges de 512 MB
1. Mapeo de Filas e Índices Secundarios a un Único Espacio Monolítico de Llaves
Motores NewSQL como CockroachDB, TiDB (TiKV) y YugabyteDB compilan consultas PostgreSQL/MySQL hacia un motor transaccional Clave-Valor subyacente basado en LSM-Trees (Pebble o RocksDB). Cada fila de tabla e índice secundario se codifica de forma determinista y lexicográficamente ordenable:
/TableID/IndexID/PrimaryKeyColumnValues/ColumnFamilyID@[HybridTimestamp] -> ValueBytes
Ejemplo Fila Primaria: /104/1/"acc_8892"/[email protected] -> { balance: 15400.00, status: "ACTIVE" }
Ejemplo Índice Secund.: /104/2/"ACTIVE"/"acc_8892"@1729550100.000001 -> Empty (Apunta a la PK)
2. Particionamiento Automático en Ranges (64 MB – 512 MB) y Multi-Raft
El espacio continuo de claves se divide dinámicamente en Ranges (en CockroachDB) o Regions (en TiKV) de $64\text{ MB}$ a $512\text{ MB}$. Cada Range constituye un grupo de consenso Raft independiente (típicamente con $3$ o $5$ réplicas distribuidas en distintas zonas de disponibilidad):
flowchart LR
SQL["Capa SQL Stateless (Parser / Cost-Based Optimizer)"] --> KV["DistSender (Enrutador de Rangos)"]
KV -->|"Range [A..M]"| L1["Leaseholder Raft Grupo 1 (AZ-1)"]
L1 -->|"AppendEntries Quórum"| F1A["Follower Raft 1B (AZ-2)"]
L1 -->|"AppendEntries Quórum"| F1B["Follower Raft 1C (AZ-3)"]