inro

Full de ruta

Quatre fases, cadascuna acabant amb mesures que decideixen si val la pena començar la següent. Cap fase posterior comença sense les xifres de l'anterior.

Fase 1 — Nucli (En curs)

Tot el que hi ha a les seccions de format de fitxer, B+tree copy-on-write, llista lliure, transaccions, índexs secundaris, delete_range i xifratge de l'especificació de disseny del motor. 4.000-6.000 línies.

Criteris de sortida:

  • Tests basats en propietats i injecció de fallades en verd.

  • Com a màxim 40 bytes per entrada de registre, mesurat amb un milió de registres sintètics.

  • Obertura de cost constant, verificada amb fitxers de 30 KB i 2 GB.

  • Un benchmark comparatiu contra SQLite fent servir l'esquema real de quota.

Fase 2 — RAM i CPU (Planificada)

Sense tocar el format en disc. Unes 1.000 línies: un filtre de Bloom en lloc del diccionari d'interning, tancament per inactivitat amb reobertura de cost constant, buidatge diferit d'agregats, un grup de pàgines compartit entre bases de dades del mateix procés, una cache limitada als nodes interns, i lectures sense còpia amb un allocator d'arena per transacció.

Criteris de sortida: 40 KB o menys per base de dades oberta en un node pro, 8 KB o menys en un node micro, amplificació d'escriptura d'1,2× o menys.

Fase 3 — Segments append-only (Condicional)

Substitueix el B+tree per segments seqüencials i un índex dispers, només a l'espai de claus del registre. Unes 700 línies. Aquesta és l'única fase que canvia l'arquitectura del motor, i requereix un prototip i mesures abans de comprometre-s'hi.

Fase 4 — Codificació columnar (Condicional)

Delta i bitpacking en timestamps, RLE en columnes de baixa cardinalitat, frame-of-reference en latències i mides, diccionari i bitpacking en identificadors interned, LZ4 sobre el bloc.

Criteris de sortida: 13 bytes o menys per entrada de registre.

Prerequisit: confirmar que cap flux de quota necessita modificar un registre que ja s'ha escrit.

Xifres previstes per fase, node pro

| Fase | Disc | Amplificació d'escriptura | RAM per base de dades | | --- | --- | --- | --- | | 1 — nucli | 46 MB | 2,1× | ~832 KB | | 2 — RAM i CPU | 46 MB | 1,1× | ~34 KB | | 3 — segments | 40 MB | ~1,0× | ~34 KB | | 4 — columnar | ~15 MB | ~1,0× | ~34 KB |

Projeccions del disseny, no mesures.

Les xifres de disc són fiables dins d'un 10%. Les xifres de CPU són estimacions d'ordre de magnitud, amb un marge del 50%. Les xifres de RAM depenen totalment de quants usuaris diferents veu un node dins la seva finestra de retenció.

Un servidor amb 4.500 nodes micro o starter i 500 nodes pro: uns 640 MB de RAM després de la fase 1, uns 61 MB després de la fase 2 amb totes les bases de dades obertes, i uns 12 MB si el 95% estan inactius i tancats.