Les xifres mesurades van marcades com a tals i surten de bancs de proves del repositori. La resta — les fases 3 i 4, i la taula de més avall — segueixen sent projeccions del disseny.
Fase 1 — Nucli (Feta · mesurada)
El format de fitxer, el B+tree copy-on-write, la llista de lliures, les transaccions, els índexs secundaris, delete_range i el xifratge. Els sis criteris de sortida complerts i mesurats.
Criteris de sortida:
Proves basades en propietats i injecció de fallades en verd.
34,14 bytes per entrada de registre, davant d'un llindar de 40, mesurat amb un milió de registres sintètics.
Una base acabada de crear de 1.536 bytes, per sota dels 2 KB que demanava el disseny.
Obertura de cost constant: 4 lectures físiques a 30 KB, a 14 MB i a 2 GB.
Un banc comparatiu contra SQLite sobre l'esquema real de quota, que inro guanya.
Zero dependències d'execució i zero unsafe al crate.
Fase 2 — RAM i CPU (Feta · mesurada)
Sense tocar el format en disc. Les mesures van moure l'objectiu en lloc de complir-lo: una base oberta costa 19,7 KB de RAM, no els 832 KB que estimava el disseny, així que gairebé tot el que aquesta fase havia de construir no protegia de res.
El que sí que va entregar és l'única cosa que el disseny no havia vist: l'amplificació física d'escriptura va baixar de 335× a 1,71×, i a 1,10× amb lots més grans, guardant les pàgines brutes fins al commit en lloc d'escriure cadascuna en passar. Per a una flota de 2.700 inquilins són 4,1 GB d'escriptures al dia en lloc de 813.
Una mesura va contradir una altra, i es conserven totes dues: la corba de memòria cau és plana en cerques disperses però no sobre un conjunt de treball calent, on 32 pàgines fan nou vegades menys lectures que 4. El valor per defecte es queda en 4 perquè a l'edge s'escriu més del que es llegeix.
Fase 3 — Segments append-only (No s'obre)
Substituiria el B+tree per segments seqüencials i un índex dispers a l'espai de claus de registre. Unes 700 línies, i l'única fase que canvia el format en disc del motor — per això era l'única especificada amb una porta: mesurar abans de comprometre-s'hi.
La porta la va tancar. Dos dels seus tres criteris de sortida ja els complia la feina de les fases 1 i 2: les fulles estan al 99,5% d'ompliment, i podar mig milió de files costa 2,1 ms. El tercer — amplificació d'escriptura a prop d'1,0× — portaria una flota de 2.700 inquilins de 4,1 a 2,4 GB d'escriptures al dia, en una màquina que ja escriu 9,1 GB diaris pel seu compte.
Fase 4 — Codificació columnar (No s'obre)
Delta i bitpacking a les marques de temps, RLE a les columnes de baixa cardinalitat, frame-of-reference a latències i mides, diccionari i bitpacking als identificadors internats, LZ4 sobre el bloc. Objectiu: 13 bytes o menys per entrada de registre, davant dels 34 d'avui.
Necessita els segments segellats de la fase 3, i el seu propi premi no carrega amb totes dues: en 2.700 inquilins portaria la flota de 6,06 a 4,35 GB. Són 1,71 GB estalviats en un disc amb 59 GB lliures, a canvi de 1.300 línies de còdecs i un LZ4 escrit a mà — el motor prohibeix el crate que fa servir tothom, perquè conté unsafe.
Què reobriria totes dues: una flota un ordre de magnitud més gran, on 1,71 GB passen a ser 17. Un tier que guardi els registres crus mesos en lloc de dies, on els bytes per entrada tornin a importar. O un desplegament on escriure sigui el recurs car — una targeta SD en un node IoT de veritat, no un volum de servidor. Cap de les tres és descabellada. Cap és certa avui.
Què ve ara de veritat (En curs)
Amb les fases 3 i 4 tancades per mesura, la feina que ve no és una fase del motor. El motor està acabat per a la càrrega amb què es va construir; el que queda és posar-lo sota aquesta càrrega, més tres peces de la seva superfície que són absències deliberades i amb nom, no descuits.
Sota l'edge de quota. Un fitxer per inquilí, amb la configuració que van fixar les mesures: pàgines de 512 B a micro, 2 KB a starter, 4 KB a pro i enterprise; memòria cau de 4 pàgines; Sync::Commit; i un topall de pàgines per tier. La mida de pàgina no es pot canviar en un fitxer existent, així que un node que puja de tier conserva la geometria amb què es va crear si el reaprovisionament no recrea la base.
Una reconstrucció d'índex explícita. Avui un desajust de versió és sempre un error, i a propòsit: reconstruir implica rellegir i reescriure un espai de claus sencer, disparat pel fet d'obrir la base. El que falta és el verb que el cridant invoca a consciència.
L'esborrat de rang sobre espais de claus indexats. Avui es rebutja, perquè la propietat que fa ràpid l'esborrat de rang — que no llegeix mai les fulles — és la mateixa que fa impossible saber quines entrades d'índex retirar. La via existeix sobre el paper i necessita el seu propi disseny, perquè una declaració falsa corromp un índex en silenci.
La compactació. reclaim_tail retorna al sistema de fitxers la cua lliure del fitxer; no baixa les pàgines vives. Un inquilí que baixa de tier de manera permanent recupera avui la seva cua. Un les pàgines vives del qual són a dalt, no.
Cap de les tres peces del motor té data. Estan escrites perquè l'absència es llegeixi com una decisió amb un motiu al darrere, que és l'únic tipus d'absència al voltant de la qual es pot planificar.
Xifres per fase, node pro
| Fase | Disc | Amplificació d’escriptura | RAM per base |
|---|---|---|---|
| 1 — nucli (mesurat) | 6,3 MB | 1,71× | 19,7 KB |
| 2 — RAM i CPU (mesurat) | 6,3 MB | 1,10× amb lots més grans | 19,7 KB |
| 3 — segments | 40 MB | ~1,0× | ~34 KB |
| 4 — columnar | ~15 MB | ~1,0× | ~34 KB |
Les dues primeres files estan mesurades; les dues últimes són el que haurien entregat les fases 3 i 4, i són la raó que no se'n construeixi cap. El disc és l'estat estacionari d'un inquilí real al llarg de 30 dies simulats, no un càlcul — per això la fase 1 marca 6,3 MB i no els 46 MB que esperava el disseny. Aquest buit, trobat mesurant, és el que va deixar sense sentit les dues últimes fases.
Un servidor amb 4.500 nodes micro o starter i 500 nodes pro: uns 640 MB de RAM segons ho projectava el disseny, uns 61 MB amb totes les bases obertes a la RAM que aquest motor costa de veritat, i uns 12 MB si el 95% estan inactives i tancades.