„Această lucrare prezintă proiectarea unui SGBD relațional optimizat pentru citire, care contrastează puternic cu majoritatea sistemelor actuale, optimizate pentru scriere.”Michael Stonebraker et al. · C-Store: A Column-oriented DBMS · 2005 · C-Store: A Column-oriented DBMS, VLDB 2005 — prima propoziție a rezumatului
Coloanele comprimă bine fiindcă vecinii seamănă; rândurile nu.
Trei idei explică aproape tot din bazele de date analitice moderne. Prima: stocarea pe coloane. O interogare care atinge trei coloane din cincizeci citește 6% din octeți, nu 100%. A doua: compresia. Într-o coloană, vecinii seamănă — aceeași țară de o mie de ori, date crescătoare, sume din același interval — deci dicționar, run-length și delta comprimă de zece ori, iar motorul poate lucra adesea direct pe datele comprimate. A treia: execuția vectorizată, în loturi de mii de valori, nu tuplu cu tuplu, ca procesorul să nu aștepte memoria. Peste ele stau două decizii de arhitectură. MPP (procesare masiv paralelă): datele sunt partiționate pe noduri, fiecare scanează partea lui, iar join-urile și agregările cer redistribuire (shuffle) — partea scumpă. Separarea stocare–calcul: datele stau pe stocare de obiecte, ieftină și durabilă, iar calculul se pornește la cerere și se scalează separat; prețul e latența la rece și cache-ul local. Micro-partițiile poartă min/max per bloc, deci un filtru pe dată sare peste blocurile care nu-l pot conține. Ce nu merge bine pe columnar: scrieri mici și dese — se încarcă în loturi.
Cardul explică de ce columnarul citește puțin. Pasul următor: aceleași trei idei schimbă modul în care gândești interogarea, nu doar motorul. Ordinea coloanelor în filtru contează mai puțin decât care coloane apar deloc. O interogare care cere patru coloane când îi trebuie două plătește de patru ori la citire, chiar și comprimat. Iar compresia nu e doar spațiu: un dicționar transformă comparații pe șiruri lungi în comparații pe numere mici, deci filtrele devin mai rapide, nu doar mai mici. Exemplu: dacă raportul tău folosește doar lună și țară, nu scrie SELECT cu stea din reflex — numește exact coloanele. Următorul pas: ce se întâmplă când datele tocmai au sosit și nu pot aștepta un lot.
De ce contează Cine înțelege de ce columnarul e rapid scrie interogări care filtrează pe coloanele partiționate și evită să insereze rând cu rând într-un motor analitic.