📖 Analitika u realnom vremenu
Standardni indeksi (B-Tree) su dizajnirani za brzo pronalaženje pojedinačnih redova (OLTP). Međutim, kada želite sumirati prodaju u zadnjih 5 godina preko 100 miliona redova, B-Tree postaje prespor. Columnstore Indeksi spremaju podatke po kolonama, a ne po redovima, omogućavajući kompresiju i brzinu čitanja koju je ranije bilo nemoguće zamisliti.
🏗️ Columnstore Internals: Kako je moguće 100x ubrzanje?
1. Columnar Storage vs Row Storage
U row-store tabeli, sve kolone jednog reda su fizički jedna pored druge. Čak i ako tražite samo
Suma,
SQL Server mora pročitati cijeli red sa diska u RAM.
U column-store, svaka kolona se čuva odvojeno. Ako upit traži jednu kolonu, SQL Server čita
SAMO tu kolonu.
2. Row Groups i Segments
- Row Group: Set od cca 1 milion redova koji se kompresuju zajedno.
- Segment: Fizička jedinica skladištenja za JEDNU kolonu unutar Row Groupa.
⚡ Batch Mode Execution
Columnstore ne obrađuje red jedan po jedan. On koristi Batch Mode gdje CPU obrađuje cca 900 redova odjednom u svojim registrima (SIMD instrukcije). Ovo drastično smanjuje CPU load.
🔄 Delta Store: Rješavanje problema izmjena
Columnstore segmenti su read-only i visoko kompresovani. Šta se dešava kada uradite
INSERT?
- Novi podaci prvo idu u Delta Store (privremeni B-Tree red-store).
- Kada Delta Store dostigne ~1 milion redova, proces zvan Tuple Mover ga kompresuje u novi Columnstore Segment.
-- Pretvaranje velike tabele u analitičku zvijer
CREATE CLUSTERED COLUMNSTORE INDEX CCI_EconomicData
ON Stats.EconomicData;
GO
-- Od ovog trenutka, tabela više nema "redove" na disku, samo kolumnarne segmente.
💎 Real-Time Operational Analytics (Hybrid)
Ovo je "sveti gral" baza podataka. Na transakcionu tabelu (B-Tree) dodajemo Non-clustered Columnstore Index (NCCI).
- Aplikacija nastavlja pisati u B-Tree munjevitom brzinom.
- Reporting alat čita iz NCC-a istu tu tabelu munjevitom brzinom.
- Nema više čekanja na ETL procese (prebacivanje u Data Warehouse).
-- Indeksiramo samo objavljene izvještaje za reporting,
-- ostavljajući draft izvještaje brzim
CREATE NONCLUSTERED COLUMNSTORE INDEX NCCI_HistoricalAnalytics
ON Stats.Reports (ReportID, CreatedDate, DepartmentID)
INCLUDE (ReportType)
WHERE Status = 'Published';
GO
🎯 Praktična Vježba: Row vs Column Brzina
Zadatak: Million Row Challenge
Uporedićemo performanse sumiranja na milionima redova.
Zadatak 1: Kreirajte tabelu TestStore i napunite je sa 5 miliona
redova nasumičnih podataka.
Zadatak 2: Izmjerite vrijeme za SUM(Amount) bez Columnstore
indeksa.
Zadatak 3: Kreirajte Clustered Columnstore indeks i ponovite mjerenje.
SET STATISTICS TIME ON;
SET STATISTICS IO ON;
-- Upit nad row-store (očekujte puno IO čitanja)
SELECT SUM(Amount), AVG(Quantity) FROM BigData;
-- Kreiranje magije
CREATE CLUSTERED COLUMNSTORE INDEX CCI_Magic ON BigData;
-- Upit nad column-store (očekujte skoro nula IO i trenutačan rezultat)
SELECT SUM(Amount), AVG(Quantity) FROM BigData;
SET STATISTICS TIME OFF;
SET STATISTICS IO OFF;
✅ Zaključak
Columnstore tehnologija je promijenila SQL Server iz transakcionog engine-a u analitičku platformu svjetske klase:
- ✅ 10x kompresija podataka u prosjeku.
- ✅ Batch Mode koristi punu snagu modernih procesora.
- ✅ NCCI omogućava analitiku nad živim podacima bez usporavanja aplikacije.
📚 Sljedeća Lekcija
U Lekciji 2.4 se vraćamo pisanju koda. Naučićete Window Functions i CTE, alate koji će vaše T-SQL upite učiniti kraćim, čitljivijim i mnogo moćnijim.