„Banda e moartă, discul e bandă, flash-ul e disc, localitatea în RAM e rege.”Jim Gray · Tape is Dead, Disk is Tape, Flash is Disk, RAM Locality is King · 2006 · Prezentare la Storage Guru Gong Show, Redmond, 10 decembrie 2006 (reluată la CIDR 2007)
Fiecare treaptă în jos costă un factor de o sută, și vărsarea pe ea nu dă nicio eroare.
Cifrele lui Gray sunt tot valabile ca ordine de mărime: RAM în nanosecunde, SSD în zeci de microsecunde, disc rotativ în milisecunde, stocare de obiecte în zeci de milisecunde plus un cost per cerere. Între trepte sunt factori de sută. „Discul e bandă” înseamnă că discul mai merită doar pentru citiri secvențiale — de aici formatul columnar, compresia și așezarea sortată din lecția 25: transformă accesul aleatoriu în parcurgere. „Localitatea în RAM e rege” înseamnă că interogarea rapidă e cea al cărei set de lucru încape în memorie: tabela hash a join-ului, sortarea, agregarea. În clipa în care nu mai încape, se varsă pe treapta următoare și încetinește de zece până la o sută de ori, fără să dea vreo eroare. Depozitele cloud fac ierarhia explicită: stocarea de obiecte e baza, ieftină și nelimitată; nodurile de calcul țin un cache pe SSD local; rezultatele recente stau într-un cache de rezultate. Dimensionarea nu e „câtă memorie are serverul”, ci „câtă memorie primește fiecare slot de interogare” — zece interogări paralele împart același RAM. Compresia columnară e, în termenii lui Gray, cel mai ieftin mod de a urca o treaptă: aceleași date, de cinci ori mai mici, încap acolo unde înainte nu încăpeau.
Partea tulburătoare a ierarhiei e că ea nu te avertizează. Când o interogare se varsă din memorie pe SSD, sistemul nu afișează nicio eroare; pur și simplu răspunde mai încet, de o sută de ori mai încet. Gândește-te la o cafea: dacă o lași zece minute, nu e stricată, doar rece. La fel, datele de pe treapta de jos nu sunt pierdute, doar departe. De aceea, diagnosticarea nu începe cu loguri, ci cu o întrebare simplă: ce cantitate de date a atins interogarea asta azi, față de ieri? Dacă răspunsul a trecut pragul memoriei, ai găsit cauza. Următorul pas e să vezi ce se poate face ca setul acela să încapă din nou sus.
Dacă setul de lucru nu încape, ai două pârghii: îl micșorezi sau îi dai mai mult loc. Compresia columnară e prima: aceleași date, de cinci ori mai mici, urcă o treaptă întreagă fără să le schimbi nimic. A doua e mai puțin evidentă: memoria unui server nu e a tuturor. Zece interogări paralele împart același RAM, deci fiecăreia îi revine o zecime. E ca o bibliotecă cu un singur birou: dacă vin zece cititori deodată, fiecare primește doar un colț de masă, iar restul cărților rămân pe raft. De aceea, dimensionarea nu întreabă câtă memorie are mașina, ci câtă primește fiecare interogare. Dar ce alegi întâi, când nu poți face niciuna din cele două?
De ce contează O interogare care „a mers ieri” și azi durează de zece ori mai mult n-a devenit mai grea; setul ei de lucru a coborât o treaptă în ierarhie.