Klasične SQL baze podataka predstavljaju standardno sredstvo za skladištenje informacija koje prikuplja ili generiše aplikativni softver. Da li ćemo se opredeliti za besplatnu, brzu „igračku“ kakva je MySQL, za skupog ali svemoćnog diva kao što je Oracle ili za nešto između, zavisi od konkretnih okolnosti i potreba. Skloni smo da kažemo da baze podataka predstavljaju ekvivalent za ljudsko pamćenje ali je ovo poređenje samo približno tačno.
Vrste skladištenja podataka
| (kliknite za veću sliku) |
U klasičnim bazama podataka sve informacije jednako su važne: uplata za „Infostan“ od pre deset godina zauzimaće identičan prostor u bazi kao i ona koja je napravljena juče. Teoretski gledano, baze podataka imaju neograničen kapacitet, a angažovanost hardverskih resursa raste linearno sa količinom uskladištenih informacija. Ljudsko pamćenje, međutim, ima ograničeni kapacitet pri čemu se neprekidno vrši agregacija podataka: nove informacije potiskuju one stare. Stare informacije ne nestaju trenutno iz sećanja – pre toga se zamenjuju sumarnim utiscima.
Postoje informacije kod kojih agregacija nije dozvoljena. Ako imate račun u banci, verovatno očekujete da u svakom trenutku možete da dobijete detaljan izveštaj o svim uplatama i isplatama, počevši od trenutka kada ste otvorili račun. Međutim, postoje informacije kod kojih je agregacija podataka poželjna. Pretpostavimo, recimo, da ste Internet provajder koji ima aplikaciju koja kontroliše koliko vam je ulaznih telefonskih linija zauzeto. Šta ćete uraditi sa tako sakupljenim podacima?
Prva ideja je da ih smestite u klasičnu bazu podataka. Ovo je pravolinijsko rešenje, jednostavno za implementaciju. Iz SQL baze možete da sastavite vrlo lepe statistike i nacrtate još lepše grafikone. Muka je samo što posle izvesnog vremena vaša baza počinje nekontrolisano da raste. Ako ste veliki Internet provajder, za nekoliko godina imaćete na milione ovakvih zapisa.
Round Robin Database
| (kliknite za veću sliku) |
Šta raditi sa zapisima koji vam više ne trebaju? Oni od prošle godine nemaju neposredan komercijalan značaj: grafikon je odavno nacrtan a faktura poslata klijentu. Prvo što vam pada na pamet je da obrišete ove zapise – tako će baza podataka ostati „podnošljivo“ velika. Međutim, ovim se odričete izvora informacija za neke važne poslovne odluke u budućnosti. Sličan je i problem sa zauzećem ulaznih linija: ne interesuje vas koliko je ljudi bilo na vezi 1. janura 2002. u 12:35, ali biste sigurno hteli da uporedite koliko je bilo prosečno zauzeće vaših ulaznih linija 1. januara 2003. u odnosu na 1. januar 2002. Drugim rečima, treba vam nešto što vrši agregaciju podataka tako što više „zastarelih“ informacija zamenjuje nekom statističkom (najčešće prosečnom) vrednošću koja se odnosi na kumulativni vremenski period.
To što vama treba zove se Round Robin Database (RRD). Ovakve baze podataka čuvaju najsvežije informacije u svom izvornom obliku, dok se one starije brišu i zamenjuju svojim agregiranim ekvivalentom. Što su podaci stariji, stepen agregacije je veći. Kada podatak sasvim zastari, on biva potpuno izgubljen. Agregacija je osmišljena tako da jednom kreiran RRD fajl ima fiksnu veličinu, ma koliko ga puta ažurirali.
Kada potražite Web stranice na kojima se govori o RRD konceptu, prvi link na koji naletite je RRDTool (www.rrdtool.org ), bez konkurencije najbolja alatka za efikasno i brzo manipulisanje RRD bazama. RRDTool je napisao Tobias Oetiker, simpatičan momak koji svoj softver daje na besplatno korišćenje pod liberalnom GNU GPL licencom. RRDTool je napisan u C-u i distribuira se isključivo u izvornom kodu. Kompilacija za Linux/Unix platforme je pravolinijska i bezbolna, dok je za Microsoft platforme nešto komplikovanija. Jednom kompajliran RRDTool je kompletan set alatki koje se, tipično za Unix pokreću iz komandne linije. To znači da ćete RRDTool moći da koristite iz svojih shell skriptova ili iz C koda, ali su tu i biblioteke za Perl, PHP, Tcl i Javu. Koliko je RRDTool kvalitetan i popularan neka ilustruje podatak da je Tobi do sada od svojih „obožavalaca“ dobio oko 1.000 muzičkih diskova, a da se RRDTool pominje na oko 95.000 Internet sajtova.
RRDTool na delu
Vratimo se primeru sa zauzećem ulaznih linija i kreirajmo RRD fajl dialin.rrd u koji ćemo smeštati broj zauzetih ulaznih linija tokom vremena (jednu izmerenu vrednost nazvaćemo sempl-om). Za ovaj problem odgovarajuća RRDTool komanda ima sledeći oblik:
(1) rrdtool create dialin.rrd
(2) —step 300
(3) DS:busy:GAUGE:600:0:U
(4) RRA:AVERAGE:0.5:1:600
(5) RRA:AVERAGE:0.5:6:700
(6) RRA:AVERAGE:0.5:24:775
(7) RRA:AVERAGE:0.5:288:797
| (kliknite za veću sliku) |
Izgleda komplikovano, ali zapravo nije. U liniji (1) kažemo da kreiramo RRD fajl dialin.rrd. Zatim je neophodno da u liniji (2) definišemo dužinu osnovnog vremenskog intervala koji će RRDTool iskoristiti za svoje interne kalkulacije. Ova vrednost obično odgovara dužini vremenskog intervala između dva sempla; u našem slučaju aplikacija generiše novi sempl na svakih pet minuta (300 sekundi). Linija (3) definiše izvor podataka (datasource, DS); daćemo mu ime busy, pošto označava broj zauzetih linija. U jedan RRD fajl možete da upisujete podatke iz više izvora, a svaki izvor podataka ima svoj „tip“; apsolutne veličine kao što su temperatura ili naš broj zauzetih linija označavaju se kao GAUGE. RRDTool podržava još tri tipa podataka: COUNTER (tip podatka za brojače koji se premotavaju na nulu nakon dostignute maksimalne vrednosti), DERIVE (za podatke kod kojih je bitna brzina promene) i ABSOLUTE (za podatke kod kojih se brojač premotava na nulu nakon svake očitane vrednosti).
Može se desiti da aplikacija koja meri zauzeće ulaznih linija „crkne“ i da zato niste u stanju da ažurirate RRD fajl u nekom periodu. Ako je taj period duži od zadatog maksimuma, RRDTool će na grafikonima napraviti prekid smatrajući da nema dovoljno podataka. Neka maksimalan dozvoljeni interval između dva sempla (tzv. heartbeat) bude 10 minuta (600 sekundi). I na kraju, RRDTool-u treba reći u kom opsegu se kreću dozvoljene vrednosti za busy. Broj zauzetih linija nije manji od nule, dok maksimalnu vrednost možemo da ostavimo i nedefinisanom (U = unknown).
| (kliknite za veću sliku) |
Poslednje četiri linije (4-7) označavaju način na koji se vrši agregacija podataka. RRA je skraćenica za Round Robin Archive. Fizički, ona predstavlja cirkularni niz numeričkih vrednosti. AVERAGE označava da se agregacija podataka vrši uprosečavanjem – prilikom agregacije, određen broj semplova zameni se prosečnom (AVERAGE) vrednošću. Na raspolaganju su i drugi metodi agregacije, MAX, MIN i LAST, koji određen broj semplova zamenjuju, respektivno, njihovom maksimalnom, minimalnom ili poslednjom registrovanom vrednošću. Vrednost 0.5 je tzv. X-files faktor koji je objašnjen u pratećoj dokumentaciji.
Parametri agregacije nalaze se na kraju RRA direktiva, u obliku dva broja odvojena dvotačkom (X:Y). Svaka arhiva vrši agregaciju (uprosečavanje) X uzastopnih semplova i tako dobijenu vrednost smešta u niz maksimalne dužine Y. Pošto semplovi stižu na 5 minuta, kalkulacija pokazuje da kreiramo četiri arhive. Prva čuva petominutne proseke nešto duže od dva dana (1×600×5 minuta). Druga arhiva čuva polučasovne proseke (6×5 minuta), nešto duže od dva meseca (6×700×5 min); treća arhiva čuva dvočasovne proseke (24×5 minuta) par meseci (24×775×5 minuta). Četvrta arhiva oko dve godine čuva dnevne proseke (288×5 min).
Ažuriranje RRD arhive
| (kliknite za veću sliku) |
Kreiranje RRD arhive je najteži deo posla, pošto traži malo strpljenja i kalkulator. Za utehu, jednom formiran RRD fajl služiće vas mnoge godine, a da ne poraste ni za bajt. Vodite računa o jednoj „nezgodnoj“ osobini RRD fajlova: rekonfiguracija parametara unetih tokom kreiranja je komplikovana i rizična.
Podaci se u RRD fajl upisuju vrlo jednostavno. Pretpostavimo da smo 1. marta 2003. u 12:05 imali 25 zauzetih ulaznih linija. Za definisanje vremenskog trenutka RRDTool koristi Unix timestamp (broj sekundi proteklih od 1. januara 1970. godine). U ovom primeru on iznosi 1046516700, a odgovarajuća komanda će biti rrdtool update dialin.rrd 1046516700:25. Pošto svaki podatak unet u RRD fajl pokreće ireverzibilni proces agregacije, podaci se moraju unositi sa rastućim timestamp-om.
Pravu snagu RRDTool pokazuje kada na red dođe iscrtavanje grafikona. Komanda za crtanje grafikona ima nebrojene parametre ali ćemo se ovde ograničiti na osnovne opcije koje će nam biti dovoljne da generišemo grafikon za poslednja 24 časa (pogledajte listing 1 i sliku 1). Prve četiri linije definišu naziv generisane slike, širinu i visinu grafikona, vertikalnu labelu i naslov. U liniji (5) definišemo šta treba da se iscrta na dijagramu i na koji način. DEF direktiva deklariše simbol busyGraph koji predstavlja prosečan (AVERAGE) broj zauzetih (busy) linija iz fajla dialin.rrd. Direktiva AREA u liniji (6) generiše ispunjeni dijagram na osnovu vrednosti simbola busyGraph. Dijagram će biti ispunjen crvenom bojom (RGB kod #FF0000) sa legendom (busy) koja će biti desno uravnata ( ). Poslednje četiri linije (7-10) ispisuju neke značajne informacije (maksimalno, minimalno i prosečno zauzeće) korišćenjem GPRINT i COMMENT direktive. S obzirom na to da u graph komandi nigde nismo definisali vremenski interval za koji se dijagram generiše, RRDTool će standardno pokriti poslednja 24h.
| (kliknite za veću sliku) |
Gornja komanda demonstrira samo delić kreativnih potencijala graph komande. U jednoj grafičkoj naredbi možete deklarisati više ulaznih simbola iz više različitih RRD fajlova. Moguća je i dodatna aritmetička manipulacija nad DEF simbolima korišćenjem RPN notacije. Vaš zbirni grafikon za tekući dan mogao bi da izgleda kao na slici 2. S obzirom na to da su u pitanju najsvežiji podaci, dijagram je nacrtan sa maksimalno mogućom rezolucijom. Ako se transliramo dva dana u prošlost i generišemo dnevni dijagram sa istim parametrima, videćemo da je agregacija učinila svoje, i da dijagram ima uočljive stepenice kao na slici 3. Ako se vratimo još nedelju dana unazad, stepenice su još šire.
Dobar izbor
| (kliknite za veću sliku) |
Kad god ste suočeni sa kontinuiranim prilivom ogromnog broja numeričkih podataka, čija „upotrebna vrednost“ opada tokom vremena, razmislite o tome da savladate osnove korišćenja RRDTool-a. Kad se jednom budete uverili u to da se milioni semplova mogu neprekidno upisivati u fajl od stotinak kilobajta, a da u njemu uvek imate praktično sve potrebne informacije, i vi ćete Tobiju poslati CD na poklon...
|