Za´padoˇceska´ univerzita v Plzni Fakulta aplikovany´ch vˇed Katedra informatiky a vy´poˇcetn´ı techniky
Diplomov´ a pr´ ace Spr´ avce datab´ az´ı pro vybran´ y NoSQL datab´ azov´ y syst´ em
Plzeˇ n 2014
Barbora Staffov´a
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem diplomovou pr´aci vypracovala samostatnˇe a v´ yhradnˇe s pouˇzit´ım citovan´ ych pramen˚ u. V Plzni dne 11. kvˇetna 2014 Barbora Staffov´a
Abstract This thesis deals with the creation of database manager for NoSQL database system Redis. In the first part of the document the basic database terminology is described. Then the current NoSQL database systems are introduced and compared with relational database systems. In the second part there is presented the analysis of solutions for the resulting program NoSqlManager. The next part describes the creation of the application itself and its functions. The applicability of the final database manager was tested in a distributed environment. Tato diplomov´a pr´ace se zab´ yv´a tvorbou spr´avce pro NoSQL datab´azov´ y syst´em Redis. V prvn´ı ˇca´sti dokumentu jsou vysvˇetleny z´akladn´ı pojmy o datab´az´ıch. D´ale jsou pˇredstaveny souˇcasn´e NoSQL datab´azov´e syst´emy a jejich srovn´an´ı s relaˇcn´ımi datab´azov´ ymi syst´emy. V druh´e ˇc´asti je pops´ana anal´ yza ˇreˇsen´ı pro v´ ysledn´ y program NoSqlManager. Dalˇs´ı ˇca´st popisuje vytvoˇren´ı samotn´eho spr´avce datab´aze a jeho funkce. Pouˇzitelnost v´ ysledn´eho spr´avce datab´aze byla otestov´ana v distribuovan´em prostˇred´ı.
Obsah ´ 1 Uvod
1
2 Z´ akladn´ı pojmy a teorie 2.1 Big data . . . . . . . . . . . . . . . . ˇ 2.2 SRBD . . . . . . . . . . . . . . . . . . 2.3 Datab´azov´e modely . . . . . . . . . . 2.3.1 Otevˇren´e soubory . . . . . . . 2.3.2 Hierarchick´ y datab´azov´ y model 2.3.3 S´ıt’ov´ y datab´azov´ y model . . . 2.3.4 Relaˇcn´ı datab´azov´ y model . . . 2.4 ACID . . . . . . . . . . . . . . . . . . 3 Relaˇ cn´ı datab´ aze 3.1 Popis . . . . . . . . . 3.2 Integritn´ı omezen´ı . . 3.3 Norm´aln´ı formy . . . 3.4 SQL . . . . . . . . . 3.5 Hlavn´ı pˇredstavitel´e
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
4 NoSQL datab´ aze 4.1 Popis . . . . . . . . . . . . . . . . 4.2 Base . . . . . . . . . . . . . . . . . 4.3 CAP teor´em . . . . . . . . . . . . 4.4 Map Reduce . . . . . . . . . . . . 4.5 Distribuce dat . . . . . . . . . . . . ˇ alovatelnost . . . . . . . . . . . 4.6 Sk´ 4.7 Dotazov´an´ı . . . . . . . . . . . . . 4.8 Datov´ y model . . . . . . . . . . . 4.8.1 Datab´aze typu kl´ıˇc/hodnota 4.8.2 Dokumentov´e datab´aze . . 4.8.3 Sloupcov´e datab´aze . . . .
. . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . .
. . . . . . . .
. . . . .
. . . . . . . . . . .
. . . . . . . .
2 2 3 4 4 5 6 7 7
. . . . .
9 9 9 10 11 12
. . . . . . . . . . .
15 15 16 17 18 20 21 21 22 23 24 26
OBSAH
OBSAH
4.8.4 Grafov´e datab´aze . . . . . . . . . . . . . . . . . . . . . . . . 28 4.9 Riak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 4.10 Redis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 5 Porovn´ an´ı NoSQL datab´ az´ı s relaˇ cn´ımi datab´ azemi
37
6 Anal´ yza probl´ emu 6.1 Typ NoSQL datab´aze . . . . . . . . . . . 6.2 Datab´azov´ y syst´em pro key/value datab´azi 6.3 Webov´e vs. desktopov´e ˇreˇsen´ı . . . . . . . 6.4 Existuj´ıc´ı ˇreˇsen´ı pro Redis . . . . . . . . . 6.5 Z´akladn´ı funkce spr´avce . . . . . . . . . .
. . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
39 39 39 41 42 43
7 Realizace spr´ avce datab´ aze 7.1 N´avrh spr´avce datab´aze . . . . 7.1.1 Programovac´ı jazyk . . 7.1.2 Rozvrˇzen´ı programu . . 7.1.3 GUI . . . . . . . . . . . 7.2 V´ yvojov´e n´astroje . . . . . . . . 7.3 Pˇripojen´ı k datab´azi . . . . . . 7.4 Konzole . . . . . . . . . . . . . 7.5 Import a export JSON soubor˚ u 7.6 Ukl´ad´an´ı konfigurace pˇripojen´ı
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
44 44 44 45 46 49 50 53 56 58
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
8 Testov´ an´ı 61 8.1 Testovac´ı sc´en´aˇre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 9 Z´ avˇ er
65
A Uˇ zivatelsk´ a pˇ r´ıruˇ cka
73
B Graf z´ avislost´ı
82
C Obsah DVD
83
iv
Seznam obr´ azk˚ u 2.1 2.2 2.3 2.4
Big data a 3V. [Lac12] . . . . . . . . . . . . . . . . . . . . . . . . . ˇ B´aze dat a syst´em ˇr´ızen´ı b´aze dat (SRBD) tvoˇr´ıc´ı datab´azov´ y syst´em. [Sch88] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hierarchick´ y model datab´aze. . . . . . . . . . . . . . . . . . . . . . S´ıt’ov´ y model datab´aze. . . . . . . . . . . . . . . . . . . . . . . . .
.
3
. . .
4 5 6
3.1 3.2
Norm´aln´ı formy. [Kul08] . . . . . . . . . . . . . . . . . . . . . . . . . 11 Poˇcet nainstalovan´ ych a nasazen´ ych datab´azov´ ych syst´em˚ u podle spoleˇcnosti Gartner v roce 2008.[MaS08] . . . . . . . . . . . . . . . . . . 12
4.1 4.2 4.3 4.4 4.5 4.6
CAP teor´em. [Ver13] . . . . . . . . . . . . . . MapReduce. [Gro09] . . . . . . . . . . . . . . Datov´e modely NoSQL. [Kat12] . . . . . . . . Datov´ y model v datab´azi Cassandra. [Mam11] Uk´azkov´ y model grafov´e datab´aze. [Pok12] . . Riak ring. [Ria11] . . . . . . . . . . . . . . . .
5.1
Uk´azka pouˇzit´ı nˇekolika datab´azov´ ych syst´em˚ u v jednom projektu. [Sad12] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
7.1 7.2
Hlavn´ı okno programu NoSqlManager. . . . . . . . . . . . . . . . . . 47 Konzole programu NoSqlManager. . . . . . . . . . . . . . . . . . . . . 48
A.1 A.2 A.3 A.4 A.5 A.6 A.7 A.8 A.9
Uk´azka hlavn´ıho okna programu NoSqlManager. . . . . . . . . Okno pro pˇrid´an´ı a editaci pˇripojen´ı. . . . . . . . . . . . . . . Uk´azka stromov´e struktury seznamu pro pˇripojen´ı. . . . . . . Uk´azka nab´ıdky nad zvolen´ ym serverem. . . . . . . . . . . . . Uk´azka okna s informacemi o serveru. . . . . . . . . . . . . . . Konzolov´e okno. . . . . . . . . . . . . . . . . . . . . . . . . . . Uk´azka s nˇekolika z´aloˇzkami. . . . . . . . . . . . . . . . . . . . Uk´azka okna pro pˇrid´an´ı nov´eho kl´ıˇce do datab´aze. . . . . . . Uk´azka okna pro pˇrid´av´an´ı a u ´pravu hodnot kl´ıˇce typu Hash.
v
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
18 19 23 26 28 31
75 76 76 77 77 78 79 79 80
´ ˚ SEZNAM OBRAZK U
´ ˚ SEZNAM OBRAZK U
A.10 Uk´azka okna pro zobrazen´ı n´ahledu kl´ıˇce. . . . . . . . . . . . . . . . . 81 B.1 Graf z´avislost´ı jednotliv´ ych jmenn´ ych prostor˚ u vygenerovan´ y Visual Studiem. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
vi
´ 1 Uvod V dneˇsn´ı dobˇe d´ıky n´ar˚ ustu mobiln´ıch a elektronick´ ych zaˇr´ızen´ı stoup´a i mnoˇzstv´ı uloˇzen´ ych dat a n´aroky na rychlost jejich zpracov´an´ı. St´ale ˇcastˇeji se v re´aln´e praxi objevuje situace, kdy dnes hojnˇe pouˇz´ıvan´e relaˇcn´ı datab´aze pˇrest´avaj´ı dostaˇcovat sv´ ym datov´ ym modelem. D´ıky tomu se na sc´enˇe objevily NoSQL datab´aze, kter´e jsou schopny zpracovat velk´e objemy dat (tzv. Big data) r˚ uzn´ ych struktur. Nejedn´a se vˇsak o n´ahradu st´avaj´ıc´ıch relaˇcn´ıch datab´az´ı. Obˇe tato ˇreˇsen´ı maj´ı st´ale sv´a specifick´a uplatnˇen´ı. Relaˇcn´ı datab´aze vych´azej´ı z klasick´eho pojet´ı datov´ ych struktur, tzn., ˇze vazby a struktura dat je pˇresnˇe specifikovan´a. Na rozd´ıl od toho NoSQL datab´aze nemaj´ı pˇresnˇe specifikovanou strukturu. V´ yvoj NoSQL datab´az´ı ˇsel nˇekolika smˇery, kter´e umoˇznily vzniku r˚ uzn´ ych typ˚ u datab´az´ı. Tyto smˇery jsou reprezentov´any datab´azemi key/value, sloupcov´ ymi, dokumentov´ ymi a grafov´ ymi datab´azemi. NoSQL datab´aze jsou hojnˇe vyuˇz´ıv´any pˇredevˇs´ım u soci´aln´ıch s´ıt´ı, jako je Facebook nebo Twitter, kde se kaˇzd´ ym dnem enormnˇe zvyˇsuje poˇcet uchov´avan´ ych dat. C´ılem t´eto diplomov´e pr´ace je zanalyzovat souˇcasn´e druhy NoSQL datab´azov´ ych syst´em˚ u, pˇriˇcemˇz v´ ysledn´e poznatky porovnat s relaˇcn´ımi datab´azov´ ymi syst´emy a v n´avaznosti na to vybrat vhodnou NoSQL datab´azi. V tomto pˇr´ıpadˇe byla zvolena na z´akladˇe anal´ yzy probl´emu datab´aze Redis, kter´a je typu key/value. Dalˇs´ım c´ılem bylo praktick´e vyuˇzit´ı zm´ınˇen´e datab´aze pro navrˇzen´ı spr´avce, kter´ y bude umoˇzn ˇovat uˇzivatelsky pˇr´ıjemnou pr´aci s daty uloˇzen´ ymi v uveden´e datab´azi a n´aslednˇe na to implementovat ˇreˇsen´ı s ohledem na poskytovan´a API (Application Programming Interface) syst´emu a v z´avˇeru pak v´ ysledn´eho spr´avce otestovat a zhodnotit. Diplomov´a pr´ace je rozdˇelena do kapitol. Prvn´ı kapitola se zab´ yv´a teoretick´ ym u ´vodem do problematiky datab´az´ı. V druh´e kapitole jsou podrobnˇe pops´any relaˇcn´ı datab´aze a jejich vlastnosti. V tˇret´ı kapitole je detailnˇe probr´ana problematika NoSQL datab´az´ı. Jsou zde uvedeny hlavn´ı pˇredstavitel´e jednotliv´ ych typ˚ u NoSQL datab´az´ı. Dalˇs´ı kapitola se zab´ yv´a porovn´an´ım relaˇcn´ıch a NoSQL datab´az´ı. Na to navazuj´ı kapitoly, v kter´ ych doch´az´ı k popisu realizace tvorby spr´avce NoSQL datab´aze. Na z´avˇer pr´ace je uvedena kapitola, kter´a zahrnuje v´ ysledky testov´an´ı napsan´eho spr´avce. V dodatku je pˇriloˇzena uˇzivatelsk´a dokumentace, graf z´avislost´ı jednotliv´ ych jmenn´ ych prostoru a popis obsahu pˇriloˇzen´eho DVD.
1
2 Z´akladn´ı pojmy a teorie V souˇcasnosti se hojnˇe pracuje s velk´ ymi objemy informac´ı, jejichˇz zpracov´an´ı a ukl´ad´an´ı se st´av´a v´ yznamnou ot´azkou pˇredevˇs´ım v oblasti informaˇcn´ıch technologi´ı. Informace vznikaj´ı zpracov´an´ım a strukturov´an´ım surov´ ych dat, kter´a d´avaj´ı urˇcit´emu jedinci nebo organizaci v´ yznam. [Con09] Organizovan´e soubory dat, kter´e se pouˇz´ıvaj´ı k modelov´an´ı r˚ uzn´ ych organizaˇcn´ıch struktur nebo proces˚ u, se naz´ yvaj´ı datab´aze. Datab´aze b´ yv´a definov´ana jako sebe popisuj´ıc´ı kolekce integrovan´ ych z´aznam˚ u. D´ıky sebe popisuj´ıc´ımu charakteru datab´aze je zajiˇstˇena nez´avislost dat. Tud´ıˇz zmˇenou struktur v datab´azi nejsou ovlivnˇeny existuj´ıc´ı datab´azov´e aplikace, pokud se jich zmˇena pˇr´ımo net´ yk´a. [Her06]
2.1
Big data
V posledn´ıch letech se d´ıky rozˇs´ıˇren´ı webu, mobiln´ıch aplikac´ıch a dalˇs´ıch nov´ ych technologi´ıch v´ yraznˇe zvˇetˇsilo mnoˇzstv´ı uloˇzen´ ych dat, kter´a jsou nestrukturovan´a a distribuovan´a. S t´ım pˇrich´az´ı i v´ yraz big data. Tento pojmem si lze pˇredstavit jako soubory dat, kter´e jsou tak rozs´ahl´e, ˇze se nedaj´ı spravovat, zachycovat a zpracov´avat norm´aln´ımi softwarov´ ymi prostˇredky v rozumn´em ˇcase. Velikost dat je ch´apana nejenom z hlediska objemu dat, ale tak´e z hlediska rychlosti jejich tvorby a pˇrenosu. Pro efektivn´ı pr´aci s big daty se vyˇzaduj´ı nov´e technologie, kter´e budou zpracov´avat ˇ data v pˇrijateln´em ˇcase. Casto se v souvislosti s big daty mluv´ı o trojrozmˇernosti velikosti a r˚ ustu dat, zn´am´e tak´e jako 3V, viz obr´azek 2.1. • Objem (volume) – pˇri provozu firem nar˚ ust´a mnoˇzstv´ı dat r˚ uzn´ ych typ˚ u exponenci´alnˇe. • Typ (variety) – big data jsou r˚ uzn´ ych typ˚ u, mimo obvykl´ ych strukturovan´ ych dat jsou zpracov´av´ana tak´e nestrukturovan´a data, napˇr´ıklad textov´e soubory, data ze senzor˚ u, video soubory a data z log˚ u. • Rychlost (velocity) – velk´a rychlost vznikaj´ıc´ıch dat a potˇreba jejich anal´ yzy v re´aln´em ˇcase.
2
ˇ SRBD
Z´akladn´ı pojmy a teorie
B´ yvaj´ı uv´adˇen´a i dalˇs´ı V“ jako vˇerohodnost (veracity) nebo variabilita (variability)1 . ” Ve v´ ysledku lze vˇsak shrnout big data tak, ˇze pˇrib´ yv´a mnoho r˚ uzn´ ych zaˇr´ızen´ı a syst´em˚ u, kde data vznikaj´ı. Tak´e roste mnoˇzstv´ı dat a zvyˇsuj´ı se n´aroky na jejich zpracov´an´ı. [Dol11]
Obr´azek 2.1: Big data a 3V. [Lac12]
2.2
ˇ SRBD
Pojmem datab´aze b´ yv´a ˇcasto zamˇen ˇov´an s datab´azov´ ym syst´em. Datab´azov´ y sysˇ t´em se skl´ad´a z b´aze dat, neboli datab´aze, a ze syst´emu ˇr´ızen´ı b´aze dat (SRBD, ˇ anglicky t´eˇz DBMS), viz obr´azek 2.2. SRBD je softwarov´e vybaven´ı, kter´e umoˇzn ˇuje ˇ uˇzivateli definovat, vytv´aˇret, udrˇzovat a ˇr´ıdit datab´azi. SRBD dovoluje uˇzivatel˚ um ˇ aktualizovat, vkl´adat, mazat a vyvol´avat data z datab´aze. Souˇc´ast´ı SRBD je tak´e moˇznost dotazov´an´ı na data pomoc´ı dotazovac´ıch jazyk˚ u jako je napˇr. SQL (Structured Query Language). [Con09] ˇ Pˇred vznikem SRBD se pro poˇc´ıtaˇce dod´avalo vˇseobecn´e programov´e vybaven´ı, ˇ kter´e mˇelo za u ´kol plnit nˇekter´e funkce SRBD. Jednalo se o syst´emy na ˇr´ızen´ı soubor˚ u ˇ (file management systems). Za krit´erium, kter´e rozliˇsuje SRBD od jin´ ych syst´em˚ u 1
http://www.adastra.cz/co-jsou-big-data
3
Z´akladn´ı pojmy a teorie
Datab´azov´e modely Databázový systém
Báze dat
SŘBD
ˇ Obr´azek 2.2: B´aze dat a syst´em ˇr´ızen´ı b´aze dat (SRBD) tvoˇr´ıc´ı datab´azov´ y syst´em. [Sch88] s podobnou funkcionalitou, se povaˇzuje to, zda si syst´em vede a obsahuje katalog dat, do kter´eho si ukl´ad´a strukturu soubor˚ u, s kter´ ymi pracuje. Takov´ato charakteristika ˇ SRBD umoˇzn ˇuje dos´ahnout nez´avislosti program˚ u na datech.[Sch88] ˇ Pokud je SRBD bez podpory zobrazov´an´ı dat na obrazovce poˇc´ıtaˇce ˇci v tiˇstˇen´e podobˇe, je oznaˇcov´ana jako datab´azov´ y stroj. Zobrazov´an´ı dat zajiˇst’uje uˇzivatelsk´a ˇ aplikace. Mezi nˇekter´e SRBD patˇr´ı napˇr. Oracle, MS SQL Server, Sybase, Informix nebo freeware programy mSQL, MySQL a PostgreSQL [Kos99].
2.3
Datab´ azov´ e modely
Syst´emy pro ˇr´ızen´ı b´aze dat lze rozdˇelit do nˇekolika typ˚ u, kter´e se oznaˇcuj´ı jako modely. Datab´azov´e modely urˇcuj´ı logickou strukturu datab´aze a tak´e jak´ ym zp˚ usobem budou data uloˇzena, organizov´ana a zpracov´ana.
2.3.1
Otevˇ ren´ e soubory
Obyˇcejn´e soubory operaˇcn´ıho syst´emu jsou oznaˇcov´any jako otevˇren´e soubory (flat files). To znamen´a, ˇze z´aznamy tˇechto soubor˚ u nenesou ˇza´dn´e doplˇ nuj´ıc´ı informace, kter´e by c´ılov´e aplikaci pˇred´avaly strukturu soubor˚ u nebo vztahy mezi z´aznamy.
4
Z´akladn´ı pojmy a teorie
Datab´azov´e modely
Informace o struktuˇre dat mus´ı b´ yt souˇca´st´ı aplikace, kter´a se souborem pracuje. Datab´azov´ y syst´em m´a, na rozd´ıl od operaˇcn´ıho syst´emu, o tˇechto souborech k dispozici metadata, d´ıky jimˇz m˚ uˇze prov´adˇet r˚ uzn´e pˇrevody mezi otevˇren´ ymi soubory ve fyzick´e vrstvˇe. Metadata, neboli data o datech, jsou v tomto pˇr´ıpadˇe pouˇzita k oznaˇcen´ı informac´ı, kter´e popisuj´ı, jak´a data jsou uloˇzena v datab´azi a vztahy mezi nimi. Otevˇren´e soubory zde byly jiˇz pˇred vznikem datab´az´ı. Prvn´ı datab´azov´e syst´emy se vyvinuly pr´avˇe z nich. [Opp06]
2.3.2
Hierarchick´ y datab´ azov´ y model
Hierarchick´ y model, kter´ y je zobrazen na obr´azku 2.3, je nejstarˇs´ı pouˇz´ıvan´ y model. Poprv´e byl pouˇzit v roce 1968 spoleˇcnost´ı IBM u syst´emu IMS. Z´akladem tohoto modelu je stromov´a struktura vych´azej´ıc´ı z jednoho koˇrene. Koˇren (jak je to ch´ap´ano v teorii grafu) je jedin´ y uzel, kter´ y nem´a rodiˇcovsk´ y uzel. Jednotliv´e uzly stromu jsou propojen´e do hierarchie rodiˇc-potomek, kde jeden rodiˇc m˚ uˇze m´ıt v´ıce potomk˚ u, ale kaˇzd´ y potomek m´a jen jednoho rodiˇce, neboli uzel vyˇsˇs´ı u ´rovnˇe se vztahuje k v´ıce uzl˚ um na niˇzˇs´ı u ´rovni. Pokud z uzlu nevych´az´ı dalˇs´ı vˇetev, je oznaˇcen jako list. V t´eto struktuˇre jsou dva druhy vztah˚ u mezi poloˇzkami, rodiˇcovsk´e a sourozeneck´e. Kromˇe listu m˚ uˇze m´ıt kaˇzd´ y uzel libovoln´ y poˇcet potomk˚ u. D´ıky tomu se v hierarchick´em modelu dobˇre definuj´ı vztahy 1:n, jeden ku mnoha. [Kal12] Vedení podniku
Zaměstnanec
Oddělení
Oddělení
Zaměstnanec
Zaměstnanec
Oddělení
Obr´azek 2.3: Hierarchick´ y model datab´aze.
Hierarchick´e datab´aze byly pouˇz´ıvan´e zejm´ena pro ukl´ad´an´ı dat v 70. letech na s´alov´ ych poˇc´ıtaˇc´ıch. V´ yhodou hierarchick´eho modelu byl pˇr´ım´ y a rychl´ y pˇr´ıstup k dat˚ um a tak´e moˇznost pˇrid´av´an´ı nov´ ych poloˇzek. Mezi nev´ yhody patˇr´ı sloˇzit´a 5
Z´akladn´ı pojmy a teorie
Datab´azov´e modely
spr´ava struktura datab´aze. Pˇri u ´pravˇe vztah˚ u rodiˇc-potomek se mus´ı sloˇzitˇe pˇredˇel´avat cel´a struktura. Nejvˇetˇs´ı nev´ yhodou je vˇsak tvorba vztah˚ u m:n, mnoha k mnoh´ ym. [Her06]
2.3.3
S´ıt’ov´ y datab´ azov´ y model
S´ıt’ov´a datab´aze byla vyvinuta jako moˇznost pro vyˇreˇsen´ı probl´em˚ u vznikaj´ıc´ıch u hierarchick´e datab´aze. Tento model umoˇzn ˇuje popisovat v datab´azi vztahy m:n, mnoha k mnoh´ ym. Struktura s´ıt’ov´e datab´aze je pops´ana pomoc´ı pojm˚ u uzel a mnoˇzinov´a struktura, kde uzel pˇredstavuje soubor z´aznam˚ u a mnoˇzinov´a struktura zastupuje a zˇrizuje vztah. Vztahy mezi daty jsou pojmenov´any, tud´ıˇz je v datab´azi moˇzn´ y pˇrechod z jednoho z´aznamu na jin´ y pˇres konkr´etn´ı relaci. Rozd´ıl oproti hierarchick´e konstrukci rodiˇc-potomek je takov´ y, ˇze jeden uzel je definovan´ y jako vlastn´ık a druh´ y jako ˇclen. D´ıky mnoˇzinov´e struktuˇre je podporov´an vztah 1:n. Vlastn´ık m˚ uˇze b´ yt v relaci k jednomu nebo v´ıce z´aznam˚ um v uzlu ˇclen. Jeden z´aznam v uzlu ˇclen je vˇsak ve vztahu pouze k jednomu z´aznamu v uzlu typu vlastn´ık. Z´aznam v uzlu typu ˇclen tak´e nem˚ uˇze existovat, pokud by nebyl ve vztahu k z´aznamu v odpov´ıdaj´ıc´ım uzlu typu vlastn´ık. Pˇr´ıklad s´ıt’ov´eho modelu je na obr´azku 2.4. [Her06] Univerzita Vede
Vede Vede
Fakulta Zaměstnává
Zaměstnává
Vyučující
Vyučuje
Fakulta
Vyučující
Fakulta
Zaměstnává
Vyučující
Vyučuje
Vyučuje
Student
Obr´azek 2.4: S´ıt’ov´ y model datab´aze. S´ıt’ov´ y model pˇrin´aˇs´ı pˇredevˇs´ım vyˇsˇs´ı flexibilitu, snadn´e pˇrid´av´an´ı nov´ ych z´a6
Z´akladn´ı pojmy a teorie
ACID
znam˚ u, omezen´ı nˇekter´ ych duplicitn´ıch z´aznam˚ u a rychl´e vyhled´av´an´ı dat. Pˇres nˇekter´a zlepˇsen´ı oproti hierarchick´emu modelu se s´ıt’ov´ y model setk´av´a s nutnost´ı spr´avn´eho n´avrhu prvotn´ı struktury datab´aze.
2.3.4
Relaˇ cn´ı datab´ azov´ y model
Roku 1969 zveˇrejnil Dr. E. F. Codd ˇcl´anek, kter´ y definoval model datab´az´ı zaloˇzen´ y na matematick´em pojmu relaˇcn´ıch mnoˇzin. Tento model se stal nejrozˇs´ıˇrenˇejˇs´ım modelem pouˇz´ıvan´ ym pˇri spr´avˇe datab´az´ı. Data se v relaˇcn´ıch datab´az´ıch ukl´adaj´ı ve vztaz´ıch, kter´e uˇzivatel´e vid´ı jako tabulky. Vztahy jsou sloˇzeny z tzv. n-tic (ˇra´dk˚ u) a atribut˚ u (sloupc˚ u). Kaˇzd´ y ˇra´dek je v tabulce identifikov´an sloupcem obsahuj´ıc´ı jedineˇcnou hodnotu. D´ıky tomu nemus´ı uˇzivatel, na rozd´ıl od hierarchick´eho a s´ıt’ov´eho modelu, zn´at pˇresn´e fyzick´e um´ıstˇen´ı z´aznamu, pokud s n´ım chce pracovat. V´ıce o relaˇcn´ıch datab´az´ıch je uvedeno v kapitole 3.
2.4
ACID
Zkratka ACID (Atomicity, Consistency, Isolation, Durability) oznaˇcuje ˇctyˇri z´akladn´ı vlastnosti, kter´e mus´ı splˇ novat transakce. Datab´azov´a transakce je soubor pˇr´ıkaz˚ u, kter´ y zjiˇst’uje pˇrevod z jednoho konzistentn´ıho stavu do druh´eho. Pokud se vyskytne chyba, mus´ı b´ yt moˇzn´e vr´atit celou operaci do p˚ uvodn´ıho stavu. • Atomicita (Atomicity) – Kaˇzd´a transakce je atomick´a (nedˇeliteln´a), bud’ probˇehnou vˇsechny operace v transakci, nebo ˇza´dn´a. Pokud selˇze jedna ˇca´st, selˇze cel´a transakce a stav datab´aze se vr´at´ı do p˚ uvodn´ıho stavu. • Konzistence (Consistency) – Data se pˇred i po proveden´ı transakce nach´az´ı v konzistentn´ım stavu. Veˇsker´a data zapsan´a do datab´aze mus´ı b´ yt platn´a podle stanoven´ ych pravidel, transakce nesm´ı poruˇsit ˇz´adn´e integritn´ı omezen´ı. • Izolace (Isolation) – Pˇri paraleln´ım zpracov´an´ı jsou jednotliv´e transakce od sebe izolov´any a navz´ajem se neovlivˇ nuj´ı. • Trvalost (Durability) – Zmˇeny po u ´spˇeˇsn´e transakci jsou v datab´azi uloˇzeny natrvalo. Syst´em, kter´ y splˇ nuje vˇsechny vlastnosti ACID, se oznaˇcuje za silnˇe konzistentn´ı“. ” Takov´eto datab´azov´e syst´emy jsou potˇreba v nˇekter´ ych pˇr´ıpadech, jako jsou napˇr. 7
Z´akladn´ı pojmy a teorie
ACID
syst´emy v obchodech nebo v bank´ach. Datab´aze, kter´e zcela nepodporuj´ı vlastnosti ACID, jsou naz´ yv´any eventu´alnˇe (pˇr´ıpadnˇe) konzistentn´ı“. Data v takov´ ychto data” b´az´ıch nejsou konzistentn´ı v libovoln´em ˇcase, ale konzistence je dosaˇzeno postupnˇe. Pˇr´ıstup eventu´alnˇe konzistentn´ıch datab´az´ı umoˇzn ˇuje z´ıskat v´ yhodu lepˇs´ı horizont´aln´ı ˇsk´alovatelnosti. Toho vyuˇz´ıvaj´ı pˇredevˇs´ım NoSQL datab´aze. [Pok97][Tiw11]
8
3 Relaˇcn´ı datab´aze Relaˇcn´ı datab´aze je normalizovan´ y syst´em, kter´ y je zaloˇzen na relaˇcn´ım modelu dat ˇ a je ˇr´ızen pomoc´ı SRBD. Z´akladem kaˇzd´e relaˇcn´ı datab´aze je tabulka neboli relace. Datab´aze je n´aslednˇe tvoˇrena kolekc´ı tabulek, kter´e jsou navz´ajem propojeny. Svou oblibu mezi program´atory z´ıskaly pˇredevˇs´ım kv˚ uli sv´e jednoduchosti. [Skˇr02]
3.1
Popis
Relace je reprezentov´ana jako tabulka, kde ˇra´dky tabulky reprezentuj´ı datov´e ntice a sloupce odpov´ıdaj´ı atribut˚ um. I kdyˇz se atributy objev´ı v libovoln´em poˇrad´ı, bude se jednat o stejnou relaci se stejn´ ym v´ yznamem. Tabulka m´a jedineˇcn´e jm´eno, aby byla odliˇsiteln´a od ostatn´ıch tabulek v dan´e datab´azi. Buˇ nky tabulky mus´ı obsahovat pouze jednu hodnotu (pˇr´ısluˇsn´a tabulka je tak normalizov´ana do prvn´ı norm´aln´ı formy). Kaˇzd´ y sloupec m´a jedineˇcn´ y n´azev a urˇcit´ y datov´ y typ podle dat, ˇ jeˇz maj´ı b´ yt uloˇzena. R´adky tabulky mus´ı m´ıt jedineˇcn´ y identifik´ator, coˇz se ˇreˇs´ı pomoc´ı kl´ıˇce. Prim´arn´ı kl´ıˇc je sloupec nebo mnoˇzina sloupc˚ u, kter´ y jedineˇcnˇe urˇcuje ˇra´dek v tabulce. Ciz´ı kl´ıˇc je tak´e mnoˇzina sloupc˚ u, kter´a nese stejnou hodnotu jako prim´arn´ı kl´ıˇc ale v jin´e tabulce. [Con09] S objevem objektov´e orientace pˇriˇslo vylepˇsen´ı relaˇcn´ıch datab´az´ı. Doch´az´ı k rozˇs´ıˇren´ı o nov´ y typ, objekt, a o podporu ukl´ad´an´ı a pr´ace s n´ım. Vznikaj´ı tak objekˇ ˇ tovˇe relaˇcn´ı SRBD (ORDBMS), kter´e kombinuj´ı vlastnosti relaˇcn´ıch SRBD, jako ˇ je tˇreba dotazovac´ı jazyk SQL, a vlastnosti objektovˇe orientovan´ ych SRBD (OODBMS). Tento model m´a mnoho v´ yhod, ale st´ale nen´ı pˇr´ıliˇs rozˇs´ıˇren. [Opp06]
3.2
Integritn´ı omezen´ı
Relaˇcn´ı model dat urˇcuje pouze strukturu dat. Pro praktick´e pouˇzit´ı je ale nutn´e zajistit, aby se v relaci vyskytovala pouze logicky spr´avn´a data. Integritn´ı omezen´ı jsou pravidla, kter´a zabr´an´ı vloˇzen´ı nespr´avn´ ych data a ztr´atˇe nebo poˇskozen´ı st´avaj´ıc´ıch u ´daj˚ u pˇri pr´aci s datab´az´ı. Entitn´ı integrita zajiˇst’uje jednoznaˇcnost ˇr´adku v tabulce, neboli u ´plnost prim´arn´ıho kl´ıˇce. Dalˇs´ım pravidlem je referenˇcn´ı integrita, kter´a se vztahuje k ciz´ım kl´ıˇc˚ um. Existuje-li v tabulce ciz´ı kl´ıˇc, mus´ı jeho hodnota odpov´ıdat prim´arn´ımu kl´ıˇci 9
Relaˇcn´ı datab´aze
Norm´aln´ı formy
v jin´e tabulce. Datab´aze, kter´a vyhovuje zadan´ ym integritn´ım omezen´ım, se oznaˇcuje za konzistentn´ı. [Con09]
3.3
Norm´ aln´ı formy
D˚ uvodem k zaveden´ı normalizace vedly probl´emy, jeˇz byly oznaˇcov´any jako anom´alie, nenormalizovan´ ych relac´ı, kter´e se projevovaly pˇri aktualizaci dat. Normalizace je dekompozice relace, kter´a vznikla kv˚ uli jednoduˇsˇs´ı pr´aci s daty, jejich lepˇs´ı manipulaci, zabr´anˇen´ı redundance dat a lepˇs´ı konzistenci. Poˇcet normalizaˇcn´ıch u ´rovn´ı, oznaˇcovan´ ych jako norm´aln´ı formy, je ˇsest. [Opp06] Norm´aln´ı formy jsou pravidla, podle kter´ ych by se mˇely navrhovat tabulky a jejich vz´ajemn´e relace. Jsou oznaˇceny jako 1NF, 2NF, 3NF, BCNF, 4NF a 5NF. Formy smˇeˇruj´ı postupnˇe od niˇzˇs´ıch k vyˇsˇs´ım, kdy kaˇzd´a vyˇsˇs´ı norm´aln´ı forma obsahuje sv´a vlastn´ı pravidla a podm´ınky forem pˇredchoz´ıch, viz obr´azek 3.1. [Kul08] Relace je v prvn´ı norm´aln´ı formˇe (1NF), pokud jsou data atomick´a. To znamen´a, ˇze by jiˇz d´ale nemˇela b´ yt dˇeliteln´a, neboli neobsahuje ˇza´dn´e atributy s n´asobn´ ymi hodnotami. V druh´e norm´aln´ı formˇe (2NF) se relace nach´az´ı, kdyˇz je v 1NF a kaˇzd´ y nekl´ıˇcov´ y atribut je plnˇe funkˇcnˇe z´avisl´ y na cel´em prim´arn´ım kl´ıˇci relace. Relace se nach´az´ı v tˇret´ı norm´aln´ı formˇe (3NF), pokud je v 2NF a kaˇzd´ y nekl´ıˇcov´ y atribut nen´ı tranzitivnˇe z´avisl´ y na prim´arn´ım kl´ıˇci, neboli neexistuje z´avislost mezi dvˇema nekl´ıˇcov´ ymi atributy. Vedle 3NF existuje Boyce-Coddova norm´aln´ı forma (BCNF), kter´a je silnˇejˇs´ı formou 3NF. Relace je v BCNF, pokud je v 3NF a v relaci neexistuje ˇza´dn´ y urˇcuj´ıc´ı atribut, kter´ y by byl prim´arn´ım nebo kandid´atn´ım kl´ıˇcem. Tzn., ˇze ˇza´dn´ y nekl´ıˇcov´ y atribut nesm´ı urˇcovat hodnotu ˇza´dn´eho jin´eho atributu, a to ani atribut˚ u, kter´e jsou souˇc´ast´ı definice prim´arn´ıho kl´ıˇce. Kaˇzd´a relace, kter´a je v BCNF je vˇzdy ve 3NF. Opaˇcnˇe vˇsak 3NF nemus´ı b´ yt v BCNF, jestliˇze nastane situace, kdy v relaci je v´ıce kandid´atn´ıch kl´ıˇc˚ u, vˇsechny tyto kandid´atn´ı kl´ıˇce jsou sloˇzen´e a existuje atribut, kter´ y je pro vˇsechny kandid´atn´ı kl´ıˇce spoleˇcn´ y. Z praktick´eho hlediska postaˇc´ı vˇetˇsinou transformace relaci do BCNF. Je vˇsak pops´an pˇrevod relac´ı d´ale do ˇctvrt´e a p´at´e norm´aln´ı formy. Opom´ıj´ı se ale ˇcasto proto, ˇze pˇredstavuj´ı pomˇernˇe v´ yjimeˇcn´e situace a je celkem obt´ıˇzn´e je poruˇsit. Ve ˇctvrt´e norm´aln´ı formˇe (4NF) je relace, pokud je v BCNF a vˇsechny v´ıcehodnotov´e z´avislost jsou z´aroveˇ n funkˇcn´ımi z´avislostmi z kandid´atn´ıch kl´ıˇc˚ u. V posledn´ı p´at´e norm´aln´ı formˇe (5NF) se relace nach´az´ı, jeli ve 4NF a nem˚ uˇze-li b´ yt d´ale bez10
Relaˇcn´ı datab´aze
SQL
1 NF Všechnapdatappvprelacipmusípbýtpatomická.
2 NF Datapzávisípnapcelémpklíči.
3 NF Neklíčovápdatapjsoupzávislápjenpnapklíčipapnepmezipsobou.
BCNF Všechnapdatapjsoupzávislápjenpnapklíčipapnepmezipsobou.
4 NF Složenýpprimárnípklíčpnesmípbýtptvořenpzpnezávislýchpdat.
5 NF Trojnýpapvícerýpprimárnípklíčpnesmípobshaovatppárovépcyklicképzávislosti.
Obr´azek 3.1: Norm´aln´ı formy. [Kul08] ztr´atovˇe rozloˇzena. [Kal12] [Opp06] [Norm07]
3.4
SQL
SQL (Structured Querry Language, v pˇrekladu strukturovan´ y dotazovac´ı jazyk) je standardizovan´ y dotazovac´ı jazyk. Pouˇz´ıv´a se pˇredevˇs´ım pro pr´aci s daty v relaˇcn´ıch datab´az´ıch. SQL vznikl z projektu SEQUEL v 70. letech v laboratoˇr´ıch firmy IBM. C´ılem bylo vytvoˇrit standardn´ı metodu pˇr´ıstupu k dat˚ um, kter´a by byla nez´avisl´a na dalˇs´ıch v´ yvojov´ ych n´astroj´ıch. Jazyk SQL je neprocedur´aln´ı. Zad´av´a, jak´e informace se vyˇzaduj´ı, nikoliv zp˚ usob, jak je z´ıskat. Tento zp˚ usob vyuˇzit´ı je oznaˇcov´an jako dynamick´e SQL. Tak´e se ale m˚ uˇze SQL pouˇz´ıt v aplikaci, kter´a je naps´ana procedur´aln´ım jazykem. Potom se naz´ yv´a jako vnoˇren´e SQL, kter´e poskytuje pˇr´ıstup k datab´azi nez´avisle na jazyku, ve kter´em je naps´ana zb´ yvaj´ıc´ı ˇca´st aplikace.
11
Relaˇcn´ı datab´aze
Hlavn´ı pˇredstavitel´e
Obr´azek 3.2: Poˇcet nainstalovan´ ych a nasazen´ ych datab´azov´ ych syst´em˚ u podle spoleˇcnosti Gartner v roce 2008.[MaS08] Skl´ad´a se z nˇekolika skupin. Prvn´ı je jazyk pro definici dat DDL (Data Definition Language), kter´ y urˇcuje strukturu datab´aze (napˇr. pˇr´ıkazy CREATE, ALTER, DROP). Druh´ ym jazykem je DML (Data Manipulation Language), neboli jazyk pro manipulaci dat, kter´ y slouˇz´ı pro z´ısk´av´an´ı dat z datab´aze a jejich aktualizaci. Mezi nˇekter´e pˇr´ıkazy DML jazyka patˇr´ı napˇr. SELECT, INSERT, UPDATE a DELETE. Dalˇs´ımi jazyky jsou DCL (Data Control Language), jazyk pro ˇr´ızen´ı dat, kter´ y slouˇz´ı pro spr´avu uˇzivatelsk´ ych rol´ı a pr´av, a TCL (Transaction Control Language), jazyk pro ˇr´ızen´ı transakc´ı. [Con09][Skˇr00]
3.5
Hlavn´ı pˇ redstavitel´ e
ˇ V souˇcasn´e dobˇe patˇr´ı k nejv´ıce rozˇs´ıˇren´ ym a nejpropracovanˇejˇs´ım SRBD pr´avˇe relaˇcn´ı datab´azov´e syst´emy (RDBMS). V dalˇs´ı ˇca´sti jsou uvedeny z´akladn´ı informace o nejzn´amˇejˇs´ıch z´astupc´ıch. Na obr´azku 3.2 je zobrazen pˇrehled nejpouˇz´ıvanˇejˇs´ıch datab´azov´ ych syst´em˚ u. 12
Relaˇcn´ı datab´aze
Hlavn´ı pˇredstavitel´e
MySQL Datab´azov´ y syst´em MySQL1 vlastnˇen´ y spoleˇcnost´ı Oracle Corporation je poskytov´an pod dvˇema licencemi. Z´akladn´ı verze je pod bezplatnou licenc´ı GPL (General Public License). Komerˇcn´ı verze je poskytov´ana pod placenou licenc´ı a obsahuje rozˇs´ıˇren´e funkce a n´astroje. D´ıky sv´e multiplatformnosti, vysok´emu v´ ykonu a n´ızk´ ym finanˇcn´ım n´aklad˚ um je tento syst´em ˇcasto vyuˇz´ıv´an pˇredevˇs´ım na serverech pro potˇreby webov´ ych aplikac´ı. Spoleˇcnˇe s operaˇcn´ım syst´emem Linux, skriptovac´ım programovac´ım jazykem PHP a webov´ ym serverem Apache tvoˇr´ı tzv. LAMP server. Pro spr´avu MySQL datab´az´ı se pouˇz´ıv´a open-source n´astroj napsan´ y v jazyce PHP, PhpMyAdmin, kter´ y umoˇzn ˇuje kompletn´ı spr´avu syst´emu pomoc´ı webov´eho rozhran´ı. [MyS11]
Microsoft SQL Server Microsoft SQL Server, oznaˇcov´an jako MSSQL nebo jen SQL Server, je RDBMS vyvinut´ y spoleˇcnost´ı Microsoft. V´ yvoj SQL Serveru zaˇcal ve firm´ach Microsoft a IBM v roce 1985. Jeˇstˇe ned´avno byla k dispozici placen´a verze a Developer Edition, kter´a byla zdarma pouze pro v´ yvoj´aˇrsk´e t´ ymy a studenty. Dnes je k dispozici i neplacen´a verze SQL Server Express. Pro pr´aci s SQL Serverem se nejˇcastˇeji vyuˇz´ıv´a SQL Server Management Studio poskytovan´ y od verze MSSQL 2005. Hlavn´ımi jazyky jsou pro SQL Server SQL a T-SQL (Transact-SQL), kter´ y rozˇsiˇruje standardn´ı SQL o procedur´aln´ı programov´an´ı, lok´aln´ı promˇenn´e a dalˇs´ı funkce. Nejnovˇejˇs´ı verz´ı je SQL Server 20142 , kter´ y se jiˇz specializuje na big data a tak´e umoˇzn´ı propojen´ı s cloudov´ ymi sluˇzbami Azure. [MSSQL01]
Oracle Database Spoleˇcnost Oracle Corporation3 patˇr´ı mezi nejvˇetˇs´ı svˇetov´e v´ yrobce podnikov´ ych syst´em˚ u, jako jsou relaˇcn´ı datab´aze, n´astroje pro spr´avu datab´az´ı a CRM (Customer Relationship Management) syst´emy. Prvn´ı Oracle datab´aze oznaˇcena jako Oracle Version 2 vznikla jiˇz v roce 1979, jako prvn´ı relaˇcn´ı datab´azov´ y syst´em. Nejnovˇejˇs´ı verze Oracle Database 12c byla prvn´ı datab´aze urˇcen´a pro cloud. Pro spr´avu datab´aze dod´av´a firma zdarma grafick´ y n´astroj Oracle SQL Developer, kter´ y umoˇz1
http://www.mysql.com/about/ https://www.microsoft.com/sqlserver/cs/cz/ 3 http://www.oracle.com 2
13
Relaˇcn´ı datab´aze
Hlavn´ı pˇredstavitel´e
n ˇuje prohl´ıˇzen´ı datab´aze, spouˇstˇet SQL pˇr´ıkazy, editovat a debugovat PL/SQL pˇr´ıkazy. Spoleˇcnost Oracle vlastn´ı i konkurenˇcn´ı MySQL, kdyˇz v roce 2010 zakoupila spoleˇcnost Sun Microsystems. Spoleˇcnost poskytuje Oracle NoSQL Database, coˇz je NoSQL datab´aze typu key/value.
PostgreSQL PostgreSQL patˇr´ı mezi objektovˇe-relaˇcn´ı datab´azov´e syst´em, distribuovan´ y zdarma pod licenc´ı PostgreSQL License, kter´a je podobn´a licenci MIT (svobodn´a licence z Massachusetts Institute of Technology). Byl vytvoˇren t´ ymem profesora Michaela Stonebrakera na Kalifornsk´e univerzitˇe v Berkeley v roce 19864 . Hlavn´ımi n´astroji pro spr´avu datab´aze jsou psql, aplikace pro pˇr´ıkazovou ˇr´adku umoˇzn ˇuj´ıc´ı zad´avan´ı SQL dotaz˚ u, a grafick´e administraˇcn´ı rozhran´ı pgAdmin.
Firebird Datab´azov´ y syst´em Firebird vych´az´ı ze syst´emu InterBase spoleˇcnosti Borland. V roce 2000 byly uvolnˇeny zdrojov´e k´ody syst´emu InterBase, kter´e zaˇcal ve stejn´em roce t´ ym v´ yvoj´aˇr˚ u upravovat, a tak vznikl Firebird, kter´ y je d´al vyv´ıjen pod veden´ım neziskov´e organizace Firebird Foundation. Souˇcasn´a verze Firebirdu je 2.5.2. D´ıky pˇreps´an´ı do jazyka C++ a velk´eho mnoˇzstv´ı u ´prav p˚ uvodn´ıho k´odu se tento multiplatformn´ı syst´em stal velmi stabiln´ı. Syst´em je nab´ızen pod volnou licenc´ı Initial Developer’s Public License vych´azej´ıc´ı z MPL (Mozilla Public Licence) pro svobodn´ y software5 . [Jak07]
4 5
http://www.postgresql.org/docs/current/static/history.html http://www.firebirdsql.org/en/licensing/
14
4 NoSQL datab´aze S n´ar˚ ustem objemu dat, jejich vzr˚ ustaj´ıc´ı propojenost´ı a ztr´atˇe pˇredv´ıdateln´e struktury v posledn´ıch letech pˇrestaly b´ yt relaˇcn´ı datab´azov´e syst´emy vhodnou volbou pro nˇekter´a data. Google byl prvn´ı spoleˇcnost´ı, kter´a se rozhodla ˇreˇsit probl´em s ukl´ad´an´ım big dat. Vytvoˇril nov´e datab´azov´e uloˇziˇstˇe BigTable, kter´e neukl´adalo data klasicky po ˇra´dc´ıch ale po sloupc´ıch. Dalˇs´ım ˇreˇsen´ım byl projekt Dynamo od spoleˇcnosti Amazon, kter´ y se zab´ yv´a ukl´ad´an´ım dat na principu key/value. Oba ˇ projekty stanovily z´aklady pro vznik a v´ yvoj NoSQL datab´az´ı. [Sel11]
4.1
Popis
V roce 2009 byl term´ın NoSQL datab´aze zvolen pro poˇcetnou skupinu nerelaˇcn´ıch datov´ ych uloˇziˇst’. Takov´e datab´aze na rozd´ıl od relaˇcn´ıch vˇetˇsinou nepouˇz´ıvaj´ı SQL jako sv˚ uj dotazovac´ı jazyk. N´azev NoSQL je obˇcas mylnˇe vykl´ad´an jako No SQL“ ” (ˇz´adn´e SQL), datab´azov´a komunita ale radˇeji vysvˇetluje tento pojem sp´ıˇse jako Not only SQL“ (nejen SQL). Nˇekdy se pro tato datov´a uloˇziˇstˇe pouˇz´ıv´a term´ın ” postrelaˇcn´ı. V ˇsirˇs´ım v´ yznamu se do t´eto skupiny zahrnuj´ı tak´e datab´aze XML, grafov´e, dokumentov´e, objektov´e a tak´e softwarov´a ˇreˇsen´ı, kter´a dokonce nejsou ani v tradiˇcn´ım pojet´ı datab´azemi v˚ ubec. Z´akladn´ımi charakteristikami vˇetˇsiny NoSQL datab´az´ı jsou: [Flo12] • Nepouˇz´ıvaj´ı relaˇcn´ı model a jazyk SQL, • vˇetˇsina NoSQL datab´az´ı jsou open-source, • jsou navrˇzeny pro pr´aci v clusteru, • umoˇzn ˇuj´ı snadnou podporu replikac´ı a distribuce dat, • poskytuj´ı vlastn´ı jednoduch´a API, • nemaj´ı stanoven´e ˇz´adn´e sch´ema (nestrukturovan´a data), • jsou vysoce horizont´alnˇe ˇsk´alovateln´e, • ˇc´asteˇcn´e vyuˇz´ıvaj´ı ACID, • podporuj´ı transakci BASE, 15
NoSQL datab´aze
Base
• CAP teor´em. Data uloˇzen´a v NoSQL datab´azi nemusej´ı m´ıt pevn´e uspoˇr´ad´an´ı, mohou b´ yt strukturovan´a, nestrukturovan´a nebo semistrukturovan´a. V NoSQL se pˇredevˇs´ım vyuˇz´ıv´a schopnosti ukl´adat a naˇc´ıtat velk´e mnoˇzstv´ı dat bez z´avislosti na vztaz´ıch. D´ıky tomuto jin´emu pˇr´ıstupu k ukl´ad´an´ı dat do datab´aze jsou NoSQL v nˇekter´ ych pˇr´ıpadech vhodnˇejˇs´ı neˇz datab´aze relaˇcn´ı. Pˇr´ıkladem pouˇzit´ı m˚ uˇze b´ yt ukl´ad´an´ı nˇekolika milion˚ u dat typu key/value do jednoho asociativn´ıho pole. NoSQL syst´emy pracuj´ı s distribuovanou architekturou a daty, kter´e jsou redundantn´ım zp˚ usobem uloˇzeny na nˇekolika serverech. V´ yhodou nerelaˇcn´ıch datab´az´ı je schopnost tolerovat v´ ypadky s´ıtˇe a vysok´a rychlost zpracov´an´ı obrovsk´eho objemu dat, na u ´kor mal´e funkcionality omezuj´ıc´ı se v nˇekter´ ych pˇr´ıpadech na pouh´e ukl´ad´an´ı dat. NoSQL datab´aze neposkytuj´ı plnou podporu ACID. Umoˇzn ˇuj´ı proto pouze ˇca´steˇcnou konzistenci, d´ıky ˇcemuˇz se ale zvyˇsuje rychlost vykon´avan´ ych dotaz˚ u, zvˇetˇsuje se dostupnost a moˇznost ˇsk´alovatelnosti datab´aze. [Pok12]
4.2
Base
NoSQL datab´aze povaˇzuj´ı ACID za pˇr´ıliˇs pˇr´ısn´ y. M´ısto toho preferuj´ı radˇeji pˇr´ıstup oznaˇcovan´ y jako BASE (Basically Available, Soft-state, Eventually Consistent), kter´ y upˇrednostˇ nuje dostupnost, ˇc´asteˇcnou degradaci a v´ ykon pˇred konzistenc´ı a izoˇ lac´ı datab´aze. Casto je BASE ch´apan jako protiklad ACID. BASE se skl´ad´a z n´asleduj´ıc´ıch princip˚ u: • Basically Available – pˇri poruˇse spojen´ı mezi uzly z˚ ustane ve vˇetˇsinˇe pˇr´ıpad˚ u dostupnost dat zachov´ana a syst´em je v podstatˇe funkˇcn´ı po celou dobu. Tato vlastnost se dosahuje pomoc´ı vysoce distribuovan´eho pˇr´ıstupu ke spr´avˇe datab´az´ı. NoSQL datab´aze maj´ı data uloˇzen´e v syst´emech pro ukl´ad´an´ı dat s vysok´ ym stupnˇem replikace. • Soft-state – datab´aze vˇetˇsinou nedodrˇzuj´ı konzistentn´ı poˇzadavky ACID pˇr´ıstupu, neboli aplikace nemus´ı b´ yt v kaˇzd´em okamˇziku konzistentn´ı. Z´akladn´ı koncepc´ı je, ˇze konzistence dat je probl´emem v´ yvoj´aˇre a nemˇela by b´ yt ˇreˇsena v datab´azi. • Eventually Consistent – NoSQL datab´aze mus´ı b´ yt schopny dosahovat konzistentn´ıch dat postupnˇe, neboli v urˇcit´em okamˇziku v budoucnosti budou data v konzistentn´ım stavu. Nen´ı vˇsak zaruˇceno, kdy k tomu dojde. To je u ´pln´ y odklon od poˇzadavku pˇr´ıstupu ACID na okamˇzitou konzistenci dat. 16
NoSQL datab´aze
CAP teor´em
V praxi, napˇr. v internetov´ ych aplikac´ıch, se pouˇz´ıvaj´ı oba zm´ınˇen´e pˇr´ıstupy, ACID a BASE. V pˇr´ıpadech, kdy je nezbytn´a siln´a konzistence dat, jako jsou bankovn´ı operace, se pouˇz´ıv´a ACID. V jin´ ych pˇr´ıpadech, kde je preferov´ana dostupnost, se pouˇz´ıv´a pˇr´ıstup BASE. Pouˇzit´ı pˇr´ıstupu ACID nebo BASE, pˇr´ıpadnˇe kombinace obou, z´avis´ı pˇredevˇs´ım na konkr´etn´ım pˇr´ıstupu. [Cha11][Tiw11]
4.3
CAP teor´ em
V roce 2000 byl profesorem Erikem Brewerem z University of California pˇredstaven CAP teor´em (Consistency – C, Availability – A, Partition tolerance – P), kter´ y vysvˇetluje moˇznosti realizace distribuovan´ ych syst´em˚ u, naz´ yvan´ y tak´e Brewer˚ uv teor´em. V posledn´ıch letech si tento princip z´ıskal velikou popularitu i pˇresto, ˇze je nˇekter´ ymi odborn´ıky kritizov´an. Trojice poˇzadavk˚ u na distribuovan´e prostˇred´ı: • Konzistence (Consistency) znamen´a, ˇze kdykoliv jsou data zaps´ana, je pro kohokoliv, kdo ˇcte z datab´aze, zobrazena posledn´ı verze dat, neboli vˇsechny uzly distribuovan´eho syst´emu vid´ı ve stejn´ y ˇcasov´ y okamˇzik shodn´a data. • Dostupnost (Availability) znamen´a, ˇze kaˇzd´ y klient po sv´em dotazu dostane informaci o tom, zda byla operace u ´spˇeˇsn´a nebo ne´ uspˇeˇsn´a. Tak´e se nˇekdy pouˇz´ıv´a i vysvˇetlen´ı, ˇze kaˇzd´ y klient m˚ uˇze ˇc´ıst i zapisovat data. Vysok´a dostupnost je dosahov´ana obvykle pomoc´ı vˇetˇs´ıho poˇctu propojen´ ych fyzick´ ych server˚ u p˚ usob´ıc´ı jako jedna datab´aze s rozdˇelen´ım dat mezi jednotliv´e datab´azov´e uzly a za pomoci vyuˇzit´ı replik dat. • Odolnost v˚ uˇ ci rozdˇ elen´ı s´ıtˇ e (Partition tolerance) vyjadˇruje schopnost syst´emu ˇc´ıst a zapisovat data i v pˇr´ıpadˇe, pokud doˇslo k pˇreruˇsen´ı spojen´ı mezi v´ yznaˇcn´ ym poˇctem datab´azov´ ych uzl˚ u. Odolnost m˚ uˇze b´ yt dosaˇzena pomoc´ı mechanism˚ u, kter´ ymi jsou z´apisy m´ısto na poˇzadovan´ ych nedosaˇziteln´ ych uzlech posl´any st´ale jeˇstˇe pˇr´ıstupn´ ym uzl˚ um. Kdyˇz se pak navr´at´ı nedostupn´e uzly zpˇet do s´ıtˇe, obdrˇz´ı poˇzadovan´e z´apisy, kter´e chybˇely. CAP teor´em tvrd´ı, ˇze pro jak´ ykoliv distribuovan´ y syst´em je nemoˇzn´e splˇ novat souˇcasnˇe vˇsechny tˇri uveden´e poˇzadavky. Z obr´azku 4.1 plyne, ˇze syst´em lze rozdˇelit do n´asleduj´ıc´ıch tˇr´ı kategori´ı: • CA (Consistency + Availability) – je zaruˇcena dostupnost a konzistence na u ´kor odolnosti k rozdˇelen´ı s´ıtˇe. Takov´e syst´emy obvykle splˇ nuj´ı z´asady ACID a pouˇz´ıvaj´ı se napˇr. v bank´ach. Pˇredstavitel´e: RDBMS. 17
NoSQL datab´aze
Map Reduce
Obr´azek 4.1: CAP teor´em. [Ver13] • CP (Consistency + Partition tolerance) – nesplnˇenou vlastnost´ı je dostupnost. Tato volba je vhodn´a pro syst´emy, kde dostupnost nen´ı kritick´a a je d˚ uleˇzit´e zachvoat pˇredevˇs´ım konzistenci dat. Pˇredstavitel´e: Redis, MongoDB, BigTable. • AP (Availability + Partition tolerance) – syst´em m´a zaruˇcenou dostupnost a odolnost k rozdˇelen´ı s´ıtˇe, tentokr´at na u ´kor konzistence. Tyto syst´emy jsou oznaˇcov´any jako slabˇe konzistentn´ı a konzistence dat dosahuj´ı postupnˇe. Jsou pˇredevˇs´ım vhodn´e v pˇr´ıpadech, kdy je nepostradateln´a odolnost v˚ uˇci rozdˇelen´ı dat. Pˇredstavitel´e: Cassandra, Riak, CouchDB. [Pok12]
4.4
Map Reduce
Map Reduce je model urˇcuj´ıc´ı, jak zpracov´avat velk´e objemy dat v clusterech s vyuˇzit´ım paraleln´ıho zpracov´an´ı na vˇetˇs´ım poˇctu uzl˚ u. Prvn´ı v´ yznamnou realizaci byl The Map Reduce Framework naps´an v jazyce C++ od spoleˇcnosti Google. Z´akladn´ı myˇslenky tohoto projektu byly pˇrevzaty softwarem Hadoop a vznikla tak opensource implementace v jazyce Java, jeˇz je v dneˇsn´ı dobˇe hojnˇe vyuˇz´ıv´ana. Tento 18
NoSQL datab´aze
Map Reduce
Obr´azek 4.2: MapReduce. [Gro09] model pouˇz´ıv´a napˇr. MongoDB. Princi Map Reudce, viz obr´azek 4.2, vych´az´ı z funkcion´aln´ıho programov´an´ı, kde existuje mapovac´ı a redukˇcn´ı funkce. Map funkce uplatn´ı na kaˇzd´ y prvek datov´e struktury operaci. V´ ystupem je pak nov´a kolekce hodnot, pˇritom ale nen´ı p˚ uvodn´ı kolekce zmˇenˇena. Funkce Reduce pouˇzije agregaˇcn´ı funkci na novou kolekci hodnot a na v´ ystupu vytvoˇr´ı jednu jedinou hodnotu. Podobn´ y princi se pouˇz´ıv´a u zpracov´an´ı velk´ ych objem˚ u dat v distribuovan´e datab´azi. [Dea04][Tiw11] • Krok Map – hlavn´ı uzel, kter´ y z´ısk´av´a vstup, rozdˇel´ı vstupn´ı data zad´an´ı na ˇca´sti a pˇred´a je pracovn´ım uzl˚ um. Pracovn´ı uzel m˚ uˇze opˇet rozdˇelit svoj´ı ˇc´ast a pˇredat j´ı ke zpracov´an´ı jin´ ym pracovn´ım uzl˚ um, pro kter´e se tak stane ˇr´ıd´ıc´ım uzlem. Tento zp˚ usob vede k v´ıce´ urovˇ nov´e stromov´e struktuˇre. Pracovn´ı uzel pak pouˇzije funkci na kaˇzdou kolekci dvojic kl´ıˇc/hodnota a v´ yslednou kolekci novˇe vytvoˇren´ ych dvojic kl´ıˇc/hodnota pˇred´a zpˇet sv´emu nadˇrazen´emu uzlu. • Krok Reduce – hlavn´ı uzel shromaˇzd’uje v´ ysledky od pracovn´ıch uzl˚ u, kter´e zkombinuje (spoj´ı data se stejn´ ym kl´ıˇcem) a vytvoˇr´ı v´ ystup neboli odpovˇed’ na p˚ uvodn´ı ˇreˇsen´ y probl´em.
19
NoSQL datab´aze
4.5
Distribuce dat
Distribuce dat
Data mohou b´ yt um´ıstˇena na jednom uzlu. To je v´ yhodn´e, protoˇze to nezp˚ usobuje komplikace s rozm´ıstˇen´ım dat na v´ıce uzlech, napˇr. u grafov´ ych datab´az´ı, se skoro hotov´ ym grafem, je tˇeˇzk´e data distribuovat. Jelikoˇz jsou ale moˇznosti jednoho uzlu omezen´e, je v´ yhodnˇejˇs´ı rozmist’ovat data na v´ıce uzl˚ u. Existuj´ı dvˇe varianty distribuce dat, sharding a replikace. Sharding je metoda, kter´a urˇcuje, na jak´em uzlu se nach´azej´ı data. Shard je pak oznaˇcen´ı ˇca´sti dat. Kaˇzd´ y shard m˚ uˇze b´ yt um´ıstˇen na odliˇsn´em datab´azov´em serveru. Jelikoˇz je datab´aze rozdˇelena a distribuovan´a na v´ıce uzlech, je mnoˇzstv´ı dat v kaˇzd´e datab´azi menˇs´ı. Kaˇzd´ y uzel pracuje se svoj´ı ˇc´ast´ı dat, ˇc´ımˇz umoˇzn ˇuje sn´ıˇzit zat´ıˇzen´ı serveru. D´ıky tomu se sniˇzuje rychlost zpracov´an´ı jednotliv´ ych dotaz˚ u. Pokud dojde k v´ ypadu jednoho z uzl˚ u, je zbytek dat st´ale pˇr´ıstupn´ y1 . Nev´ yhodou ale je, ˇze data se mohou pˇri v´ ypadku ztratit. Tuto metodu pouˇz´ıv´a napˇr´ıklad Redis nebo MongoDB. Na rozd´ıl od shardingu replikace duplikuje data z jednoho uzlu na ostatn´ı, coˇz znamen´a, ˇze na kaˇzd´em uzlu budou uloˇzena stejn´a data. D´ıky tomu nedojde pˇri v´ ypadku uzlu ke ztr´atˇe dat. Replikace m˚ uˇze b´ yt bud’ master-slave nebo peer-to-peer. Master-slave replikace, jak jiˇz n´azev napov´ıd´a, m´a jeden prim´arn´ı uzel (master), kter´ y m˚ uˇze ˇc´ıst i zapisovat data. Sekund´arn´ı uzly (slaves) mohou pouze ˇc´ıst. Tato replikace je v´ yhodn´a pˇri vˇetˇs´ım poˇctu dotaz˚ u na ˇcten´ı dat, naopak pˇri vˇetˇs´ım poˇctu poˇzadavk˚ u na z´apis ˇci aktualizaci dat m´a uzel master omezen´e schopnosti, jelikoˇz jako jedin´ y sm´ı tyto poˇzadavky prov´adˇet. Dalˇs´ı v´ yhodou master-slave replikace je, ˇze i pˇri v´ ypadku prim´arn´ıho uzlu, umoˇzn ˇuj´ı sekund´arn´ı uzly ˇcten´ı dat. Sekund´arn´ı uzel m˚ uˇze b´ yt pak automaticky nebo manu´alnˇe pov´ yˇsen na prim´arn´ı uzel, ˇc´ımˇz pˇrevezme pr´ava mastera. Peer-to-peer (P2P) replikace se od master-slave liˇs´ı pˇredevˇs´ım t´ım, ˇze jsou vˇsechny uzly rovnocenn´e a kaˇzd´ y uzel m´a pr´avo pro z´apis i ˇcten´ı. T´ım se ˇreˇs´ı nˇekter´e nedostatky master-slave replikace pˇredevˇs´ım omezen´ y v´ ykon prim´arn´ıho uzlu pˇri z´apisu. D´ıky tomu je zaruˇcena vˇetˇs´ı spolehlivost, jelikoˇz v´ ypadek jednoho uzlu nezp˚ usob´ı v´ ypadek cel´eho syst´emu. Probl´emem P2P replikace je konzistence. V pˇr´ıpadˇe z´apisu na dvˇe rozd´ıln´a m´ısta m˚ uˇze vzniknout konflikt. Sharding a replikace se m˚ uˇzou navz´ajem kombinovat. V pˇr´ıpadˇe master-slave replikace a shardingu bude existovat v´ıce prim´arn´ıch uzl˚ u, ale kaˇzd´ y z´aznam bude m´ıt pouze jednoho mastera. D´ıky tomu m˚ uˇze nastat situace, kdy pro jedna data bude uzel prim´arn´ı, ale pro jin´a sekund´arn´ı. [Tiw11][Sad13] 1
http://highscalability.com/blog/2010/10/15/troubles-with-sharding-what-can-welearn-from-the-foursquare.html
20
ˇ alovatelnost Sk´
NoSQL datab´aze
4.6
ˇ alovatelnost Sk´
ˇ alovatelnost je vlastnost syst´emu umoˇzn Sk´ ˇuj´ıc´ı reagovat na n´ahle zmˇeny potˇreby obˇ alovatelnost m˚ sluhy syst´emu, napˇr. pojmout rostouc´ı poˇcet dat. Sk´ uˇze b´ yt vertik´aln´ı (scale up) a horizont´aln´ı (scale out). Pˇri vertik´aln´ım ˇsk´alovatelnosti se dos´ahne zv´ yˇsen´ı fyzick´eho v´ ykonu serveru pˇrid´an´ım pamˇeti a zmˇenou procesoru za v´ ykonnˇejˇs´ı. Takov´e servery b´ yvaj´ı ale drah´e. Pˇri horizont´aln´ı ˇsk´alovatelnosti nedoch´az´ı k vylepˇsov´an´ı jednoho uzlu, ale m´ısto toho se data rozdˇel´ı na v´ıce vz´ajemnˇe spolupracuj´ıc´ıch server˚ u. D´ıky tomu m˚ uˇze b´ yt v´ ypoˇcet rozdˇelen na jednotliv´e paraleln´ı u ´lohy. Pˇrid´av´an´ı dalˇs´ı jednotky do syst´emu se jev´ı, oproti st´al´emu vylepˇsov´an´ı technick´ ych parametr˚ u jednoho stroje, finanˇcnˇe v´ yhodnˇejˇs´ı, jelikoˇz postaˇc´ı i levnˇejˇs´ı stroje. Horizont´aln´ı ˇsk´alovatelnost se vyskytuje zejm´ena u NoSQL datab´az´ı. V NoSQL mohou b´ yt ale data ˇsk´alov´ana i vertik´alnˇe. [Tiw11][Pok12]
4.7
Dotazov´ an´ı
Jak jiˇz samotn´ y n´azev NoSQL datab´aze napov´ıd´a, tyto syst´emy postr´adaj´ı dotazovac´ı jazyk SQL. Jelikoˇz se NoSQL syst´emy nezakl´adaj´ı na relaˇcn´ım modelu a neexistuje v nich ˇza´dn´ y standard pro dotazov´an´ı, tak se k dat˚ um v r˚ uzn´ ych syst´emech pˇristupuje rozd´ıln´ ymi zp˚ usoby. Nˇekter´e NoSQL datab´aze podporuj´ı jazyk SQL, pouze vˇsak v omezen´e formˇe (SimpleDB). Operace agregace, spojen´ı a zanoˇrov´an´ı dotaz˚ u ˇ nejsou v t´eto omezen´e formˇe podporov´any. Sirˇs´ı podmnoˇzinou SQL jsou jazyky GQL (Google Query Language), pouˇz´ıvan´ y v n´astroji Google AppEngine, a HQL (Hypertable Query Language), kter´ y pouˇz´ıv´a datab´aze Hypertable. Dotazov´an´ı v NoSQL prob´ıh´a pˇredevˇs´ım prostˇrednictv´ım kl´ıˇce pomoc´ı jednoduch´eho API. Obvykl´e API pro NoSQL datab´azi obsahuje n´asleduj´ıc´ı jednoduch´e operace: • get(kl´ ıˇ c) – z´ısk´a hodnotu dan´eho kl´ıˇce, • put(kl´ ıˇ c, hodnota) – vytvoˇr´ı nebo aktualizuje hodnotu kl´ıˇce, • delete(kl´ ıˇ c) – odstran´ı kl´ıˇc vˇcetnˇe jeho hodnoty, • execute(kl´ ıc ˇ, operace, parametry) – vyvol´a poˇzadovanou operaci na hodnotˇe urˇcen´e kl´ıˇcem.
21
NoSQL datab´aze
Datov´y model
Kv˚ uli horizont´aln´ı ˇsk´alovatelnosti nepodporuj´ı NoSQL datab´aze operace spojen´ı (JOIN) a uspoˇra´d´an´ı (ORDER BY). V pˇr´ıpadˇe, ˇze jsou tyto operace poˇzadov´any, mohou b´ yt implementov´any na stranˇe klienta, stejnˇe tak, jako ostatn´ı potˇrebn´e dotazovac´ı moˇznosti. Takov´eto ˇreˇsen´ı znamen´a ruˇcn´ı programov´an´ı dotaz˚ u, coˇz je vhodn´e pro jednoduch´e u ´lohy, ale u komplikovanˇejˇs´ıch u ´loh je to naopak velmi ˇcasovˇe n´aroˇcn´e. [Pok12] V budoucnu je pravdˇepodobn´e, ˇze vznikne pro vˇsechny NoSQL syst´emy nˇejak´ y standardizovan´ y dotazovac´ı jazyk. Pro dokumentovˇe orientovan´e datab´aze se zaˇcalo jiˇz hovoˇrit o UnQL (Unstructured Data Query Language)2 od spoleˇcnosti Couchbase. Jeho dalˇs´ı v´ yvoj je vˇsak nejist´ y.
4.8
Datov´ y model
Pˇri klasick´em popisu datab´az´ı se pouˇz´ıv´a (logick´ y) datov´ y model. NoSQL vˇsak vyuˇz´ıvaj´ı jin´ y pˇr´ıstup, intuitivn´ı a bez jak´ ychkoliv pˇredepsan´ ych form´aln´ıch z´aklad˚ u. D´ıky tomu je terminologie velice r˚ uznorod´a a st´ıraj´ı se zde rozd´ıly mezi konceptu´aln´ım a datab´azov´ ym pohledem na data. Existuje nˇekolik druhu dˇelen´ı NoSQL. Nejˇcastˇeji se pouˇz´ıv´a dˇelen´ı do ˇctyˇr kategori´ı, viz obr´azek 4.3, podle kvalitativn´ıch parametr˚ u a pˇredevˇs´ım podle jejich datov´eho modelu. • Datab´aze typu kl´ıˇc/hodnota (Key/value database), • dokumentovˇe orientovan´e datab´aze (Document-oriented database), • sloupcov´e datab´aze (Column oriented database), • grafov´e datab´aze (Graph databases). Uveden´e dˇelen´ı zobrazuje pouze uˇzˇs´ı koncepci NoSQL datab´az´ı. Do ˇsirˇs´ıho pojet´ı lze d´ale pˇridat i objektov´e datab´aze, XML datab´aze, multidimenzion´aln´ı datab´aze, cloud ˇreˇsen´ı a dalˇs´ı. [Pok12] 2
http://www.couchbase.com/press-releases/unql-query-language
22
NoSQL datab´aze
Datov´y model
Obr´azek 4.3: Datov´e modely NoSQL. [Kat12]
4.8.1
Datab´ aze typu kl´ıˇ c/hodnota
Datab´aze typu kl´ıˇc/hodnota, oznaˇcov´any tak´e jako key/value, maj´ı velmi jednoduch´ y datov´ y model. Model lze ch´apat jako haˇsovac´ı tabulku, kter´a se skl´ad´a z textov´ ych dvojic kl´ıˇc a hodnota. Kl´ıˇc jednoznaˇcnˇe identifikuje hodnotu. Hodnota m˚ uˇze obsahovat libovoln´ y blok dat (typicky BLOB) bez potˇreby anal´ yzy obsahu na stranˇe 23
NoSQL datab´aze
Datov´y model
datab´aze. Z´akladn´ı operace, kter´e tyto datab´aze podporuj´ı, jsou vloˇzen´ı hodnoty pro kl´ıˇc (put), z´ısk´an´ı hodnoty podle kl´ıˇce (get) a odstranˇen´ı kl´ıˇce a jeho hodnoty z datov´eho uloˇziˇstˇe (delete). Tento model se hod´ı napˇr´ıklad pro ukl´ad´an´ı informac´ı o uˇzivatelsk´ ych profilech. Kaˇzd´ y uˇzivatel m´a pˇridˇeleno vlastn´ı unik´atn´ı user_id, user_name a dalˇs´ı nastaven´ı, jako je jazyk a ˇcasov´a z´ona. Jelikoˇz existuje vˇzdy jedineˇcn´ y kl´ıˇc pro konkr´etn´ı objekt, staˇc´ı v datab´azi vyhledat pouze tento jedineˇcn´ y kl´ıˇc a z´ıskat v´ ysledky. Pokud by ale bylo poˇzadov´ano dotazovat se podle nˇejak´eho atributu uloˇzen´eho v poli hodnota, mus´ı b´ yt zvolen jin´ y datov´ y model. Typ datab´aze key/value je bez sch´ematu a pouˇz´ıv´a se pˇredevˇs´ım pro velk´ y objem nestrukturovan´ ych dat. V´ yhodou takov´ ychto datab´az´ı, kter´e jsou podobn´e souborov´ ym syst´em˚ um, je pˇredevˇs´ım velk´ y v´ ykon, rychlost, dobr´a ˇsk´alovatelnost a tak´e to, ˇze dvojice kl´ıˇc/hodnota mohou b´ yt r˚ uzn´ ych typ˚ u. Naopak za nev´ yhodu je povaˇzov´an aˇz pˇr´ıliˇs jednoduch´ y datov´ y model. Mezi nejzn´amˇejˇs´ı keyvalue datab´aze patˇr´ı Redis, Riak, Amazon DynamoDB, Oracle NOSQL Database, Memcached a Project Voldemort. Podrobnˇejˇs´ı informace viz kapiotla 4.9 a 4.10. [Pok12]
4.8.2
Dokumentov´ e datab´ aze
Dokumentovˇe orientovan´e datab´aze jsou rozˇs´ıˇren´ ym datov´ ym modelem key/value. Rozd´ıl je pˇredevˇs´ım v tom, ˇze z´akladn´ım prvkem kaˇzd´e dokumentov´e datab´aze jsou semistrutkurovan´e dokumenty. Kaˇzd´ y dokument je reprezentov´an pomoc´ı unik´atn´ıho kl´ıˇce, kter´ ym m˚ uˇze b´ yt jednoduch´ y ˇretˇezec. Data mohou b´ yt ukl´ad´ana ve form´atu XML (Extensible Markup Language), JSON (JavaScript Object Notation), BSON (Binary JSON) a v dalˇs´ıch fotm´atech. Pro ukl´ad´an´ı dokumentu je nutn´e dodrˇzet zvolen´ y form´at, kter´ y datab´aze podporuj´ı. Intern´ım jazykem je JavaScript. Hlavn´ı v´ yhodou dokumentov´eho modelu je, ˇze jednotliv´e dokumenty mohou m´ıt navz´ajem r˚ uznou strukturu, kter´a nemus´ı b´ yt pˇredem definov´ana. D´ıky tomu m˚ uˇze struktura dokumentu obsahovat velk´e mnoˇzstv´ı r˚ uzn´ ych informac´ı a tak´e, oproti klasick´ ym relaˇcn´ım datab´az´ım, m˚ uˇze mˇenit strukturu dat za bˇehu. JavaScript je v posledn´ı dobˇe hojnˇe vyuˇz´ıvan´ y na webu a proto se tento typ NoSQL datab´az´ı stal velmi popul´arn´ı pˇredevˇs´ım u webov´ ych v´ yvoj´aˇr˚ u. Mezi nejpouˇz´ıvanˇejˇs´ı dokumentovˇe orientovan´e datab´aze se ˇrad´ı MongoDB a CouchDB. [Tiw11][Nia13]
24
NoSQL datab´aze
Datov´y model
MongoDB MongoDB3 patˇr´ı mezi nejpopul´arnˇejˇs´ı dokumentovˇe orientovan´e datab´aze. Datab´aze byla vytvoˇrena firmou MongoDB Inc. (dˇr´ıve 10gen). Jedn´a se o open-source datab´azi napsanou v jazyce C++, kter´a nem´a strukturu (schema-free). MongoDB ukl´ad´a data jako dokumenty ve form´atu BSON. Maxim´aln´ı velikost dokumentu je 16 MB. Dokumenty jsou shromaˇzd’ov´any do kolekc´ı, kter´e se podobaj´ı tabulk´am z relaˇcn´ıch datab´az´ı, nemaj´ı vˇsak pevn´e sch´ema. Datov´ y model je velmi flexibiln´ı, jak´ekoliv pol´ıˇcko m˚ uˇze obsahovat v´ıce hodnot a m˚ uˇze v nˇem b´ yt uloˇzena dalˇs´ı datov´a struktura nebo m˚ uˇze z˚ ustat pr´azdn´e. Libovoln´e pole v dokumentu m˚ uˇze b´ yt indexovan´e, k dispozici je tak´e sekund´arn´ı indexov´an´ı. [Mon14] MongoDB disponuje vlastn´ım dotazovac´ım jazykem, kter´ y je velmi podobn´ y SQL. Podporuje mnoˇzinov´e operace, regul´arn´ı v´ yrazy nebo dokonce dovoluje spustit metodu napsanou v JavaScriptu na stranˇe serveru. Tak´e vyuˇz´ıv´a n´avrhov´ y vzor Map Reduce pro hromadn´e operace nad daty a sharding pro horizont´aln´ı ˇsk´alov´an´ı. Umoˇzn ˇuje master-slave replikaci, kde uˇzivatel do masteru zapisuje a ˇcte z nˇej. Slave slouˇz´ı klasicky jen pro ˇcten´ı nebo z´alohov´an´ı zkop´ırovan´ ych dat z prim´arn´ıho uzlu. Pokud dojde k v´ ypadku uzlu master, syst´em automaticky zabezpeˇc´ı zvolen´ı nov´eho prim´ı´arn´ıho uzlu, kter´ ym se se stane jeden ze sekund´arn´ıch uzl˚ u. [Klo12] Vˇsechnu dostupnou pamˇet’ RAM vyuˇz´ıv´a MongoDB jako cache pro data, aby nemuselo ustaviˇcnˇe pˇristupovat na disk. Je ale potˇreba sledovat zaplnˇen´ı kapacity disku a pamˇeti RAM. Pokud by byl disk zaplnˇen, tak MongoDB zablokuje vˇsechny operace vˇcetnˇe maz´an´ı. V pˇr´ıpadˇe, ˇze se zapln´ı pamˇet’ RAM, zpomal´ı se cel´ y syst´em na u ´roveˇ n rychlosti disku. [Hof10]
CouchDB Dokumentovˇe orientovan´a datab´aze CouchDB4 je napsan´a v jazyce Erlang a vyv´ıjena organizac´ı Apache Software Foundation jako open-source. Patˇr´ı k nejstarˇs´ım dokumentov´ ym datab´az´ım, prvn´ı verze vyˇsla jiˇz v roce 2005. Tato datab´aze je urˇcena pˇredevˇs´ım pro web, tak´e je vhodn´a pro pouˇzit´ı v mobiln´ıch zaˇr´ızen´ıch pˇredevˇs´ım kv˚ uli sv´ ym replikaˇcn´ım 3 4
https://www.mongodb.org/ http://couchdb.apache.org/
25
NoSQL datab´aze
Datov´y model
a synchronizaˇcn´ım schopnostem. Tato datab´aze b´ yv´a nainstalov´ana v mobiln´ıch telefonech a dalˇs´ıch mobiln´ıch zaˇr´ızen´ı tak, ˇze se synchronizuje s centr´aln´ı datab´az´ı kdykoliv je online. Pro dotazov´an´ı nab´ız´ı pouˇzit´ı REST HTTP API a pro ukl´ad´an´ı dat vyuˇz´ıv´a form´at JSON. CouchDB spravuje obdobnˇe jako MongoDB kolekce JSON dokument˚ u5 . Jednotliv´e dokumenty v r´amci kolekce nemaj´ı spoleˇcn´e sch´ema, pˇriˇcemˇz nab´ızej´ı dotazovac´ı kapacity prostˇrednictv´ım pohled˚ u. Obdobˇe jako v Map Reduce jsou pohledy vymezeny agregaˇcn´ımi funkcemi a souˇcasnˇe s t´ım tˇr´ıdˇeny. Datab´aze CouchDB podporuje tak´e peer-to-peer replikaci s automatickou detekc´ı konflikt˚ u. Zmˇeny dat jsou pravidelnˇe kop´ırov´any mezi servery, ˇc´ımˇz se eliminuje zraniteln´e m´ısto. V CouchDB je pro ukl´ad´an´ı vˇsech dat, dvojic kliˇc/hodnota, pouˇzit B-strom tak, ˇze je podporov´ano seˇrazen´ı podle kl´ıˇce. [Pok12]
4.8.3
Sloupcov´ e datab´ aze
Sloupcovˇe orientovan´e datab´aze si ukl´adaj´ı data po sloupc´ıch nam´ısto klasick´eho pˇr´ıstupu ukl´ad´an´ı dat po ˇra´dc´ıch. D´ıky tomu se uchovaj´ı data bez zbyteˇcn´eho zaplnˇen´ı m´ısta na disku, jelikoˇz se pˇri ukl´ad´an´ı nevytvoˇr´ı sloupec, pokud pro nˇej neexistuje hodnota. Tento pˇr´ıstup zlepˇsuje v´ ykon pˇredevˇs´ım v datov´ ych centrech a v analytick´ ych syst´emech, kter´e potˇrebuj´ı velk´e mnoˇzstv´ı agregovan´ ych dat.
Obr´azek 4.4: Datov´ y model v datab´azi Cassandra. [Mam11] 5
http://wiki.apache.org/couchdb/Introduction
26
NoSQL datab´aze
Datov´y model
Datov´ y model sloupcov´ ych NoSQL datab´az´ı tvoˇr´ı tˇri z´akladn´ı pojmy. Sloupec (Column) je nejniˇzˇs´ı u ´roveˇ n dat a je tvoˇren trojic´ı, kter´a se skl´ad´a ze jm´ena, hodnoty ˇ a ˇcasov´eho raz´ıtka. Casov´ a raz´ıtka modeluj´ı ˇcas a slouˇz´ı k rozliˇsov´an´ı verz´ı jednotliv´ ych hodnot. Super sloupce (Super column family) nemaj´ı ˇcasov´e raz´ıtko, obsahuj´ı vˇsak nˇekolik sloupc˚ u (ne vˇsak jin´ y super sloupec) a tvoˇr´ı agregovanou pojmenovanou jednotku. Struktura, kter´a obsahuje neomezen´e mnoˇzstv´ı ˇra´dk˚ u, se oznaˇcuje jako skupina sloupc˚ u (Column family). Kaˇzd´ y ˇr´adek m´a svoje jm´eno (kl´ıˇc). Jednotliv´e ˇra´dky jsou tvoˇreny sloupci pˇr´ıpadnˇe super sloupci. Skupina sloupc˚ u zn´azorˇ nuje, jak jsou data uloˇzen´a na disku. Cel´a struktura datov´eho modelu pro sloupcovou datab´azi Cassandra je zn´azornˇena na obr´azku 4.4. V´ yhodou tˇechto datab´az´ı je oproti jednoduch´emu pˇr´ıstupu key/value bohatˇs´ı datov´ y model. Takov´ato data se ˇrad´ı sp´ıˇse jiˇz do kategorie semistrukturovan´ ych dat. Hlavn´ımi pˇredstaviteli sloupcovˇe orientovan´ ych datab´az´ı jsou Cassandra, Google BigTable, HBase a dalˇs´ı. [Pok12][Rah10]
Cassandra V´ yznamn´ ym pˇredstavitelem sloupcovˇe orientovan´ ych NoSQL datab´az´ı je vysoce ˇsk´alovateln´a distribuovan´a datab´aze Apache Cassandra6 . Navrˇzen´a byla v roce 2008 pro soci´aln´ı s´ıt’ Facebook. V roce 2009 by tento open-source projekt pˇrevzat spoleˇcnost´ı Apache Software Foundation, kter´a ho st´ale rozv´ıj´ı. Cassandra je vyuˇz´ıv´ana spoleˇcnostmi Instagram, Cisco, Ubisoft, Twitter a dalˇs´ımi7 . Apache Cassandra je naps´ana v programovac´ım jazyce Java a spojuje vlastnosti distribuovan´eho syst´emu Amazon Dynamo s datov´ ym modelem Google BigTable. Jedn´a se o multiplatformn´ı datab´azi, m˚ uˇze b´ yt tak pouˇz´ıvan´a jak na platformˇe Windows, tak i na Unix. Cassandra m´a podobnˇe jako BigTable sloupcovˇe orientovan´ y datov´ y model (Column family). Vyuˇz´ıv´a v´ yˇse zm´ınˇen´ y model Map Reduce a d´ıky tomu je dobˇre horizont´alnˇe ˇsk´alovateln´a. Od projektu Dynamo pˇreb´ır´a symetrickou peer-to-peer architekturu a eventu´aln´ı konzistenci. Datab´aze poskytuje vlastn´ı dotazovac´ı jazyk CQL (Cassandra Query Language), kter´ y je svou syntax´ı podobn´ y jazyku SQL. [Bla10][Dat14][Str11] 6 7
http://cassandra.apache.org/ http://planetcassandra.org/companies/
27
NoSQL datab´aze
4.8.4
Datov´y model
Grafov´ e datab´ aze
Pˇredchoz´ı uveden´e modely NoSQL datab´az´ı se snaˇzily b´ yt bez jak´ehokoliv sch´ematu. V tˇechto datab´az´ı m˚ uˇzou z´aznamy naopak m´ıt velk´e mnoˇzstv´ı vztah˚ u. Grafov´e datab´aze jsou vlastnˇe druhem s´ıt’ov´ ych datab´az´ı, kter´e si ukl´adaj´ı data reprezentovan´a prostˇrednictv´ım grafu. Vˇetˇsinou se jedn´a o orientovan´ y a ohodnocen´ y graf, kter´ y je tvoˇren vrcholy (nodes) a hranami (edges). Jednotliv´e vrcholy pˇredstavuj´ı objekty a hrany jejich vazby. Do kaˇzd´eho vrcholu bˇeˇznˇe vstupuje a vystupuje nˇekolik hran. Mohou vˇsak existovat i takov´e vrcholy, kter´e mezi sebou ˇza´dn´e vazby nemaj´ı. Hrana mus´ı m´ıt vˇzdy jeden vrchol, ze kter´eho vystupuje, a dalˇs´ı vrchol, do kter´eho vstupuje. Vˇetˇsinou jsou data ukl´ad´ana na vrcholech, ale napˇr. u Neo4j mohou b´ yt data uloˇzena stejn´ ym zp˚ usobem ale na hran´ach. Na obr´azku 4.5 je zn´azornˇen pˇr´ıklad jednoduch´eho modelu grafov´e datab´aze. Vˇsechny vrcholy obsahuj´ı vlastnosti a mezi kaˇzd´ yma dvˇema vrcholy existuje hrana, kter´a t´eˇz obsahuje nˇejakou vlastnost. [Pok12]
Id:á100 Značka:ázná Od:á23.á4.á2009
Id:á1 Jméno:áJan Věk:á18
é
Id:á3 Jméno:ácyklistika Typ:áskupina
ne m
v 07 no :á1 le Id a:áč k
a I O čka d:á1 d: :áj 05 á8 e_ .á8 č .á2 len 01 em 1
Zn ačk Id:á1 a:á 06 je_ čle
Zna Id:á10 4 čka :áčl eno vé
Id:á103 Značka:ázná Od:á20.á9.á2010
ač Zn
Zn
Id:á2 Jméno:áEva Věk:á19
Obr´azek 4.5: Uk´azkov´ y model grafov´e datab´aze. [Pok12] Grafov´e datab´aze se v souˇcasn´e dobˇe velmi rychle rozv´ıjej´ı. Pouˇz´ıvaj´ı se pˇredevˇs´ım pro ˇreˇsen´ı u ´loh, jeˇz je velmi obt´ıˇzn´e spravovat v klasick´ ych relaˇcn´ıch datab´az´ıch. 28
NoSQL datab´aze
Riak
Jejich v´ yhodou je moˇznost pouˇz´ıt grafov´e algoritmy pro hled´an´ı nejkratˇs´ı cesty mezi dvˇema uzly, nalezen´ı minim´aln´ı kostry grafu nebo napˇr. Dijkstr˚ uv algoritmus. Tyto datab´aze nach´azej´ı vyuˇzit´ı pˇredevˇs´ım u soci´aln´ıch s´ıt´ı, kter´e vyˇzaduj´ı v´est z´aznamy o velk´em poˇctu a typu vztah˚ u. V´ yznamn´ ymi pˇredstaviteli grafov´ ych datab´az´ı jsou Neo4j, Titan a OrientDB8 .
Neo4j Neo4j9 je velmi popul´arn´ı robustn´ı datab´azov´ y syst´em, kter´ y je velmi ˇsk´alovateln´ y a vysoce v´ ykonn´ y. Byl vytvoˇren´ y v programovac´ım jazyce Java spoleˇcnost´ı Neo Technology v roce 2007. Na rozd´ıl od ostatn´ıch NoSQL datab´az´ı umoˇzn ˇuje transakˇcn´ı zpracov´an´ı s u ´plnou podporou ACID vlastnost´ı. Zvl´adne ukl´adat data i s nˇekolika miliardami uzl˚ u a vztah˚ u, kter´e dok´aˇze vysokorychlostnˇe zpracov´avat. Datab´aze Neo4j pouˇz´ıv´a vlastn´ı dotazovac´ı jazyk Cypher, kter´ y inspirov´an jazyky SQL a SPARQL. Cypher je deklarativn´ı jazyk, kter´ y dovoluje popsat, co a jak se m´a v datab´azi nal´ezt. D´ıky podpoˇre vlastn´ıho REST API, kter´e je pouˇz´ıv´ano pro komunikaci mezi klientem a datab´azov´ ym serverem pomoc´ı protokolu HTTP, se Neo4j vyuˇz´ıv´a v modern´ıch webov´ ych aplikac´ıch. Hod´ı se pro pouˇzit´ı u soci´aln´ıch s´ıt´ı, r˚ uzn´ ych wikipedi´ıch a dalˇs´ıch s´ıt’ovˇe orientovan´ ych webov´ ych dat. Obdobnˇe, jako v pˇr´ıpadˇe MongoDB, vyuˇz´ıv´a Neo4j replikaci master-slave. Neo4j vyuˇz´ıvaj´ı napˇr´ıklad spoleˇcnosti Adobe, EBay nebo online ˇcasopis CHIP10 . [Hof09]
4.9
Riak
Riak11 je open-source datab´azov´ y syst´em, kter´ y vyuˇz´ıv´a principy Amazon Dynamo. Tento datab´azov´ y syst´em, kter´ y je napsan´ y v jazyce Erlang, byl vytvoˇren firmou Basho Technologies v roce 2009. Slouˇz´ı pˇrev´aˇznˇe jako distribuovan´e uloˇziˇstˇe typu key/value. Riak je urˇcen pˇredevˇs´ım pro web a webov´e aplikace a podporuje operaˇcn´ı syst´emy Linux, BSD, Mac OS X a Solaris. [Cat11] 8
http://db-engines.com/en/ranking/graph+dbms http://www.neo4j.org/ 10 http://www.neotechnology.com/customers/ 11 http://basho.com/ 9
29
NoSQL datab´aze
Riak
Objekty Riaku, kter´e mohou b´ yt ve form´atu JSON, obsahuj´ı unik´atn´ı hodnotu s kl´ıˇcem. Dvojice je uloˇzena v tzv. bucketu (do ˇceˇstiny volnˇe pˇreloˇzeno jako kbel´ık). Hodnotami pro jednotliv´e kl´ıˇce m˚ uˇze b´ yt cokoliv, od prost´eho textu, JSON nebo XML po obr´azky a video soubory. Bucket je vlastnˇe jmenn´ y prostor pro kl´ıˇce. M´a podobnou funkci jako tabulky v relaˇcn´ıch datab´az´ı nebo jako adres´aˇre ve file syst´emu. Bucket spoleˇcnˇe s kl´ıˇcem vytv´aˇr´ı unik´atn´ı identifik´ator pro konkr´etn´ı hodnotu. Riak obsahuje kromˇe rozhran´ı pˇr´ımo pro jazyk Erlang tak´e i REST rozhran´ı, kter´e umoˇzn ˇuje podporu knihoven ostatn´ıch jazyk˚ u jako je Java, Python, PHP, .NET a mnoho dalˇs´ıch. N´aslednˇe je uk´az´an k´od pro vytvoˇren´ı a ˇcten´ı hodnot z bucketu v Riaku pomoc´ı jazyku Erlang. Ukl´ad´a se integer 1 do kl´ıˇce pojmenovan´eho one“. ” %% Creating Objects In Riak %% For these examples we will be using the "test" bucket. MyBucket = <<"test">>. Val1 = 1. Obj1 = riakc_obj:new(MyBucket, <<"one">>, Val1). riakc_pb_socket:put(Pid, Obj1). %% Reading Objects From Riak {ok, Fetched1} = riakc_pb_socket:get(Pid, MyBucket, <<"one">>). Val1 =:= binary_to_term(riakc_obj:get_value(Fetched1)).
Vˇsechny uzly v distribuovan´em syst´emu Riak obsahuj´ı kompletn´ı nez´avislou kopii dat. Riak automaticky replikuje data pomoc´ı peer-to-peer replikace, defaultnˇe ˇ adn´ je nastaven poˇcet replikac´ı na tˇri. Z´ y uzel nem´a vˇetˇs´ı odpovˇednost neˇz jin´ y a ˇza´dn´ y uzel nem´a u ´lohy, kter´e by vykon´avaly jin´e uzly. Kv˚ uli tomu i pˇri v´ ypadku vˇetˇs´ıho poˇctu uzl˚ u je st´ale moˇzno ˇc´ıst a zapisovat data, ˇc´ımˇz je zajiˇstˇena ˇsk´alovatelnost a vysok´a tolerance proti v´ ypadku uzlu. Pokud je uzel nedostupn´ y, pˇreb´ır´a jeho operace sousedn´ı uzel. Pˇri n´avratu nedostupn´eho uzlu mu jeho soused poˇsle zpˇet aktualizovan´a data. Cluster je rozdˇelen pomoc´ı takzvan´eho Riak ringu, d´ıky ˇcemuˇz bˇeˇz´ı na jednom fyzick´em uzlu nˇekolik virtu´aln´ıch (vnode). Data jsou distribuov´ana pomoc´ı konzistentn´ı haˇsovac´ı funkce. Funguje to tak, ˇze pokud se prov´ad´ı nˇejak´a operace s key/value v Riaku, je n´aslednˇe haˇsov´an´a kombinace bucketu a kl´ıˇce. V´ ysledek haˇsovac´ı funkce je namapov´an na 160-bitov´ y integrov´ y prostor, kter´ y je rovnomˇernˇe rozdˇelen na ˇc´asti. Na obr´azku 4.6 je zn´azornˇen ring pro 4 fyzick´e uzly, kter´e se dˇel´ı na 32 ˇc´ast´ı spravovan´ ych 32 virtu´aln´ıma uzly. Kaˇzd´ y ze ˇctyˇr fyzick´ ych stroj˚ u m´a n´arok na osm virtu´aln´ıch uzl˚ u, t´ım se stroj st´av´a zodpovˇedn´ y za vˇsechny kl´ıˇce, kter´e jsou reprezentov´any osmi virtu´aln´ımi uzly. Datab´azov´ y syst´em Riak m´a implementovanou schopnost vyuˇz´ıvat jiˇz v´ yˇse zm´ı30
NoSQL datab´aze
Redis
nˇen´ y model Map Reduce. Definice jednotliv´ ych funkc´ı je syst´emu pˇred´av´ana ve form´atu JSON. Pro Map Reduce je moˇzn´e vyuˇz´ıt indexy, kter´e Riak podporuje. Indexace je zajiˇstˇena pomoc´ı pˇriˇrazen´ı nˇekolika hodnot dan´emu indexovac´ımu kl´ıˇci.
Obr´azek 4.6: Riak ring. [Ria11]
Riak se v praxi vyuˇz´ıv´a napˇr´ıklad v projektu GitHub nebo v projektech firem Bestbuy a Dell12 . [Ria11][Red12]
4.10
Redis
Redis13 patˇr´ı k nejv´ yznamnˇejˇs´ım NoSQL datab´az´ım, ˇrad´ı se do kategorie typu key/value. Byl vytvoˇren v roce 2009 jako soukrom´ y projekt Salvatora Snafilippa. Pozdˇeji byl projekt uvolnˇen jako open-source a pro jeho vysokou popularitu se do jeho v´ yvoje zapojila firma VMWare, od roku 2013 je v´ yhradnˇe sponzorov´an spoleˇcnost´ı Pivotal14 . Redis je naps´an v jazyce C a vyznaˇcuje se vysok´ ym v´ ykonem. Ofici´alnˇe je podporov´an pouze na UNIX platformˇe, ale existuj´ı projekty pro verzi Windows. Nejedn´a se o klasickou datab´azi typu key/value, kromˇe jednoduch´eho ukl´ad´an´ı 12
http://basho.com/riak-users/ http://redis.io/ 14 http://redis.io/topics/sponsors 13
31
NoSQL datab´aze
Redis
ˇretˇezce k dan´emu kl´ıˇc umoˇzn ˇuje ukl´adat i sloˇzitˇejˇs´ı struktury. Tak´e se odliˇsuje jin´ ym pˇr´ıstupem uchov´av´an´ı dat. Redis si totiˇz veˇsker´a sv´a data drˇz´ı v RAM pamˇeti. D´ıky tomu, ˇze pˇr´ıstup k dat˚ um v pamˇeti b´ yv´a ˇr´adovˇe rychlejˇs´ı neˇz ˇcten´ı uloˇzen´ ych dat z disku, se st´av´a jednou z nejrychlejˇs´ıch datab´az´ı ve sv´em oboru. Vyuˇz´ıvaj´ı ho spoleˇcnosti jako je Twitter, GitHub, StackOverflow a dalˇs´ı15 . Na sv´ ych domovsk´ ych str´ank´ach poskytuje Redis v´ ybornou dokumentaci. Ta je velmi jednoduch´a, pˇrehledn´a a tak´e kompletn´ı, ˇcasto b´ yv´a doplnˇena o koment´aˇre uˇzivatel˚ u a interaktivn´ı moˇznost vyzkouˇsen´ı si pˇr´ıkaz˚ u pˇr´ımo na dan´e str´ance. K dispozici je i jednoduch´ y interaktivn´ı tutori´al pˇr´ıkazov´e ˇra´dky Redisu16 .
Struktura dat Redis podporuje na rozd´ıl od jin´ ych NoSQL datab´az´ı typu key/value pˇet datov´ ych typ˚ u. Vˇsechna data jsou uloˇzena do spoleˇcn´eho prostoru a rozliˇsov´ana jsou d´ıky kl´ıˇc˚ um. • String (ˇretˇezec) – jedn´a se o nejjednoduˇsˇs´ı strukturu, kter´a m˚ uˇze obsahovat jak´ ykoliv druh dat, napˇr. serializovan´ y objekt nebo JPEG. Jeho velikost je omezena na 512 MB. S ˇretˇezci je moˇzn´e prov´adˇet z´akladn´ı operace. Redis tak´e umoˇzn ˇuje prov´adˇet z´akladn´ı matematick´e operace, jako je zv´ yˇsen´ı ˇci sn´ıˇzen´ı uloˇzen´e hodnoty pomoc´ı pˇr´ıkaz˚ u INCR, DECR a INCRBY. Pokud jsou tyto pˇr´ıkazy pouˇzity, pak se k ˇretˇezci pˇristupuje jako k ˇc´ıslu, provede se nad n´ım poˇzadovan´a operace a opˇet se uloˇz´ı jako ˇretˇezec. • List (seznam) – List v Redisu je jednoduch´ y seznam ˇretˇezc˚ u seˇrazen´ y podle 32 poˇrad´ı vloˇzen´ı. Maxim´aln´ı velikost seznamu je 2 −1 prvk˚ u. Je moˇzn´e pˇrid´avat nov´ y ˇretˇezec na zaˇc´atek (LPUSH) nebo konec seznamu (RPUSH). Seznamy dok´aˇz´ı pˇristupovat velmi rychle k dat˚ um ze zaˇca´tku ˇci konce seznamu. Naopak, pokud je potˇreba pˇristupovat k prvk˚ um z prostˇredku velmi velk´eho seznamu, je pot´e ˇcasov´a sloˇzitost operace O(N ). • Set (mnoˇzina) – je to neseˇrazen´a kolekce ˇretˇezc˚ u, do kter´e je moˇzno pˇrid´avat, odeb´ırat a testovat na existenci ˇcleny s ˇcasovou sloˇzitost´ı O(1). Maxim´aln´ı poˇcet prvk˚ u je 232 − 1. Mnoˇzina nepodporuje duplicitn´ı ˇcleny, pokud se tedy jeden prvek pˇrid´a v´ıcekr´at, bude mnoˇzina obsahovat st´ale jen jednu kopii tohoto prvku. Nad mnoˇzinami je moˇzno prov´adˇet mnoho operac´ı, jako je sjednocen´ı (SUNION), pr˚ unik (SINTER) nebo rozd´ıl (SDIFF). 15 16
http://redis.io/topics/whos-using-redis http://try.redis.io/
32
NoSQL datab´aze
Redis
• Hash (mapa) – hash je v Redisu mapa a jedn´a se o nejkomplexnˇejˇs´ı datov´ y typ. Pouˇz´ıv´a se pˇredevˇs´ım k ukl´ad´an´ı objekt˚ u. Mapa je vlastnˇe kolekce, kde je pod dan´ ym kl´ıˇcem uloˇzena dvojice pole a hodnota. Tento zp˚ usob ukl´ad´an´ı objekt˚ u zab´ır´a jen velmi malou ˇca´st pamˇeti, proto je dobr´e pouˇz´ıvat mapy, kdykoliv je to moˇzn´e. Kaˇzd´a mapa je schopna uloˇzit 232 −1 dvojic pol´ı a hodnot. • SortedSet (setˇr´ıdˇen´a mnoˇzina) – setˇr´ıdˇen´a mnoˇzina se liˇs´ı od jednoduch´ ych mnoˇzin v tom, ˇze k prvk˚ um se pˇrid´av´a jeˇstˇe tzv. sk´ore. To je ˇc´ıseln´a hodnota, podle kter´e jsou pak z´aznamy seˇrazen´e. D´ıky tomu je moˇzn´e vyb´ırat napˇr´ıklad mnoˇziny spadaj´ıc´ı do urˇcit´eho intervalu sk´ore. Redis podporuje tzv. expiraci kl´ıˇc˚ u u vˇsech podporovan´ ych datov´ ych struktur. Kaˇzd´emu kl´ıˇci je moˇzn´e zadat tzv. d´elku jeho ˇzivota pomoc´ı pˇr´ıkazu EXPIRE a poˇctem ˇ sekund. Po uplynut´ı t´eto doby je kl´ıˇc z datab´aze automaticky odstranˇen. Zivotnost kl´ıˇce je vr´acena pomoc´ı pˇr´ıkazu TTL (time to live). [Red12]
Perzistence dat Datab´azov´ y syst´em Redis si udrˇzuje celou datab´azi v operaˇcn´ı pamˇeti RAM. V pˇr´ıpadˇe v´ ypadku serveru by mohlo ale doj´ıt ke ztr´atˇe dat, aby byla ztr´ata dat co nejmenˇs´ı, ukl´ad´a si Redis obraz pamˇeti na pevn´ y disk. Redis podporuje dva druhy 17 ukl´ad´an´ı dat, RDB a AOF , kter´e je moˇzn´e zkombinovat. RDB (Random Database File) funguje tak, ˇze se v urˇcit´ ych intervalech uloˇz´ı aktu´aln´ı kopie datab´aze (snapshot) na disk. Tento zp˚ usob je velmi vhodn´ y pro obnovu dat po hav´arii a pro klasick´e z´alohov´an´ı dat. Nehod´ı se vˇsak v pˇr´ıpadˇe, kde je i minim´aln´ı ztr´ata dat od posledn´ıho z´alohov´an´ı nepˇr´ıpustn´a. Standardnˇe je nastaveno ukl´ad´an´ı po 60 vteˇrin´ach a pˇri 10 000 zmˇen´ach kl´ıˇc˚ u, nebo po kaˇzd´ ych pˇeti minut´ach a deseti zmˇenˇen´ ych kl´ıˇc´ıch, pˇr´ıpadnˇe za 15 minut a jedn´e zmˇenˇe kl´ıˇce. AOF (Append Only File) je bezpeˇcnˇejˇs´ı alternativou pro z´alohov´an´ı dat. Umoˇzn ˇuje zapnout logov´an´ı vˇsech operac´ı ovlivˇ nuj´ıc´ı data v datab´azi do logovac´ıho souboru na pevn´em disku. V pˇr´ıpadˇe, ˇze dojde k obnovˇe dat, jsou vˇsechny pˇr´ıkazy z logu naˇcteny a provedeny. T´ım je datab´aze obnovena do posledn´ıho zn´am´eho stavu. Nev´ yhodou AOF je, ˇze logovac´ı soubor b´ yv´a ˇcasto vˇetˇs´ı neˇz ekvivalentn´ı RDB soubor. Kv˚ uli tomu b´ yv´a obnova dat pomoc´ı AOF v´ yraznˇe pomalejˇs´ı neˇz pˇri obnovˇe dat v RDB. [Red12][Red14] 17
http://redis.io/topics/persistence
33
NoSQL datab´aze
Redis
Replikace Redis pouˇz´ıv´a master-slave replikaci, kter´a byla pops´ana v kapitole 4.5. Replikace je asynchronn´ı a neblokuj´ıc´ı a je vhodn´a pro zajiˇstˇen´ı redundance dat a tak´e pro ˇsk´alovatelnost. D´ıky asynchronn´ı replikaci je moˇzn´e norm´alnˇe pracovat s datab´az´ı, zat´ımco jsou data synchronizov´ana s jin´ ym uzlem. Sekund´arn´ı uzel m˚ uˇze b´ yt hlavn´ım uzlem pro dalˇs´ı uzly a vytv´aˇr´ı se tak stromov´a struktura. V pˇredchoz´ıch verz´ıch Redisu bylo umoˇznˇeno zapisovat data i na sekund´arn´ı uzly, kter´e se ale pˇri synchronizaci s hlavn´ım uzlem pˇrepsaly. Od verze 2.6 jsou sekund´arn´ı uzly defaultnˇe nastaveny pro ˇcten´ı. Replikace se spravuje pˇr´ıkazy SYNC a SLAVEOF pro urˇcen´ı prim´arn´ıho a sekund´arn´ıho uzlu. U sekund´arn´ıch uzl˚ u je moˇzn´e nastavit prioritu, podle kter´e pˇri v´ ypadku hlavn´ıho uzlu vybere Redis Sentinel nov´ y prim´arn´ı uzel. Redis Sentinel je zat´ım vyv´ıjen´ y syst´em pro spr´avu nˇekolika bˇeˇz´ıc´ıch instanc´ı Redisu. Pouˇz´ıv´a se pro monitorov´an´ı, notifikaci, automatick´e pov´ yˇsen´ı sekund´arn´ıho uzlu na prim´arn´ı, pokud je hlavn´ı uzel nedostupn´ y. [Red12][Seg12] V nov´e beta verzi 3.0.0 poskytuje Redis moˇznost pouˇzit´ı Redis Cluster, kter´ y by poskytoval ˇreˇsen´ı pro automatick´e shardov´an´ı dat pˇres nˇekolik Redis uzl˚ u. Pro moˇznost ukl´ad´an´ı distribuovan´ ych dat je tak´e moˇznost ˇreˇsen´ı na stranˇe klienta, kter´ y d´ıky sv´emu algoritmu m˚ uˇze rozhodovat o instanci, na kterou budou data uloˇzena. Tˇret´ı moˇznost´ı rozdˇelen´ı dat je Twemproxy vyvinut´ y pro Twitter. Twemproxy je mezivrstva mezi klientem a instanc´ı Redisu . Klient tak nekomunikuje pˇr´ımo s Redisem ale s proxy, kter´a pˇrepos´ıl´a poˇzadavky pro dan´ y uzel. [Red14]
Syst´ emov´ e rozhran´ı Redis pouˇz´ıv´a klasickou architekturu klient-server a komunikuje pomoc´ı protokolu TCP/IP. Standardn´ı instance serveru bˇeˇz´ı na portu 6379. Server tvoˇr´ı vˇzdy jednovl´aknov´ y proces a klient je v z´akladu reprezentov´an pˇr´ıkazovou ˇra´dkou Redis-cli. Alternativn´ı klienty lze implementovat pomoc´ı ˇcetn´ ych knihoven, v r˚ uzn´ ych programovac´ıch jazyc´ıch, jejichˇz seznam se nach´az´ı na domovsk´ ych str´ank´ach Redisu. K dispozici je i velk´e mnoˇzstv´ı n´astroj˚ u a doplˇ nk˚ u. Stejnˇe jako nˇekter´e jin´e datab´aze umoˇzn ˇuje Redis vol´an´ı vlastn´ıch skript˚ u nad instanc´ı datab´aze. Skripty mus´ı b´ yt naps´any v jazyce Lua. V konfiguraˇcn´ım souboru lze tak´e nastavit poˇcet datab´az´ı. Defaultn´ı poˇcet je nastaven na ˇsestn´act. Je vhodn´e poˇcet datab´az´ı zmˇenit pˇred prvn´ım spuˇstˇen´ım serveru a d´ale ho jiˇz nemˇenit. Pokud se pokus´ı Redis po opˇetovn´em spuˇstˇen´ı naˇc´ıst data z dump.rdb, kter´ y m´a data uloˇzena pro jin´ y poˇcet datab´az´ı, neˇz m´a aktu´aln´ı instance Redisu, nejsou data korektnˇe
34
NoSQL datab´aze
Redis
naˇctena. [Red14]
Rozhran´ı pro programov´ an´ı aplikac´ı API neboli rozhran´ı pro programov´an´ı aplikaci poskytuje Redis pro ˇsirokou ˇsk´alu programovac´ıch jazyk˚ u18 . Ofici´aln´ım klientem pro jazyk C je hiredis, kter´ y podporuje vˇsechny poskytovan´e pˇr´ıkazy. Doporuˇcen´e knihovny pro jazyk C# jsou knihovna ServiceStack.Redis a novˇe vyvinut´ y StackExchange.Redis, kter´ y nahradil p˚ uvodn´ı projekt BookSleeve. Pro jazyk Java je k dispozici knihovna Jedis a Reddisson. Uvedeny jsou jen hlavn´ı z´astupci pro nejpouˇz´ıvanˇejˇs´ı jazyky, na str´ank´ach Redisu je ale mnohem vˇetˇs´ı seznam poskytuj´ıc´ı odkazy na dalˇs´ı projekty a knihovny. Redis podporuje mnoho pˇr´ıkaz˚ u. Vˇsechny jsou uvedeny na domovsk´ ych str´an19 k´ach s podrobn´ ym popisem . N´asleduje pˇrehled nˇekter´ ych z´akladn´ıch pˇr´ıkaz˚ u, jeˇz jsou souˇca´st´ı vˇetˇsiny poskytovan´ ych API. Pˇr´ıklady jsou ps´any ve form´atu pro pˇr´ıkazovou ˇra´dku Redis-cli. >SET key1 Hello >GET key1
V´ yˇse uveden´ y pˇr´ıklad zobrazuje pˇrid´an´ı a n´asledn´e vyhled´an´ı ˇretˇezce oznaˇcen´eho kl´ıˇcem key1 s hodnotou Hello. Pokud se provedla operace spr´avnˇe a nevrac´ı ˇz´adnou hodnotu, je vyps´ana hodnota OK. >LRANGE mylist 0 -1
Tento pˇr´ıkaz umoˇzn ˇuje vypsat cel´ y seznam. Podle zadan´eho intervalu je moˇzn´e vypsat jen nˇekter´e hodnoty seznamu. Do mnoˇziny se nov´e hodnoty pˇrid´avaj´ı pˇr´ıkazem SADD. K v´ ypisu obsahu mnoˇziny pak slouˇz´ı pˇr´ıkaz SMEMBERS. Podobn´ ym pˇr´ıkazem je ZADD u seˇrazen´e mnoˇziny, nutn´e je vˇsak k nˇemu zadat ˇc´ıseln´e sk´ore. Moˇzn´e je zad´avat souˇcasnˇe i v´ıce dvojic sk´ore hodnota. N´aslednˇe se seˇrazen´a mnoˇzina vyp´ıˇse obdobn´ ym pˇr´ıkazem, jako je u seznam˚ u. Pˇr´ıznak WITHSCORES umoˇzn ˇuje vypsat tak´e sk´ore. >ZADD myzset 1 one 18 19
http://redis.io/clients http://redis.io/commands
35
NoSQL datab´aze
Redis
>ZADD myzset 2 two 1 uno >ZRANGE myzset 0 -1 WITHSCORES 1) "one" 2) "1" 3) "uno" 4) "1" 5) "two" 6) "2"
Pro vytvoˇren´ı nov´eho hash kl´ıˇce je pouˇz´ıv´an pˇr´ıkaz HSET, u kter´eho se mus´ı zadat jm´eno kl´ıˇce, jm´eno hash kl´ıˇce a hodnota. Pro v´ ybˇer kl´ıˇce slouˇz´ı pˇr´ıkaz HGET. HGETALL je pro vyps´an´ı vˇsech hash kl´ıˇc˚ u a hash hodnot uloˇzen´ ych pod dan´ ym kl´ıˇcem. >HSET user name Karel >HSET user surname Novak >HGETALL user 1) "name" 2) "Karel" 3) "surname" 4) "Novak"
D´ale je uvedeno nˇekolik dalˇs´ıch zaj´ımav´ ych a uˇziteˇcn´ ych pˇr´ıkaz˚ u, kter´e Redis podporuje. BGREWRITEAOF Asynchronnˇe pˇrep´ıˇse append-only soubor. CONFIG GET Vr´at´ı hodnotu konfigurace podle zadan´eho parametru. EXPIRE Nastav´ı ˇcas ˇzivota kl´ıˇce ve vteˇrin´ach. MIGRATE Atomicky pˇresune kl´ıˇc z jedn´e instance Redisu do druh´e. PING Ping serveru. RENAME Pˇrejmenuje kl´ıˇc. RPOPLPUSH Vezme posledn´ı prvek v seznamu, pˇrid´a ho do jin´eho a vyp´ıˇse jej. SAVE Synchronnˇe uloˇz´ı data na disk. SHUTDOWN Synchronnˇe uloˇz´ı data na disk a pak se vypne server. TTL Z´ısk´a zb´ yvaj´ıc ˇcas ˇzivota kl´ıˇce.
36
5 Porovn´an´ı NoSQL datab´az´ı s relaˇ cn´ımi datab´ azemi Relaˇcn´ı datab´aze vyuˇz´ıvaj´ıc´ı dotazovac´ı jazyk SQL jsou nejpouˇz´ıvanˇejˇs´ım dneˇsn´ım typem datab´az´ı. Proˇsly si dlouh´ ym v´ yvojem a dnes jsou tak na vysok´e u ´rovni poskytovan´ ych sluˇzeb a spolehlivosti. Za jejich nejvˇetˇs´ı pˇrednost je povaˇzovan´a schopnost snadn´e transformace objekt˚ u z re´aln´eho svˇeta do tabulek a relac´ı. U relaˇcn´ıch datab´az´ı je d´ıky transakˇcn´ımu zpracov´an´ı zajiˇstˇena siln´a konzistence dat. To se napˇr´ıklad hod´ı pro klasick´e bankovn´ı syst´emy, kde je vyˇzadov´ano dodrˇzen´ı ACID vlastnost´ı. Probl´em s relaˇcn´ımi datab´azemi m˚ uˇze nastat, pokud je potˇreba zpracov´avat velk´e mnoˇzstv´ı r˚ uzn´ ych dat, kter´a mohou b´ yt jeˇstˇe distribuovan´a. Vzr˚ ustaj´ı tak poˇzaˇ sen´ım pak m˚ davky na v´ ykon, ˇsk´alovatelnost a flexibilitu. Reˇ uˇze b´ yt sloˇzit´e ˇr´ızen´ı shardov´an´ı v aplikaci nebo poˇr´ızen´ı drah´eho SQL ˇreˇsen´ı, ani jedna z moˇznost´ı nen´ı ide´aln´ı. Dalˇs´ım probl´emem jsou relace mezi v´ıce tabulkami. Pro propojen´ı v´ıce tabulek se pouˇz´ıv´a SQL pˇr´ıkaz JOIN. Pokud se tento pˇr´ıkaz pˇr´ıliˇs vyuˇz´ıv´a, m˚ uˇze doch´azet k v´ yrazn´emu sn´ıˇzen´ı rychlosti vykon´av´an´ı dotazu nad v´ıce tabulkami. V tˇechto pˇr´ıpadech se jev´ı v´ yhodnˇejˇs´ı pˇrej´ıt k NoSQL datab´az´ım, kter´e tyto probl´emy ˇreˇs´ı jednoduˇse a efektivnˇe. [Sto10] NoSQL datab´aze byly vytvoˇreny na z´akladˇe potˇreby zpracov´avat a uchov´avat velk´e mnoˇzstv´ı nestrukturovan´ ych dat, kter´a st´ale nar˚ ustaj´ı. Jsou vhodn´e pˇredevˇs´ım v oblastech, kde je velk´a pracovn´ı z´atˇeˇz, ale dotazy na data nejsou n´aroˇcn´e. Pˇr´ıkladem pouˇzit´ı mohu b´ yt napˇr´ıklad u ´daje o uˇzivatel´ıch ze soci´aln´ı s´ıtˇe, r˚ uzn´e soci´aln´ı grafy atd. Data mohou m´ıt v dneˇsn´ı dobˇe r˚ uznou strukturu, kterou relaˇcn´ı datab´aze kv˚ uli sv´emu pˇreddefinovan´emu sch´ematu neum´ı uchovat. Na rozd´ıl od toho NoSQL datab´aze maj´ı dynamick´e sch´ema pr´avˇe pro nestrukturovan´a data. D´ıky jin´emu pˇr´ıstupu jsou NoSQL datab´aze horizont´alnˇe ˇsk´alovateln´e, ˇc´ımˇz umoˇzn ˇuj´ı distribuovat data na v´ıce server˚ u a rozloˇz´ı tak zat´ıˇzen´ı jednotliv´ ych uzl˚ u. Relaˇcn´ı datab´aze jsou pˇredevˇs´ım vertik´alnˇe ˇsk´alovateln´e, a tud´ıˇz u nich nar˚ ustaj´ı poˇzadavky na v´ ykon serveru. Nev´ yhodou NoSQL datab´az´ı b´ yv´a jejich jednoduch´ y model, nestandardn´ı dotazovac´ı jazyky oproti SQL a tak´e jejich neznalost mezi program´atory. Dalˇs´ım negativem nˇekter´ ych NoSQL datab´az´ı je to, ˇze nepodporuj´ı integritn´ı omezen´ı a ACID. [Cat11]
37
Porovn´an´ı NoSQL datab´az´ı s relaˇcn´ımi datab´azemi
Obr´azek 5.1: Uk´azka pouˇzit´ı nˇekolika datab´azov´ ych syst´em˚ u v jednom projektu. [Sad12]
Jak relaˇcn´ı, tak NoSQL datab´aze maj´ı v dneˇsn´ı dobˇe sv´a opodstatnˇen´ı v urˇcit´ ych pˇr´ıpadech pouˇzit´ı. NoSQL nem´a za u ´kol nahradit relaˇcn´ı datab´aze. Je to vlastnˇe jen alternativn´ı ˇreˇsen´ı, kter´e je v nˇekter´ ych pˇr´ıpadech v´ yhodnˇejˇs´ı. U vˇetˇs´ıch aplikac´ı m˚ uˇze ale doj´ıt k tomu, ˇze napˇr. na nˇekter´a data je vhodn´a relaˇcn´ı datab´aze, na dalˇs´ı data dokumentov´a NoSQL a na u ´plnˇe jin´a data tˇreba key/value datab´aze. Potom se takov´ yto pˇr´ıstup, kdy se kombinuje v jednom projektu pouˇzit´ı v´ıce datab´az´ı, zn´azornˇen´ y na obr´azku 5.1, oznaˇcuje jako polyglot persistence. [Aug11]
38
6 Anal´yza probl´emu V t´eto ˇc´asti diplomov´e pr´ace se rozeb´ıraj´ı moˇznosti pro tvorbu spr´avce NoSQL da´ tab´aze. Ukolem je pro vybranou datab´azi vytvoˇrit spr´avce, kter´ y bude poskytovat uˇzivatelsky pˇr´ıjemnou pr´aci s uloˇzen´ ymi daty. Zde jsou pops´any moˇznosti v´ ybˇeru typu NOSQL datab´aze a pˇr´ısluˇsn´eho syst´emu. D´ale je vˇenov´ana ˇca´st textu porovn´an´ı webov´eho nebo desktopov´eho rozhran´ı. N´aslednˇe je uvedeno nˇekolik existuj´ıc´ıch ˇreˇsen´ı, kter´a jsou v˚ uˇci v´ ysledn´emu programu referenˇcn´ı, a z nich vypl´ yvaj´ıc´ı funkce v´ ysledn´e aplikace.
6.1
Typ NoSQL datab´ aze
Ve v´ yˇse zm´ınˇen´e podkapitole 4.10, byly uvedeny ˇctyˇri kategorie NoSQL datab´az´ı. Kaˇzd´a kategorie m´a sv´a vlastn´ı specifika a moˇznosti pouˇzit´ı. Jiˇz na zaˇc´atku pr´ace byla pozornost vˇenov´ana pˇredevˇs´ım datab´az´ım typu key/value. Grafov´e a dokumentovˇe orientovan´e datab´aze jsou v dneˇsn´ı dobˇe totiˇz velmi obl´ıben´e a tud´ıˇz existuje i velk´a ˇrada spr´avc˚ u tˇechto datab´azov´ ych syst´em˚ u. Pro grafovou datab´azi Neo4j existuje napˇr. program Gephi1 nebo Linkurious2 , u MongoDB je to tˇreba program Fluentd3 a mnoho dalˇs´ıch. Zb´ yvaj´ıc´ı dva druhy NoSQL, key/value a sloupcov´e datab´aze, jsou si ve sv´e podstatˇe velmi podobn´e, pouze sloupcov´e datab´aze maj´ı o trochu sloˇzitˇejˇs´ı datov´ y model. Pro tvorbu spr´avce byla zvolena NoSQL datab´aze typu key/value, pˇredevˇs´ım kv˚ uli menˇs´ımu poˇctu kvalitn´ıch spr´avc˚ u, a tak´e kv˚ uli sv´emu jednoduch´emu modelu, jenˇz plnˇe charakterizuje princip NoSQL datab´az´ı.
6.2
Datab´ azov´ y syst´ em pro key/value datab´ azi
Pro datab´aze typu key/value existuje mnoho datab´azov´ ych syst´em˚ u. Mezi dva nejpouˇz´ıvanˇejˇs´ı open-source syst´emy patˇr´ı jiˇz zm´ınˇen´ y Riak a Redis. Hlavn´ı v´ yhoda Redisu je pˇredevˇs´ım jeho vysok´a rychlost, nicm´enˇe Riak poskytuje zase lepˇs´ı odolnost v˚ uˇci p´adu serveru. Oba dva syst´emy poskytuj´ı na sv´ ych domovsk´ ych str´ank´ach podrobnou dokumentaci. Riak poskytuje ofici´aln´ı knihovny jen pro jazyky Erlang, Java, PHP, Python a Ruby. Pˇrednost´ı Redisu je pˇredevˇs´ım, rychlost, podpora r˚ uz1
http://gephi.org/ http://linkurio.us/ 3 http://fluentd.org/ 2
39
Anal´yza probl´emu
Datab´azov´y syst´em pro key/value datab´azi
n´ ych struktur dat a velk´a ˇsk´ala kvalitn´ıch knihoven pro programovac´ı jazyky. Nejvˇetˇs´ı v´ yhoda Redisu je vˇsak podpora velk´eho mnoˇzstv´ı pˇr´ıkaz˚ u, kter´e ˇcin´ı pr´aci s r˚ uzn´ ymi druhy dat velmi jednoduchou. V tabulce 6.1 jsou zn´azornˇeny z´akladn´ı vlastnosti Redisu a Riaku. Pro tvorbu spr´avce byl nakonec zvolen syst´em Redis, kter´ y je pouˇz´ıvanˇejˇs´ı a v´ ykonnˇejˇs´ı neˇz Riak. Jm´eno
Riak
Redis
Popis
Distribuovan´e, v˚ uˇci chyb´am odoln´e key/value uloˇziˇstˇe
In-memory datab´aze s moˇznost´ı nastaven´ı v´ ykonu oproti perzistenci
Open-source – Apache verze 2
Open-source – BSD
Typ datab´aze
Key/value
Key/value
API a ostatn´ı pˇr´ıstupov´e metody
HTTP/REST a nativn´ı Erlang rozhran´ı
Telnet / Propriet´arn´ı
P2P
Master-slave replikace
C, C#, C++, Erlang, Java, JavaScript, Lisp, Perl, PHP, Python, Ruby, Smalltalk a dalˇs´ı
C, C#, C++, Erlang, Java, JavaScript, Lisp, Lisp, Lua, Objective-C, Perl, PHP, Python, Ruby, Smalltalk, Tcl a dalˇs´ı
Serverov´a skriptov´an´ı
Erlang, JavaScript
Lua
Map Reduce
Ano
Ne
Odoln´ y proti chyb´am
Velmi rychl´ y
Licence
Replikace Podporovan´e programovac´ı jazyky
Hlavn´ı pˇrednosti
Tabulka 6.1: Srovn´an´ı z´akladn´ıch vlastnost´ı syt´em˚ u Riak a Redis. [Dbe14]
Jak jiˇz bylo zm´ınˇeno Redis i Riak podporuj´ı mnoho jazyk˚ u. Jazyk Java je multiplatformn´ı, d´ıky tomu lze programy napsan´e v tomto jazyce spouˇstˇet na libovoln´em operaˇcn´ım syst´emu, kde bˇeˇz´ı Java Virtual Machine. Jej´ı nev´ yhodou je pomalejˇs´ı start program˚ u a vˇetˇs´ı pamˇet’ov´a n´aroˇcnost. Jazyk C# m´a mnohem lepˇs´ı a modernˇejˇs´ı moˇznosti zobrazen´ı GUI (grafick´e uˇzivatelsk´e rozhran´ı). Nev´ yhodou jazyka C# je, ˇze 40
Anal´yza probl´emu
Webov´e vs. desktopov´e ˇreˇsen´ı
aplikace v nˇem vytvoˇren´e jsou spustiteln´e defaultnˇe pouze na syst´emech Microsoft Windows. PHP je jazyk pˇredevˇs´ım pro webov´e ˇreˇsen´ı. Posledn´ım kr´atce zm´ınˇen´ ym jazykem, kter´ y Redis podporuje, je jazyk C, kter´ y je velmi rozˇs´ıˇren´ y, ale v nˇekter´ ych ohledech je pro tvorbu GUI aplikac´ı zbyteˇcnˇe n´ızko´ urovˇ nov´ y. Ostatn´ı podporovan´e jazyky nejsou moc rozˇs´ıˇren´e.
6.3
Webov´ e vs. desktopov´ eˇ reˇ sen´ı
Z´akladn´ı ot´azkou bylo, jestli bude v´ ysledn´ y program webov´ y nebo desktopov´ y. V dneˇsn´ı dobˇe je popul´arn´ım ˇreˇsen´ım vytvoˇrit webovou aplikaci, kter´a je poskytovan´a z webov´eho serveru pˇres internet. Jej´ı nejvˇetˇs´ı v´ yhodou je pˇredevˇs´ım moˇznost pˇripojen´ı se odkudkoliv prostˇrednictv´ım webov´eho prohl´ıˇzeˇce. S t´ım ale souvis´ı probl´em, ˇze mus´ı b´ yt k dispozici st´al´e pˇripojen´ı k internetu. Webov´e aplikace jsou v pˇr´ıpadˇe tenk´eho klienta nainstalov´any pouze jednou na vzd´alen´em serveru. V´ ypoˇcetn´ı v´ ykon d´ıky tomu nezatˇeˇzuje poˇc´ıtaˇc uˇzivatele, protoˇze prob´ıh´a vzd´alenˇe. Pokud dojde k aktualizaci aplikace, nemus´ı se updatovat na kaˇzd´em poˇc´ıtaˇci zvl´aˇst’, jako je tomu v pˇr´ıpadˇe desktopov´ ych aplikac´ı. Webov´e aplikaci jsou vˇsak ˇcastˇeji vystaveny bezpeˇcnostn´ım rizik˚ um. Mohou tak´e kv˚ uli zv´ yˇsen´emu provozu reagovat pomaleji neˇz desktopov´e. V pˇr´ıpadˇe, kdy bude potˇreba napˇr. zobrazit ve webov´e aplikaci z´aznamy z NoSQL datab´aze, kter´a je schopna obsahovat miliony kl´ıˇc˚ u, by mohlo b´ yt naˇc´ıt´an´ı str´anky pro uˇzivatele aˇz pˇr´ıliˇs zdlouhav´e. Tak´e, pokud jde o funkcionalitu, nen´ı webov´a aplikace schopna dos´ahnout moˇznost´ı desktopov´ ych. Pˇr´ıkladem mohou b´ yt rozd´ıly u webov´ ych a desktopov´ ych manaˇz´er˚ u pro spr´avu relaˇcn´ıch datab´az´ı, kdy desktopov´a varianta poskytuje vˇetˇs´ı mnoˇzstv´ı n´astroj˚ u pro spr´avu, modelov´an´ı a ˇr´ızen´ı dat. Na rozd´ıl od toho webov´a aplikace umoˇzn ˇuje klasick´e funkce, ale je limitov´ana poˇctem a schopnostmi tˇechto funkc´ı. Desktopov´e aplikace jsou spolehliv´e a d˚ uvˇeryhodn´e. I pˇres mnoho v´ yhod, kter´e poskytuj´ı webov´e aplikace, jsou st´ale pouˇz´ıvan´e pˇredevˇs´ım kv˚ uli jejich uˇzivatelsky pˇr´ıjemnˇejˇs´ımu a intuitivnˇejˇs´ımu rozhran´ı. D´ıky z´ıskan´ ym poznatk˚ um byla zvolena desktopov´a verze manaˇz´eru, kter´a m´a splˇ novat poˇzadovan´e vlastnosti. V´ ysledn´ y spr´avce by mˇel b´ yt pro NoSQL datab´aze obdobn´ y jako manaˇz´er Oracle SQL Developer, kter´ y poskytuje velkou funkcionalitu a stabilitu a umoˇzn ˇuje rychle zpracov´avat zadan´e u ´koly, pro relaˇcn´ı datab´aze. Snahou je vytvoˇrit jednoduchou intuitivn´ı aplikaci, kter´a bude pro uˇzivatele pˇr´ıjemnˇe ovladateln´a. Jelikoˇz je st´ale mnoho bˇeˇzn´ ych uˇzivatel˚ u navykl´ ych pouˇz´ıvat klasick´e desktopov´e programy, byla vybr´ana pr´avˇe tato varianta.
41
Anal´yza probl´emu
6.4
Existuj´ıc´ı ˇreˇsen´ı pro Redis
Existuj´ıc´ı ˇ reˇ sen´ı pro Redis
Pro zvolen´ y datab´azov´ y syst´em existuje jiˇz nˇekolik jednoduch´ ych desktopov´ ych 4 a webov´ ych manaˇzer˚ u. Mezi nˇe patˇr´ı napˇr. projekt Redsmin , kter´ y je orientovan´ y na v´ yvoj´aˇre a umoˇzn ˇuje spr´avu sluˇzeb pro Redis. Zpˇr´ıstupnˇen byl na podzim v roce 2013. Je vytvoˇren jako komerˇcn´ı aplikace, kde je moˇznost si zdarma vyzkouˇset verzi s pˇripojen´ım na jeden server. Poskytuje mnoho funkc´ı, napˇr. pomoc´ı grafu zobrazuje poˇcet proveden´ ych operac´ı za dan´e obdob´ı, tak´e poskytuje moˇznost pouˇz´ıv´an´ı pˇr´ıkazov´e ˇr´adky Redisu. Jeho hlavn´ı nev´ yhodou je zobrazov´an´ı kl´ıˇc˚ u a hodnot pomoc´ı GUI, kter´e je obˇcas nepˇrehledn´e a nut´ı uˇzivatele zn´at z´akladn´ı pˇr´ıkazy Redisu. Dalˇs´ım zkouman´ ym programem pro Redis byl jednoduch´ y desktopov´ y manaˇz´er 5 RedisConsole . V roce 2011 ho vytvoˇril Petr Trofimov, jelikoˇz nemohl naj´ıt ˇza´dn´ y desktopov´ y n´astroj pro Windows, kter´ y by umˇel pracovat s Redis datab´az´ı. Program je naps´an v jazyce C++ a zaloˇzen na QT frameworku. Umoˇzn ˇuje zadat nastaven´ı pro pˇripojen´ı k datab´azi a veˇsker´e operace jsou u nˇej zad´av´any skrze pˇr´ıkazovou ˇra´dku. Zobrazuje jednoduch´ y seznam kl´ıˇc˚ u a ke kaˇzd´emu kl´ıˇci umoˇzn ˇuje zobrazit jeho hodnotu, kter´a je pouze text ve form´atu JSON. Tento program je ve v´ ysledku pouze vzd´alenou pˇr´ıkazovou ˇra´dkou Redisu. Redis Desktop Manager6 je multiplatformn´ı open-source GUI manaˇz´er pro Redis vytvoˇren´ y Igorem Malinovskiym na podzim roku 2013. Tento manaˇzer splˇ nuje mnoho funkc´ı, kter´e z nˇeho tvoˇr´ı velmi kvalitn´ı n´astroj pro spr´avu Redis datab´az´ı. Projekt je st´ale ve v´ yvoji a jeho posledn´ı verze byla vyd´ana v dubnu 2014. Podporuje spr´avu pˇripojen´ı pomoc´ı SSH protokolu k v´ıce server˚ um. Pˇripojen´ı jsou seˇrazena ve stromˇe, kter´ y dovoluje rozbalen´ı a zobrazen´ı jednotliv´ ych datab´az´ı a kl´ıˇc˚ u. V hlavn´ım oknˇe, jsou pak zobrazeny z´aloˇzky, na kter´ ych jsou hodnoty dan´eho kl´ıˇce a pomoc´ı tlaˇc´ıtek je moˇzno tyto hodnoty pohodlnˇe upravovat. Dalˇs´ım prvkem je Redis konzole, kter´a podporuje vˇetˇsinu pˇr´ıkaz˚ u Redisu. Nˇekter´e jednoduch´e operace jako napˇr. pˇrid´an´ı nov´eho kl´ıˇce, je moˇzn´e prov´adˇet pouze pˇres konzoli. Souˇcasnˇe s obˇcasnou nestabilitou patˇr´ı zp˚ usob pˇrid´av´an´ı nov´eho kl´ıˇce k jednomu z m´ala nev´ yhod tohoto novˇe vznikaj´ıc´ıho n´astroje. 4
https://redsmin.com/ http://ptrofimov.wordpress.com/2011/06/19/redisconsole-windows-gui-tool-toview-redis-databases/ 6 http://redisdesktop.com/ 5
42
Anal´yza probl´emu
6.5
Z´akladn´ı funkce spr´avce
Z´ akladn´ı funkce spr´ avce
Z anal´ yzy existuj´ıc´ıch ˇreˇsen´ı pro syst´em Redis byly vyvozeny z´akladn´ı funkce, kter´e by mˇel v´ ysledn´ y spr´avce umoˇzn ˇovat. Jak jiˇz bylo v´ yˇse zm´ınˇeno, byla zvolena desktopov´a varianta s uˇzivatelsky pˇr´ıjemn´ ym GUI, kter´e by mˇelo umoˇzn ˇovat pˇrid´avat a spravovat nov´a pˇripojen´ı k datab´azov´emu syst´emu. Tak´e by mˇely b´ yt vˇsechny dvojice kl´ıˇc˚ u a hodnot pˇrehlednˇe zobrazeny. Dalˇs´ı vlastnost´ı, kter´a by mˇela b´ yt urˇcitˇe podporov´ana, je pˇrid´av´an´ı, maz´an´ı a editace poˇzadovan´eho kl´ıˇce a hodnoty. S t´ım samozˇrejmˇe souvis´ı podpora vˇsech pˇeti datov´ ych struktur, kter´e Redis nab´ız´ı. Vˇsechny zm´ınˇen´e operace by mˇely b´ yt pˇr´ıstupn´e i uˇzivateli, kter´ y nezn´a z´akladn´ı pˇr´ıkazy Redisu. Poˇzadovanou funkc´ı na program, byla moˇznost exportovat a importovat data z datab´aze do form´atu JSON. Uveden´e funkce jsou pouze z´akladn´ımi poˇzadavky z´ıskan´ ymi z anal´ yzy datab´azov´eho syst´emu a jeho manaˇz´er˚ u.
43
7 Realizace spr´avce datab´aze V r´amci t´eto diplomov´e pr´ace bylo navrˇzeno a realizov´ano ˇreˇsen´ı spr´avce NoSQL datab´az´ı typu key/value pro datab´azov´ y syst´em Redis, kter´e se naz´ yv´a NoSqlManager. V n´asleduj´ıc´ım textu je pops´an jeho n´avrh a ˇreˇsen´ı.
7.1
N´ avrh spr´ avce datab´ aze
Pro spr´avce byl zvolen pouze jedin´ y datab´azov´ y syst´em, a to Redis, pˇredevˇs´ım kv˚ uli neuniverz´alnosti pˇr´ıkaz˚ u, kter´e pouˇz´ıvaj´ı NoSQL datab´aze. Na rozd´ıl od relaˇcn´ıch datab´az´ı, kter´e vyuˇz´ıvaj´ı jednotn´ y jazyk SQL, u NoSQL zat´ım neexistuje standardizovan´ y pˇr´ıstup. Jak jiˇz bylo zm´ınˇeno v anal´ yze, podkapitola 6.5, vytvoˇren´ y program bude poskytovat z´akladn´ı funkce. Tˇemi jsou pˇrid´av´an´ı nov´eho kl´ıˇce a hodnoty pro vˇsechny struktury dat, editace hodnot kl´ıˇc˚ u a tak´e odstranˇen´ı poˇzadovan´eho kl´ıˇce. Dalˇs´ı vlastnost´ı, kterou aplikace umoˇzn ˇuje, je vytvoˇren´ı nov´eho pˇripojen´ı, podle zadan´e IP adresy, jm´ena serveru, portu, na kter´em datab´aze bˇeˇz´ı, a hesla, kter´e slouˇz´ı k pˇripojen´ı zabezpeˇcen´e datab´aze. Vˇsechny u ´daje o pˇripojen´ı jsou uloˇzeny, aby mohly b´ yt pˇri dalˇs´ım pouˇzit´ı programu znovu naˇcteny. Program tak´e umoˇzn ˇuje zobrazit podrobn´e informace o serveru, jako je napˇr. verze Redisu, poˇcet pˇripojen´ ych klient˚ u nebo vyuˇzit´ı pamˇeti. V pr˚ ubˇehu realizace byla dod´ana jeˇstˇe konzole, kter´a umoˇzn ˇuje vyuˇz´ıvat veˇsker´e pˇr´ıkazy Redis-cli. Konzole v´ yraznˇe rozˇsiˇruje moˇznosti pouˇzit´ı spr´avce a poskytuje znal´emu uˇzivateli moˇznost plnˇe vyuˇz´ıvat funkcionalitu Redisu.
7.1.1
Programovac´ı jazyk
K naps´an´ı programu byl zvolen vysoko´ urovˇ nov´ y objektovˇe orientovan´ y jazyk C#, kter´ y byl vytvoˇren firmou Microsoft spoleˇcnˇe s platformou .NET. Na rozd´ıl do Javy je C# rychlejˇs´ı a nezab´ır´a tolik operaˇcn´ı pamˇeti. Hlavn´ı motivac´ı pro zvolen´ı jazyka C# bylo zejm´ena prohlouben´ı znalost´ı v tomto jazyce a v pouˇz´ıv´an´ı v´ yvojov´eho prostˇred´ı Visual Studio. Pro tvorbu byly pouˇzity nov´e technologie, jako je napˇr. WPF (Windows Presentation Foundation) se znaˇckovac´ım jazykem XAML (Extensible Application Markup Language) umoˇzn ˇuj´ıc´ı data binding.
44
Realizace spr´avce datab´aze
7.1.2
N´avrh spr´avce datab´aze
Rozvrˇ zen´ı programu
Aplikace je vytvoˇrena podle n´avrhov´eho vzoru MVVM (Model View ViewModel) ˇ pro WPF aplikace. MVVM oddˇeluje data, stav aplikace a uˇzivatelsk´e rozhran´ı. Reˇsen´ı MVVM umoˇzn ˇuje, aby proces bˇeˇz´ıc´ı na pozad´ı nebyl z´avisl´ y na oknˇe, kter´e konzumuje informace tohoto procesu. Vrstva Model popisuje jednotliv´a data, se kter´ ymi aplikace pracuje. View reprezentuje uˇzivatelsk´e rozhran´ı napsan´e v jazyce XAML. ViewModel spojuje vrstvy Model a View pomoc´ı bindingu. Prov´ad´ı se v nˇem filtrov´an´ı dat podle stavu aplikace, a proto mus´ı b´ yt implementov´ano rozhran´ı INotifyPropertyChanged. Struktura projektu je rozdˇelena do ˇctyˇr sloˇzek, Helpers, Images, Model a View. View obsahuje jeˇstˇe jednu vloˇzenou sloˇzku pojmenovanou Partial. Podle vzoru MVVM jsou zde uloˇzeny XAML a jejich code-behind (k´od na pozad´ı) v pˇr´ısluˇsn´ ych CS (zdrojov´e soubory pro C#) souborech. N´ıˇze je struˇcnˇe pops´ana charakteristika vˇsech soubor˚ u v projektu NoSqlManager. Ve sloˇzce Images jsou obr´azky pouˇz´ıvan´e u kontrolek v GUI. Soubory um´ıstˇen´e ve View jsou n´asleduj´ıc´ı: • AddWindow – slouˇz´ı pro pˇrid´an´ı nov´ ych dat do datab´aze. • ConnectWindow – poskytuje moˇznost vytvoˇren´ı nov´eho pˇripojen´ı k serveru. • ConsoleWindow – tˇr´ıda reprezentuj´ıc´ı okno a funkce konzole. • EditConnectWindow – upravuje nastaven´ı pˇripojen´ı k serveru. • EditValuesWindow – umoˇzn ˇuje upravovat hodnoty kl´ıˇc˚ u r´ uzn´ ych struktur dat Redisu. • EditWindow – poskytuje n´ahled na data, kter´a mohou b´ yt d´ale editov´ana. • InfoWindow – zobrazuje informace z´ıskan´e od serveru, na kter´em bˇeˇz´ı Redis. • MainWindow – hlavn´ı okno aplikace, kter´e poskytuje pˇrehledn´e zobrazen´ı poˇzadovan´ ych prvk˚ u a z´akladn´ı logiku aplikace. Ve sloˇzce Partial jsou um´ıstˇen´e XAML soubory, kter´e se vkl´adaj´ı do jin´ ych oken. DatabaseGrid slouˇz´ı pro zobrazen´ı dat z datab´aze v tabulce, kter´a je um´ıstˇena v z´aloˇzce na hlavn´ım oknˇe. TabCloseButton reprezentuje tlaˇc´ıtko na z´aloˇzce, kter´e umoˇzn´ı jej´ı zavˇren´ı. Model obsahuje objekty, kter´e zastupuj´ı data, se kter´ ymi aplikace operuje. D´ale je uveden jejich pˇrehled. 45
Realizace spr´avce datab´aze
N´avrh spr´avce datab´aze
• CloseableTabItem – je tˇr´ıda, reprezentuj´ıc´ı z´aloˇzku, kterou je moˇzn´e zav´ırat pomoc´ı tlaˇc´ıtka popsan´eho v TabCloseButton.xaml. • DatabaseNode – reprezentuje datab´azi pˇr´ısluˇsn´eho serveru a jej´ı obsah. • DatabaseRow – zastupuje cel´ y ˇr´adek z datab´aze. Obsahuje, o jak´ y typ dat se jedn´a, kl´ıˇc a hodnoty. • ITreeViewItem – interaface pro stromovou strukturu, zobrazuj´ıc´ı servery a datab´aze. • IValue – interface pro typ, kl´ıˇc a hodnotu. • ServerNode – pˇredstavuje server, jeho nastaven´ı a pˇr´ısluˇsn´e potomky, kter´e jsou zastoupeny jako DatabaseNode. Tak´e se zde udrˇzuje informace o roli (slave nebo master) serveru. Helpers je sloˇzka, kter´a v sobˇe obsahuje r˚ uzn´e tˇr´ıdy potˇrebn´e pro ˇreˇsen´ı nˇekter´ ych u ´kol˚ u. • InverseBooleanConverter – slouˇz´ı pro inverzi Boolean hodnoty. • RedisBackgroundWorker – patˇr´ı k nejd˚ uleˇzitˇejˇs´ım tˇr´ıd´am, obsahuje logiku pr´ace na pozad´ı pˇri dotazov´an´ı na server. • SerializeHelper – slouˇz´ı k uloˇzen´ı seznamu pˇripojen´ı do config.xml souboru. • TypeTemplateSelector – pom´ah´a urˇcovat strukturu v´ ypisu v tabulce pro r˚ uzn´e typy dat. • VisibilityToNullableBooleanConverter – converter pro inverzi viditelnosti kontrolek. V pˇr´ıloze B je zobrazen graf z´avislost´ı jednotliv´ ych jmenn´ ych prostoru zn´azorˇ nuj´ıc´ı v´ yˇse popsan´e tˇr´ıdy a vztahy mezi nimi. Diagram byl vygenerov´an pomoc´ı Visual Studia.
7.1.3
GUI
Rozloˇzen´ı jednotliv´ ych ˇca´sti GUI bylo navrˇzeno tak, aby byla uˇzivateli poskytnuta pohodln´a a intuitivn´ı pr´ace s manaˇzerem. Inspirac´ı pro um´ıstˇen´ı nˇekter´ ych prvk˚ u 46
Realizace spr´avce datab´aze
N´avrh spr´avce datab´aze
rozhran´ı byly existuj´ıc´ı n´astroje, popsan´e v podkapitole 6.4. Na obr´azku 7.1 je zn´azornˇen´e v´ ysledn´e grafick´e rozhran´ı vytvoˇren´e aplikace.
Obr´azek 7.1: Hlavn´ı okno programu NoSqlManager.
Program se skl´ad´a z hlavn´ıho okna, kter´e je rozdˇeleno na dvˇe z´akladn´ı ˇca´sti. V lev´e ˇc´asti je stromov´a struktura, ve kter´e jsou zobrazeny jednotliv´e servery se sv´ ymi datab´azemi. Druh´a ˇca´st hlavn´ıho okna zobrazuje tabulku s dvojicemi kl´ıˇc a hodnota, kter´e jsou abecednˇe seˇrazen´e, pro zvolenou datab´azi. Pro moˇznost jednoduch´eho pˇrep´ın´an´ı mezi datab´azemi a porovn´av´an´ı obsahu, jsou pouˇzity z´aloˇzky. Kaˇzd´a z´aloˇzka obsahuje pouze data z jedn´e datab´aze. Na z´aloˇzce jsou pak um´ıstˇena tlaˇc´ıtka pro pˇrid´an´ı, smaz´an´ı a editaci kl´ıˇce, d´ale tak´e pro aktualizaci dat a pro import/export dat do/z JSON souboru. Tlaˇc´ıtka jsou um´ıstˇena v horn´ı ˇc´asti z´aloˇzky, simuluj´ı tak n´astrojovou liˇstu. Pod tlaˇc´ıtky je pak zobrazena tabulka, kter´a je rozdˇelena na tˇri sloupce, kl´ıˇc, hodnotu a typ kl´ıˇce. V kaˇzd´em ˇr´adku je zn´azornˇen n´ahled na hodnoty dat, a jelikoˇz Redis podporuje pˇet r˚ uzn´ ych datov´ ych struktur, je moˇzno po rozkliknuti pˇr´ısluˇsn´eho kl´ıˇce zobrazit podrobnˇejˇs´ı strukturu jeho hodnot, napˇr. u mapy je po kliknut´ı zobrazena dalˇs´ı tabulka s hashkey a hodnotami. V horn´ı ˇca´sti hlavn´ıho okna je um´ıstˇena liˇsta, kter´a pod nab´ıdkou File posky47
Realizace spr´avce datab´aze
N´avrh spr´avce datab´aze
tuje moˇznost Add New Connection. Pomoc´ı nab´ıdky se tak otevˇre okno pro pˇrid´an´ı nov´eho pˇripojen´ı. Nad n´azvy jednotliv´ ych server˚ u ve stromov´e struktuˇre je moˇzno prav´ ym tlaˇc´ıtkem vyvolat kontextov´e menu, kter´e nab´ız´ı otevˇren´ı konzole nad dan´ ym serverem, editaci nastaven´ı serveru, zobrazen´ı z´akladn´ıch informac´ı o serveru, aktualizaci stavu serveru a tak´e smaz´an´ı nastaven´ı serveru.
Obr´azek 7.2: Konzole programu NoSqlManager.
Zvl´aˇstn´ım oknem je konzole, zobrazena na obr´azku 7.2, kter´a zpˇr´ıstupˇ nuje uˇzivateli pˇr´ıkazovou ˇr´adku Redis-cli. Skl´ad´a se ze dvou ˇca´st´ı, prvn´ı zobrazuje napsan´e pˇr´ıkazy a odpovˇed’ serveru. Spodn´ı ˇca´st reprezentuje pole, do kter´eho se zad´avaj´ı pˇr´ıkazy. Pro pˇrehlednost bylo pˇrid´ano tlaˇc´ıtko Send k odesl´an´ı pˇr´ıkazu. Pro posl´an´ı pˇr´ıkazu tak´e staˇc´ı stisknout kl´avesu Enter. Uzavˇren´ı okna lze prov´est pˇr´ıkazem exit. Ostatn´ı okna aplikace, kter´a se otevˇrou po zvolen´ı jednotliv´ ych nab´ıdek nebo po kliknut´ı na tlaˇc´ıtko, a funkce programu jsou bl´ıˇze pops´any v uˇzivatelsk´e pˇr´ıruˇcce, kter´a je souˇca´st´ı pˇr´ılohy.
48
Realizace spr´avce datab´aze
7.2
V´yvojov´e n´astroje
V´ yvojov´ e n´ astroje
Pro tvorbu programu bylo zvoleno v´ yvojov´e prostˇred´ı Microsoft Visual Studio Ultimate 2013 s .NET Frameworkem 4.5.1., kter´e je distribuov´ano spoleˇcnˇe s jazykem C#. Verze Redisu, pro kterou se program vyv´ıjel, je 2.8.2. Ke spr´avˇe projektu byl pouˇzit Team Foundation Server (TFS) od spoleˇcnosti Microsoft, kter´ y umoˇzn ˇuje spravovat zdrojov´e k´ody, podporuje verzov´an´ı a mnoho dalˇs´ıch funkc´ı. TFS byl nasazen na extern´ım serveru pˇredevˇs´ım pro potˇreby z´alohov´an´ı projektu. Dalˇs´ı v´ yhodou takov´ehoto pˇr´ıstupu je moˇznost pˇri v´ yvoji porovnat jednotliv´e verze k´odu mezi sebou. Pro kaˇzd´ y commit proveden´ y na server je pˇrid´an kr´atk´ y popis proveden´ ych zmˇen. V projektu jsou pouˇz´ıvan´e r˚ uzn´e knihovny. Pro umoˇznˇen´ı exportov´an´ı a importov´an´ı dat do JSON soubor˚ u byla pouˇzita knihovna Json.net. Knihovna Extended WPF Toolkit byla pouˇzita pouze pro jedinou kontrolku IntegerUpDown. Ta se pouˇz´ıv´a v oknˇe pro pˇrid´an´ı nov´eho pˇripojen´ı u nastaven´ı ˇc´ısla portu. Pro API k Redisu je pouˇzit´a knihovna ServiceStack.Redis1 . Druh´a knihovna, kter´a byla uvaˇzov´ana, byla BookSleeve2 . Jej´ı hlavn´ı nev´ yhodou byla t´emˇeˇr neexistuj´ıc´ı dokumentace. Na jaˇre 2014 byla nahrazena knihovnou StackExchange.Redis3 , kter´a jiˇz poskytuje z´akladn´ı dokumentaci. Zvolen´a knihovna ServiceStack.Redis poskytuje velmi dobrou dokumentaci a jej´ı dalˇs´ı pˇrednost´ı je obl´ıbenost u komunity, kter´a poskytuje mnoho rad v t´eto oblasti. ServiceStack.Redis je nab´ızena pod licenc´ı GNU Affero General Public License, verze 34 . P˚ uvodnˇe byla v projektu zahrnuta pomoc´ı NuGetu (open-source bal´ıˇckovac´ı syst´em pro platformu .NET). Pˇri v´ yvoji konzole bylo vˇsak potˇreba upravit zdrojov´ y k´od knihovny a zpˇr´ıstupnit tak nˇekter´e metody. Proto bylo nutn´e do projektu knihovnu pˇridat jako dalˇs´ı projekt. S n´ı byly pˇrid´any i dalˇs´ı potˇrebn´e knihovny od ServiceStack5 . Tˇemi jsou ServiceStack.Text, ServiceStack.Common a ServiceStack.Interfaces. 1
https://github.com/ServiceStack/ServiceStack.Redis https://code.google.com/p/booksleeve/ 3 https://github.com/StackExchange/StackExchange.Redis 4 http://www.gnu.org/licenses/agpl-3.0.html 5 https://github.com/ServiceStack 2
49
Realizace spr´avce datab´aze
7.3
Pˇripojen´ı k datab´azi
Pˇ ripojen´ı k datab´ azi
Vytvoˇren´ y spr´avce NoSqlManager umoˇzn ˇuje pˇripojit se k serveru s bˇeˇz´ıc´ım syst´emem Redis pomoc´ı knihovny ServiceStack.Redis. Nejprve se vytvoˇr´ı objekt RedisClient, jehoˇz vstupn´ı parametry konstruktoru jsou Host – adresa serveru, Port – ˇc´ıslo portu, na kter´em bˇeˇz´ı Redis, a Auth – heslo, kter´e se pouˇz´ıv´a, pokud je instance Redisu zabezpeˇcena. Pro jednoduˇsˇs´ı pr´aci s objektem je pouˇzit´e kl´ıˇcov´e slovo using, kter´e se pouˇz´ıv´a pro korektn´ı uvolˇ nov´an´ı zdroj˚ u. 1 2 3 4
using (var redisClient = new RedisClient(Host, Port, Auth)) { var info = redisClient.Info; }
Pokud se provede dotazov´an´ı na server, kter´e m˚ uˇze trvat urˇcit´ y ˇcas, mohlo se st´at, ˇze by aplikace tzv. zamrzla a uˇzivatel by se pot´e mylnˇe domn´ıval, ˇze program nefunguje. Pro tento pˇr´ıpad je oˇsetˇrena veˇsker´a komunikace s datab´az´ı pomoc´ı vl´aken. Pˇri jak´emkoliv dotazov´an´ı na datab´azi se vytvoˇr´ı nov´e vl´akno, kter´e obsluhuje pˇr´ısluˇsn´ y dotaz, neboli pracuje na pozad´ı. Mezit´ım hlavn´ı vl´akno aplikace st´ale umoˇzn ˇuje vyuˇz´ıvat aplikaci, i kdyˇz jen v omezen´e m´ıˇre, napˇr. nˇekter´a tlaˇc´ıtka jsou v pr˚ ubˇehu pr´ace vedlejˇs´ıho vl´akna nedostupn´a. 1 2 3 4 5 6 7 8 9 10 11 12
RedisBackgroundWorker.BackgroundAction = delegate { using (var redisClient = new RedisClient(Host, Port, Auth)) { var info = redisClient.Info; } }; RedisBackgroundWorker.OnActionFail = ...; RedisBackgroundWorker.OnActionComplete = ...; RedisBackgroundWorker.Start("Information about server " + server.Name + " ...");
K obsluze pr´ace na pozad´ı slouˇz´ı tˇr´ıda RedisBackgroundWorker, kter´a ve sv´em konstruktoru nastavuje informativn´ı hl´aˇsku zobrazenou v doln´ı liˇstˇe hlavn´ıho okna. Pro spuˇstˇen´ı nov´eho vl´akna je zde metoda Start, kter´a se provede, jestliˇze jiˇz nebˇeˇz´ı jin´a pr´ace na pozad´ı. Obˇe dvˇe vl´akna pak bˇeˇz´ı asynchronnˇe. Jelikoˇz nen´ı ve v´ıcevl´aknov´ ych aplikac´ı povoleno zavolat metodu pro ovl´adac´ı prvek jin´ ym vl´aknem neˇz t´ım, kter´e prvek vytvoˇrilo, je nutn´e pouˇz´ıt metodu Dispat50
Realizace spr´avce datab´aze
Pˇripojen´ı k datab´azi
cher.Invoke. Pomoc´ı n´ı se m˚ uˇze pˇresmˇerovat vol´an´ı metody z pracovn´ıho vl´akna na hlavn´ı. BackgroundWorker je pomocn´a tˇr´ıda, kter´a obaluje pracovn´ı vl´akno a automaticky vol´a podle potˇreby Dispatcher.Invoke. Aby se mohl pouˇz´ıt BackgroundWorker, bylo nutn´e vytvoˇrit handler pro ud´alost DoWork a zavolat metodu RunWorkerAsync, kter´a spust´ı instanci BackgroundWorkeru. Ud´alost RunWorkerCompleted, kter´a je tak´e souˇc´ast´ı BackgroundWorkeru, se provede, kdyˇz DoWork dokonˇc´ı svoj´ı pr´aci. Pokud dojde bˇehem vykon´av´an´ı DoWork k chybˇe, napˇr. server, na kter´ y je dotazov´ano, je nedostupn´ y, je oˇsetˇrena v´ yjimka a uˇzivatelovi je zobrazeno chybov´e okno s hl´aˇskou, kterou vrac´ı pˇr´ımo syst´em. N´aslednˇe je v´ yjimka pˇred´ana zpˇet volaj´ıc´ımu vl´aknu. D´ıky tomu je zajiˇstˇeno jej´ı snadnˇejˇs´ı oˇsetˇren´ı. Chybov´a hl´aˇska je prezentov´ana v jazyce syst´emu, ve kter´em je program spouˇstˇen. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
public void Start(string statusMessage) { if (!_backgroundWorker.IsBusy) { _backgroundWorker = new BackgroundWorker(); MainWindow.Status = statusMessage; _backgroundWorker.DoWork += delegate { try { BackgroundAction.Invoke(); } catch (Exception e) { MainWindow.Dispatcher.Invoke(delegate { ... MessageBox.Show(e.GetBaseException().Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); }); } }; _backgroundWorker.RunWorkerCompleted += delegate { MainWindow.IsWorkOnBackground = false; MainWindow.Status = DefaultStatus; OnActionFail = null; if (OnActionComplete != null)
51
Realizace spr´avce datab´aze
32 33 34 35 36 37 38 39 40 41 42
Pˇripojen´ı k datab´azi
{ OnActionComplete.Invoke(); } OnActionComplete = null; }; MainWindow.IsWorkOnBackground = true; _backgroundWorker.RunWorkerAsync(); } else{...} }
Tak´e je moˇzno zadat dalˇs´ı chov´an´ı aplikace pˇri vyvol´an´ı v´ yjimky pomoc´ı akce OnActionFail, kter´a napˇr. pˇri ne´ uspˇeˇsn´em pˇripojen´ı k datab´azi nastav´ı roli serveru jako nepˇripojen´ y a zavˇre z´aloˇzky, kter´e n´aleˇz´ı nedostupn´emu serveru. Obdobnˇe je po u ´spˇeˇsn´em ukonˇcen´ı pr´ace vl´akna moˇznost zavolat akci OnActionComplete, kter´a provede dalˇs´ı ˇcinnost, jako je tˇreba aktualizace dat v datab´azi. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
RedisBackgroundWorker.OnActionFail = delegate { Role = RoleNotConnected; var tabs = Children.Select(child => RedisBackgroundWorker.MainWindow.TabList .FirstOrDefault(m => m.HeaderText == Name + ":" + child. Name)) .Where(tab => tab != null); foreach (var tab in tabs) { RedisBackgroundWorker.MainWindow.TabList.Remove(tab); } Children.Clear(); };
RedisBackgroundWorker.OnActionComplete = dbNode.Refresh;
V´ yˇse popsan´ y zp˚ usob umoˇzn ˇuje hlavn´ımu vl´aknu st´ale komunikovat s uˇzivatelem. Nedoch´az´ı tak k zbyteˇcn´emu zamrznut´ı aplikace, jeˇz m˚ uˇze b´ yt pro uˇzivatele nepˇr´ıjemn´e.
52
Realizace spr´avce datab´aze
7.4
Konzole
Konzole
Pro poskytnut´ı kompletn´ı funkˇcnosti spr´avce byla do projektu bˇehem v´ yvoje pˇrid´ana konzole. Konzole podporuje veˇsker´e pˇr´ıkazy Redisu, napˇr. vypnut´ı serveru s datab´az´ı pˇr´ıkazem SHUTDOWN, proto je lepˇs´ı, kdyˇz j´ı pouˇz´ıv´a jen zkuˇsen´ y uˇzivatel. Jedn´a se o velmi uˇziteˇcn´ y n´astroj, d´ıky kter´emu se m˚ uˇze NoSqlManager ˇradit mezi nej´ uˇcinnˇejˇs´ı spr´avce pro syst´em Redis. Konzole je tvoˇrena ConsoleWindow.xaml a jej´ım code-behindem. Vstupn´ım parametrem konstruktoru je objekt ServerNode urˇcuj´ıc´ı server, nad kter´ ym byla konzole zavol´ana. Pops´an´ı logiky z´ısk´av´an´ı odpovˇedi od serveru je uvedeno ve tˇr´ıdˇe ConsoleContent, kter´a implementuje interface INotifyPropertyChanged. Metoda RunCommand v t´eto tˇr´ıdˇe se zavol´a po kliknut´ı na tlaˇc´ıtko Send, nebo stisknut´ım kl´avesy Enter. Nejprve se pˇrid´a na v´ ystup prompt obsahuj´ıc´ı adresu serveru, port, ˇc´ıslo datab´aze (na poˇca´tku nastaveno defaultnˇe na nulu) a zadan´ y pˇr´ıkaz uˇzivatele. N´aslednˇe je zavol´an RedisBackgroudWorker, viz pˇredchoz´ı kapitola, a doch´az´ı k pˇripojen´ı k serveru. Nad redisClient se zavol´a CreatePipelineCommand, t´ım se pˇriprav´ı prostˇred´ı pro odesl´an´ı pˇr´ıkazu. Pot´e je pomoc´ı regul´arn´ıho v´ yrazu rozdˇelen vstupn´ı ˇretˇezec, vˇcetnˇe spr´avn´eho urˇcen´ı jednotliv´ ych ˇca´st´ı pˇr´ıkazu podle uvozovek. Zpracovan´ y pˇr´ıkaz je n´aslednˇe pˇreveden na pole byt˚ u pomoc´ı ToUtf8Bytes. Takto upraven´ y pˇr´ıkaz je zaps´an do vyrovn´avac´ı pamˇeti metodou WriteAllToSendBuffer a zasl´an na server pomoc´ı FlushSendBuffer. 1 2 3 4 5 6 7 8 9 10 11 12 13
redisClient.CreatePipelineCommand(); var regex = new Regex(@"((""((?
.*?)(?[\S]+))(\s)*)"); var cmd = new List<string>(); foreach (Match m in regex.Matches(ConsoleInput)) { if (m.Groups["token"].Success) cmd.Add(m.Groups["token"].Value); } var commands = cmd.Select(c => c.ToUtf8Bytes()); redisClient.WriteAllToSendBuffer(commands.ToArray()); redisClient.FlushSendBuffer();
Pro moˇznost pˇreˇc´ıst odpovˇed’, kterou server poˇsle zpˇet spr´avci, bylo nutn´e prov´est menˇs´ı zmˇeny ve zdrojov´em k´odu knihovny ServiceStack.Redis. Bylo nutn´e zpˇr´ıstupnit private a protected metody z tˇr´ıdy RedisNativeClient um´ıstˇen´e v RedisNativeClient_Utils.cs. Vˇsechny n´ıˇze uveden´e metody z knihovny byly pˇre53
Realizace spr´avce datab´aze
Konzole
ps´any na public. private int SafeReadByte() protected string ReadLine() private byte[] ParseSingleLine(string r) protected public string SendExpectString(params byte[][] cmdWithBinaryArgs) private byte[] ReadData() private byte[] ParseSingleLine(string r)
Pomoc´ı metody SafeReadByte je pˇreˇctena odpovˇed’ serveru, kter´a je pomoc´ı switche zpracov´ana d´al. K´od, kter´ y je uvnitˇr bloku switch, je inspirov´an obsahem jednotliv´ ych metod ze tˇr´ıdy RedisNativeClient. Pokud je v odpovˇedi na zaˇca´tku znak $“ a metoda ReadLine vr´at´ı hodnotu -1“, je na v´ ystup konzole pˇrid´an v´ ypis ” ” (nill). Pokud nevr´at´ı -1“, zavol´a se metoda ParseSingleLine s odpovˇed´ı serveru ” jako parametrem. V´ ysledek je pak pˇrid´an na v´ ystup do konzole. V pˇr´ıpadˇe, ˇze odpovˇed’ zaˇc´ın´a symbolem :“, -“ nebo +“, dojde k zavol´an´ı me” ” ” tody ReadLine a jej´ı v´ ystup je pˇred´an na v´ ystup konzole. Pokud odpovˇed’ zaˇc´ın´a symbolem *“, opˇet se zavol´a metoda ReadLine a jej´ı v´ ysledek se d´ale zpracov´av´a. ” Pomoc´ı int.TryParse se z´ısk´a poˇcet ˇca´st´ı, kter´e byly vr´aceny metodou ReadLine. Je-li poˇcet roven nule, na konzoli je pˇrid´an v´ ypis ”(empty list or set)” a znamen´a to, ˇze dotaz do datab´aze nenaˇsel pod poˇzadovan´ ym kl´ıˇcem ˇza´dn´ y seznam ani mnoˇzinu. Pˇri kladn´em poˇctu je v´ ysledek pˇreveden na ˇretˇezec a pˇrid´an na v´ ystup konzole. Pomoc´ı pˇr´ıkazu dispatcher.Invoke(() => ConsoleOutput.Add(output)); je v´ ystup pro konzoli pˇred´an hlavn´ımu vl´aknu, a uloˇzen do ConsoleOutput. D´ıky zmˇenˇe t´eto vlastnosti je pak zobrazena odpovˇed’ serveru na konzoli. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
string readLine; var redisAnswer = redisClient.SafeReadByte(); switch (redisAnswer) { case ’$’: readLine = redisClient.ReadLine(); if (readLine == "-1") { dispatcher.Invoke(() => ConsoleOutput.Add("(nill)")); } else { var parsingLine = new byte[2][]; parsingLine[1] = redisClient.ParseSingleLine(string.Concat(char. ToString((char)redisAnswer), readLine)); var output = string.Join("\n", parsingLine.Where(m => m != null).
54
Realizace spr´avce datab´aze
Konzole
Select(b => b.FromUtf8Bytes())); 17 18 19 20 21 22 23 24 25
dispatcher.Invoke(() => ConsoleOutput.Add(output)); } break; case ’:’: case ’-’: case ’+’: readLine = redisClient.ReadLine(); dispatcher.Invoke(() => ConsoleOutput.Add(readLine)); if (cmd.First().Equals("select", StringComparison. InvariantCultureIgnoreCase) && (cmd.Count == 2)) { _dbNumber = cmd.Last().ToInt64(); } break; case ’*’: int count; readLine = redisClient.ReadLine(); if (int.TryParse(readLine, out count)) { if (count == -1) { throw new Exception(); } if (count == 0) { dispatcher.Invoke(() => ConsoleOutput.Add("(empty list or set) ")); } else { var result = new byte[count][];
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
for (int i = 0; i < count; i++) result[i] = redisClient.ReadData(); var output = string.Join("\n", result.Where(m => m != null). Select(b => b.FromUtf8Bytes())); dispatcher.Invoke(() => ConsoleOutput.Add(output)); } } break; }
55
Realizace spr´avce datab´aze
7.5
Import a export JSON soubor˚ u
Import a export JSON soubor˚ u
Za z´akladn´ı funkci programu byla jiˇz na zaˇca´tku v´ yvoje programu stanovena moˇznost exportovat data ze spr´avce do JSON souboru a tak´e funkce, kter´a umoˇzn´ı zpˇetn´e importov´an´ı dat ze souboru. V programu je tato funkcionalita ˇreˇsena za pomoci knihovny Json.net. Po kliknut´ı na tlaˇc´ıtko Export je nejdˇr´ıve vytvoˇrena instance dialogu pro uloˇzen´ı. Automaticky je k n´azvu souboru pˇrid´ana pˇr´ıpona .json. 1 2 3 4 5 6
var dlg = new Microsoft.Win32.SaveFileDialog { FileName = "", DefaultExt = ".json", Filter = "JSON text documents (.json)|*.json" };
Pro z´apis do souboru je pouˇzit blok using s novou instanc´ı StreamWriteru, kter´ y slouˇz´ı k zapisov´an´ı do textov´ ych soubor˚ u. D´ale je podobn´ ym zp˚ usobem pouˇzit JsonTextWriter, kter´ ym je za pomoci objektu JsonSerializer uloˇzen obsah datab´aze do StreamWriteru. Do souboru se vlastnˇe zapisuj´ı objekty DatabaseRow. 1 2 3 4 5 6 7 8 9
using (var sw = new StreamWriter(filename)) { using (JsonWriter jw = new JsonTextWriter(sw)) { jw.Formatting = Formatting.Indented; var serializer = new JsonSerializer(); serializer.Serialize(jw, dbNode.ContentOfDb); } }
Jelikoˇz je poˇzadov´ano uloˇzen´ı jen kl´ıˇce, typu a hodnoty, je u vlastnosti SetList, HashList a Value pouˇzit atribut serializace [JsonIgnore], d´ıky kter´emu nebudou zvolen´e vlastnosti serializov´any. U vlastnosti ValueData je uveden atribut [JsonProperty("Value")], kter´ y slouˇz´ı k pˇrejmenov´an´ı n´azvu promˇenn´e ve v´ ysledn´em JSON souboru. [JsonProperty("Value")] public T ValueData { get; set; }
Pˇri importu dat z JSON souboru je postup trochu sloˇzitˇejˇs´ı. Nejprve se vytvoˇr´ı OpenFileDialog, kter´ y umoˇzn ˇuje vybrat pouze soubory s pˇr´ıponou .json. N´aslednˇe 56
Realizace spr´avce datab´aze
Import a export JSON soubor˚ u
je pomoc´ı StreamReader a JsonTextReader deserializov´an zvolen´ y soubor. Metoda Deserialize vrac´ı objekty, kter´e je nutno jeˇstˇe pˇretypovat. Podle Type se rozdˇel´ı naˇcten´e prvky. N´aslednˇe se podle r˚ uzn´ ych datov´ ych struktur z´ıskaj´ı hodnoty. Spoleˇcnˇe se pot´e hodnoty s kl´ıˇcem a typem importuj´ı do spr´avce. Pro SortedSet a Hash jsou data ukl´ad´ana podobnˇe, proto z´ısk´avaj´ı data stejn´ ym zp˚ usobem. Je tomu tak´e v pˇr´ıpadˇe Listu a Setu. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
var json = serializer.Deserialize<JArray>(jr); var result = new BindingList(); foreach (var element in json) { switch (element["Type"].Value()) { case (int)RedisKeyType.SortedSet: case (int)RedisKeyType.Hash: var hashValues = element["Value"].Select( item =>new KeyValuePair<string, string>(item["Key"].Value<string>(), item["Value"].Value<string>())).ToList(); result.Add(new DatabaseRow>> { Type = (RedisKeyType)element["Type"].Value(), Key = element["Key"].Value<string>(), ValueData = hashValues }); break; case (int)RedisKeyType.String: result.Add(new DatabaseRow<string> { Type = RedisKeyType.String, Key = element["Key"].Value<string>(), ValueData = element["Value"].Value<string>() }); break; case (int)RedisKeyType.List: case (int)RedisKeyType.Set: ... break; } }
Uk´azka exportovan´eho souboru JSON s daty je uvedena n´ıˇze. Typy dat jsou urˇceny ˇc´ıselnˇe podle enumer´atoru RedisKeyType. Napˇr´ıklad typ String je enumer´atorem oznaˇcen jako ˇc´ıslo jedna, List jako ˇc´ıslo dva atd.
57
Realizace spr´avce datab´aze
1 2 3 4 5 6 7 8 9 10 11 12 13
Ukl´ad´an´ı konfigurace pˇripojen´ı
[ {"Type": 1, "Key": "Key1", "Value": "Hello World!"}, {"Type": 2, "Key": "ShoppingList", "Value": [ "milk", "butter", "bread", "eggs" ] }, {"Type": 5, "Key": "User:1234", "Value": [ {"Key": "Name", "Value": "Peter"}, {"Key": "Surname", "Value": "Black"} ] } ]
7.6
Ukl´ ad´ an´ı konfigurace pˇ ripojen´ı
V aplikaci je moˇzn´e pˇrid´avat nastaven´ı pro pˇripojen´ı k server˚ um s Redisem. Konfigurace je ukl´ad´ana do souboru config.xml, kter´ y je vytvoˇren v c:\Users\\AppData\Local\Temp\. K ukl´ad´an´ı doch´az´ı pokaˇzd´e, kdyˇz dojde ke zmˇenˇe v seznamu s pˇripojen´ımi. Do souboru se ukl´adaj´ı z´akladn´ı informace, kter´ ymi jsou jm´eno serveru, jeho adresa, port a heslo pro pˇr´ıpadn´e pˇripojen´ı k zabezpeˇcen´emu serveru. V aplikaci se jeˇstˇe uchov´av´a informace o roli, kter´a urˇcuje, zda je server v roli prim´arn´ıho nebo sekund´arn´ıho uzlu. V pˇr´ıpadˇe, ˇze se k serveru nepodaˇrilo pˇripojit, je oznaˇcen jako notconnected“. Informace o roli se z´ısk´av´a vˇzdy aktu´alnˇe pˇri pˇripojen´ı ” k serveru, proto se tato informace neukl´ad´a do konfiguraˇcn´ıho souboru a vlastnost Role je tud´ıˇz doplnˇena o atribut [XmlIgnore]. Aktu´aln´ı seznam pˇripojen´ı je udrˇzov´an v aplikaci a souˇcasnˇe je i pˇri jak´ekoliv zmˇenˇe uloˇzen tak´e na disk. 1 2 3 4
private void ConnectionListOnListChanged(object sender, ListChangedEventArgs listChangedEventArgs) { SerializeToXml>(Path.GetTempPath() + ConfigName, ConnectionList); }
Pro ukl´ad´an´ı se opˇet vyuˇz´ıv´a serializace, kter´a je podrobnˇeji pops´ana v pˇredchoz´ı kapitole. Tentokr´at je ale pro form´at XML. XML serializaci poskytuje pˇr´ımo .NET Framework. Pouˇz´ıv´a se k tomu tˇr´ıda XmlSerializer patˇr´ıc´ı do jmenn´eho prostoru Syst´ em.Xml.Serialization.
58
Realizace spr´avce datab´aze
1 2 3 4 5 6 7 8
Ukl´ad´an´ı konfigurace pˇripojen´ı
public static void SerializeToXml(string path, object obj) { var xs = new XmlSerializer(typeof(T)); using (var fs = File.Create(path)) { xs.Serialize(fs, obj); } }
Naˇc´ıt´an´ı aktu´aln´ıho konfiguraˇcn´ıho souboru je vˇzdy vol´ano na zaˇc´atku spuˇstˇen´ı aplikace pˇri inicializaci hlavn´ıho okna aplikace. Pokud konfiguraˇcn´ı soubor neexistuje, vytvoˇr´ı se nov´ y seznam pro ukl´ad´an´ı nastaven´ı server˚ u. V opaˇcn´em pˇr´ıpadˇe je pouˇzita deserializace souboru config.xml. V´ ysledek, kter´ y je vr´acen metodou Deserialize, je pˇreveden na aktu´aln´ı seznam pˇripojen´ı. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
private void LoadConfig() { if (!File.Exists(Path.GetTempPath() + ConfigName)) { ConnectionList = new BindingList<ServerNode>(); } else { ConnectionList = DeserializeFromXml>(Path. GetTempPath() + ConfigName); } } public static T DeserializeFromXml(string path) { var xs = new XmlSerializer(typeof(T)); using (var fs = File.OpenRead(path)) { return (T)xs.Deserialize(fs); } }
Metody SerializeToXml a DeserializeFromXml jsou uvnitˇr tˇr´ıdy SerializeHelper, kter´a se nach´az´ı ve sloˇzce Helpers. N´ıˇze je uveden pˇr´ıklad obsahu souboru config.xml. 1 2
59
Realizace spr´avce datab´aze
3 4 5 6 7 8 9 10 11
Ukl´ad´an´ı konfigurace pˇripojen´ı
<ServerNode> School 147.228.67.125 6379 <ServerNode> ...
60
8 Testov´an´ı Tato kapitola je vˇenov´ana samotn´emu testov´an´ı vytvoˇren´eho spr´avce pro datab´aze. C´ılem je ovˇeˇrit spr´avnou funkˇcnost programu v r˚ uzn´ ych testovac´ıch pˇr´ıpadech. Proces testov´an´ı aplikace prob´ıhal na lok´aln´ım poˇc´ıtaˇci s operaˇcn´ım syst´emem Windows. Datab´azov´ y syst´em Redis byl spouˇstˇen na lok´aln´ım poˇc´ıtaˇci pomoc´ı verze 1 pro Windows . D´ale byl Redis spuˇstˇen na virtualizovan´em operaˇcn´ım syst´emu Debian pomoc´ı n´astroje VirtualBox a n´aslednˇe byla tak´e datab´aze zprovoznˇena na tˇrech stroj´ıch v´ ypoˇcetn´ıho clustru, kter´e poskytla univerzita opˇet s operaˇcn´ım syst´emem Debian. D´ıky tomu mohly b´ yt vyzkouˇseny vlastnosti master-slave replikace.
Konfigurace poˇ c´ıtaˇ ce Testov´an´ı aplikace probˇehlo na poˇc´ıtaˇci s n´asleduj´ıc´ı konfigurac´ı: • Procesor: Intel Core2 Duo CPU • Pamˇ et’ RAM: 3GB • Operaˇ cn´ı syst´ em: Windows 7 Professional • Typ syst´ emu: 32bitov´ y operaˇcn´ı syst´em • Hardisk: 500 GB
8.1
Testovac´ı sc´ en´ aˇ re
Pro moˇznost otestov´an´ı spr´avn´e funkˇcnosti aplikace se mohou pouˇz´ıt tzv. testovac´ı sc´en´aˇre. Jedn´a se o popis vstupn´ıch podm´ınek a hodnot pro vykon´av´an´ı sc´en´aˇre a oˇcek´avan´ y v´ ysledek po proveden´ı sc´en´aˇre. N´asleduj´ıc´ı sc´en´aˇre zachycuj´ı chov´an´ı aplikace pˇri zad´an´ı nov´e hodnoty do datab´aze, pˇri pokusu smaz´an´ı z´aznamu z datab´aze, kter´a je v roli slave, a pˇri smaz´an´ı hodnoty v seznamu.
1
https://github.com/MSOpenTech/redis
61
Testov´an´ı
Testovac´ı sc´ en´ aˇ r
Testovac´ı sc´en´aˇre
Pˇrid´an´ı kl´ıˇce do datab´aze
Popis
Uˇzivatel chce zadat novou dvojici kl´ıˇc hodnota do zvolen´e datab´aze. V aplikaci m´a jiˇz nastaven´e poˇzadovan´e pˇripojen´ı k aktivn´ımu serveru s datab´az´ı.
Pr˚ ubˇ eh
V hlavn´ım oknˇe aplikace je dvojklikem zobrazen seznam datab´az´ı bˇeˇz´ıc´ıch na poˇzadovan´em serveru. Dalˇs´ım dvojklikem se otevˇre z´aloˇzka se seznamem vˇsech kl´ıˇc˚ u v dan´e datab´azi. V horn´ı ˇca´sti je zvoleno tlaˇc´ıtko Add key pro pˇrid´an´ı nov´eho kl´ıˇce. V nab´ıdce pro pˇrid´an´ı je zvolen typ kl´ıˇce String, n´azev kl´ıˇce a pomoc´ı tlaˇc´ıtka, oznaˇcen´eho symbolem tuˇzky, je nastavena pˇr´ısluˇsn´a hodnota kl´ıˇce. Pro pˇrid´an´ı kl´ıˇce do datab´aze je stisknuto tlaˇc´ıtko Add v hlavn´ı nab´ıdce. Kl´ıˇc je u ´spˇeˇsnˇe pˇrid´an do datab´aze a tabulka v´ ypisem obsahu datab´aze je automaticky aktualizov´ana.
V´ ysledek
V´ yˇse zm´ınˇen´ y popis pˇrid´an´ı nov´eho kl´ıˇce do datab´aze funguje korektnˇe. Kl´ıˇc i s poˇzadovanou hodnotou se uloˇz´ı do datab´aze a n´aslednˇe se zobraz´ı ve v´ ypisu. V pˇr´ıpadˇe, ˇze pˇri nastavov´an´ı kl´ıˇce pro pˇrid´an´ı se stane server nedostupn´ y, tud´ıˇz do nˇej nen´ı moˇzno zapisovat, je uˇzivatel upozornˇen, ˇze pˇripojen´ı nemohlo b´ yt vytvoˇreno. Tento testovac´ı sc´en´aˇr potvrdil spr´avnou funkˇcnost pˇrid´av´an´ı kl´ıˇce do datab´aze. Tabulka 8.1: Testov´an´ı pˇrid´an´ı kl´ıˇce do datab´aze.
62
Testov´an´ı
Testovac´ı sc´ en´ aˇ r
Testovac´ı sc´en´aˇre
Smaz´an´ı kl´ıˇc˚ u z datab´aze v roli slave
Popis
V pˇr´ıpadˇe, ˇze je datab´aze v roli slave, kter´a umoˇzn ˇuje pouze ˇcten´ı a replikuje si data z uzlu master, nen´ı moˇzno smazat ˇza´dn´ y kl´ıˇc (plat´ı to i pro pˇrid´an´ı kl´ıˇce).
Pr˚ ubˇ eh
Jsou aktivn´ı dva servery, jeden v roli master a druh´ y v roli slave. Po dvojkliku na poˇzadovan´e pˇripojen´ı je uzel typu slave oznaˇcen ˇsedivou ikonkou. N´aslednˇe je uˇzivatelem otevˇrena z´aloˇzka s obsahem pˇr´ısluˇsn´e datab´aze. Uˇzivatel si pomoc´ı tlaˇc´ıtka Ctrl m˚ uˇze zvolit v´ıce kl´ıˇc˚ u, kter´e chce najednou smazat. Pot´e stiskne tlaˇc´ıtko Delete key pro smaz´an´ı zvolen´ ych kl´ıˇc˚ u. Uˇzivatel je dot´az´an, zda opravdu chce vybran´e kl´ıˇce smazat. Pˇri kladn´e odpovˇedi je ale uˇzivatel n´aslednˇe upozornˇen, ˇze datab´aze je readonly slave a nem˚ uˇze se do n´ı zapisovat, tud´ıˇz ani odstraˇ novat hodnoty.
V´ ysledek
Poˇzadovan´a operace smaz´an´ı hodnot z datab´aze, kter´a je v roli slave, probˇehla pˇresnˇe podle oˇcek´av´an´ı. Uˇzivatel byl korektnˇe upozornˇen, ˇze poˇzadovan´a akce nemohla b´ yt provedena a data z˚ ustala nezmˇenˇena. Tabulka 8.2: Testov´an´ı smaz´an´ı kl´ıˇce.
63
Testov´an´ı
Testovac´ı sc´ en´ aˇ r
Testovac´ı sc´en´aˇre
Smaz´an´ı jedn´e hodnoty v kl´ıˇci typu List
Popis
Uˇzivatel poˇzaduje smaz´an´ı jedn´e hodnoty v kl´ıˇci, kter´ y je typu List. V aplikaci je otevˇrena z´aloˇzka s daty poˇzadovan´e datab´aze.
Pr˚ ubˇ eh
Na z´aloˇzce jsou zobrazena data. Po dvojkliku na kl´ıˇc, kter´ y je oznaˇcen jako typ List, se otevˇre n´ahledov´e okno, stejn´e, kter´e by se otevˇrelo po zvolen´ı ˇra´dku s dan´ ym kl´ıˇcem a stisknut´ı tlaˇc´ıtka Edit key. Po zvolen´ı tlaˇc´ıtka se symbolem tuˇzky se otevˇre editaˇcn´ı okno, ve kter´em jsou uvedeny jednotliv´e hodnoty patˇr´ıc´ı zvolen´emu kl´ıˇci. Hodnota, kter´a m´a b´ yt odstranˇena, se oznaˇc´ı a pomoc´ı kl´avesy Delete se zavol´a dotaz do datab´aze a poˇzadovan´a hodnota se odstran´ı. Tabulka s daty je automaticky po proveden´em dotazu do datab´aze aktualizov´ana.
V´ ysledek
Smaz´an´ı hodnoty v kl´ıˇci, kter´ y je typu List, probˇehlo spr´avnˇe. Obdobnˇe zm´ınˇen´ y postup funguje i pro dalˇs´ı typy dat. V pˇr´ıpadˇe, ˇze bˇehem odstraˇ nov´an´ı doˇslo k v´ ypadku serveru, je uˇzivatel opˇet upozornˇen pˇr´ısluˇsn´ ym chybov´ ym hl´aˇsen´ım. Tabulka 8.3: Testov´an´ı smaz´an´ı hodnoty v seznamu.
64
9 Z´avˇer ´ Ukolem diplomov´e pr´ace bylo navrhnout a realizovat spr´avce pro NoSQL datab´azi. Tomu pˇredch´azelo sezn´amen´ı se s moˇznostmi a souˇcasn´ ymi nerelaˇcn´ımi datab´azov´ ymi syst´emy. Pˇri ˇreˇsen´ı a n´avrhu se vych´azelo z porovn´an´ı r˚ uzn´ ych typ˚ u NoSQL datab´az´ı a klasick´ ych relaˇcn´ıch datab´azov´ ych syst´em˚ u. Z nab´ızen´ ych moˇznost´ı byl zvolen datab´azov´ y syst´em Redis, kter´ y je z´astupcem key/value NoSQL datab´az´ı. Druh´ ym zvaˇzovan´ ym ˇreˇsen´ım bylo pouˇzit´ı syst´emu Riak. Z d˚ uvodu lepˇs´ı podpory a vˇetˇs´ı rozˇs´ıˇrenosti byl vybr´an v´ yˇse uveden´ y distribuovan´ y syst´em Redis, kter´ y umoˇzn ˇuje master-slave replikaci. API poskytovan´e Redisem bylo d˚ ukladnˇe prostudov´ano a z´ıskan´e poznatky byly vyuˇzity pˇri tvorbˇe v´ ysledn´eho spr´avce – NoSqlManager. Pro realizaci byl pouˇzit programovac´ı jazyk C# s knihovnou ServiceStack.Redis, kter´a poskytuje vhodn´e prostˇredky pro komunikaci se syst´emem Redis. Pomoc´ı tˇechto n´astroj˚ u byl vytvoˇren spr´avce NoSqlManager, kter´ y umoˇzn ˇuje uˇzivatelsky jednoduchou spr´avu datab´aze. Podporuje z´akladn´ı funkˇcnost, kterou je pˇrid´an´ı nov´eho kl´ıˇce, odstranˇen´ı vybran´ ych kl´ıˇc˚ u a jejich hodnot, editace st´avaj´ıc´ıch dat a tak´e import a export do souboru ve form´atu JSON. Nav´ıc byla v pr˚ ubˇehu v´ yvoje pˇrid´ana do programu konzole, kter´a zpˇr´ıstupˇ nuje veˇsker´e instrukce pˇr´ıkazov´e ˇr´adky Redis-cli. T´ım byla dosaˇzena kompletn´ı funkcionalita, kterou syst´em Redis nab´ız´ı. D´ıky tomu m˚ uˇze NoSqlManager konkurovat existuj´ıc´ım ˇreˇsen´ım a zaˇradit se tak mezi spr´avce, kteˇr´ı poskytuj´ı uˇzivatelsky pˇr´ıjemn´e a pˇritom u ´ˇcinn´e prostˇred´ı. Ovˇeˇren´ı v´ ysledk˚ u pr´ace bylo provedeno za pomoci nˇekolika testovac´ıch sc´en´aˇr˚ u, jeˇz byly vybr´any tak, aby pokr´ yvaly co nejˇsirˇs´ı mnoˇzinu situac´ı, ke kter´ ym by mohlo v re´aln´em pˇr´ıpadˇe pouˇz´ıv´an´ı doj´ıt. NoSqlManager je vytvoˇren tak, aby poskytoval uˇzivateli z´akladn´ı i pokroˇcil´e funkce Redisu. Vzhledem k tomu, ˇze se v souˇcasn´e dobˇe NoSQL datab´aze st´ale rychle vyv´ıjej´ı, bylo by pˇr´ıpadnˇe moˇzn´e v budoucnu NoSqlManager d´ale rozˇsiˇrovat a pouˇz´ıt i pro dalˇs´ı verze NoSQL datab´azov´ ych syst´em˚ u.
65
Seznam zkratek ACID
Atomicity, Consistency, Isolation, Durability
AOF
Append Only File
API
Aplication Programming Interface
BASE
Basically Available, Soft-state, Eventually Consistent
BLOB
Binary Large Object
BSON
Binary JSON
CAP
Consistency, Availability, Partition tolerance
CQL
Cassandra Query Language
DCL
Data Control Language
DDL
Data Definition Language
DML
Data Manipulation Language
GQL
Google Query Language
GUI
Graphical User Interface
HQL
Hypertable Query Language
HTTP
Hypertext Transfer Protocol
JSON
JavaScript Object Notation
MVVM
Model View ViewModel
NoSQL
Not Only Structured Query Language
RAM
Random Access Memory 66
Z´avˇer
RDB
Random Database File
RDBMS Relational Database Management System REST
Representation State Transfer
SQL
Structured Query Language
ˇ SRBD
Syst´em ˇr´ızen´ı b´aze dat
UnQL
Unstructured Data Query Language
TCP/IP Transmission Control Protocol/Internet Protocol TCL
Transaction Control Language
WPF
Windows Presentation Foundation
XAML
Extensible Application Markup Language
XML
Extensible Markup Language
67
Literatura [Aug11]
´ AUGUSTYN, Michal. Zamyˇslen´ı nad NoSQL. Augiho web [online]. 29. 10. 2011 [cit. 2014-04-28]. Dostupn´e z: http://www.augi.cz/ programovani/zamysleni-nad-nosql/
[Bla10]
BLACK, Benjamin. Introduction to Cassandra: Replication and Consistency. SlideShare [online]. 29. 4. 2010 [cit. 2014-0425]. Dostupn´e z: http://www.slideshare.net/benjaminblack/ introduction-to-cassandra-replication-and-consistency
[Cat11]
CATTELL, Rick. Scalable SQL and NoSQL data stores. ACM SIGMOD Record. 2011-05-06, vol. 39, issue 4, s. 12- [cit. 2014-04-26]. DOI: 10.1145/1978915.1978919. Dostupn´e z: http://portal.acm.org/ citation.cfm?doid=1978915.1978919
[Con09]
CONOLLY, Thomas, Carolyn E BEGG a Richard HOLOWCZAK. Mistrovstv´ı – datab´aze: profesion´aln´ı pr˚ uvodce tvorbou efektivn´ıch datab´az´ı. Vyd. 1. Brno: Computer Press, 2009, 584 s. ISBN 978-80-251-2328-7.
[Dat14]
Cassandra: Getting Started Documentation. DataStax [online]. 2014 [cit. 2014-04-25]. Dostupn´e z: http://www.datastax. com/documentation/getting_started/doc/getting_started/ gettingStartedCassandraIntro.html
[Dbe14]
Redis vs. Riak Comparison. DB-Engines: Knowledge Base of Relational and NoSQL Database Management Systems [online]. 2014 [cit. 2014-0501]. Dostupn´e z: http://db-engines.com/en/system/Redis%3BRiak
[Dea04]
DEAN, Jeffrey a Sanjay GHEMAWAT. GOOGLE, Inc. MapReduce: Simplied Data Processing on Large Clusters. 3. 10. 2004 [cit. 201404-22]. Dostupn´e z: http://static.googleusercontent.com/media/ research.google.com/cs//archive/mapreduce-osdi04.pdf
68
LITERATURA
LITERATURA
[Dol11]
´ Ondˇrej. Big data: Nov´e zp˚ DOLAK, usoby zpracov´an´ı a anal´ yzy velk´ ych objem˚ u dat. In: SystemOnLine [online]. 2011 [cit. 2014-04-16]. Dostupn´e z: http://www.systemonline.cz/clanky/big-data.htm
[Flo12]
FOWLER, Martin. NosqlDefinition. Martin Fowler [online]. 9. 1. 2012 [cit. 2014-04-22]. Dostupn´e z: http://martinfowler.com/bliki/ NosqlDefinition.html
[Gro09]
GRONINGEN, Martijn. Introduction to Hadoop. Trifork Blog [online]. 4. 8.2009 [cit. 2014-04-22]. Dostupn´e z: http://blog.trifork.com/ 2009/08/04/introduction-to-hadoop/
[Her06]
HERNANDEZ, Michael J. N´avrh datab´az´ı. 1. vyd. Praha: Grada, 2006, 408 s. ISBN 80-247-0900-7.
[Hof09]
HOFF, Todd. Neo4j: a Graph Database that Kicks Buttox. High Scalability [online]. 13. 6. 2009 [cit. 2014-04-25]. Dostupn´e z: http: //highscalability.com/neo4j-graph-database-kicks-buttox
[Hof10]
HOFF, Todd. Troubles with Sharding: What can we learn from the Foursquare Incident?. High Scalability [online]. 15. 10. 2010 [cit. 2014-04-24]. Dostupn´e z: http://highscalability.com/blog/2010/10/15/troubles-withsharding-what-can-we-learn-from-the-foursquare.html
[Cha11]
CHAPPLE, Mike. Abandoning ACID in Favor of BASE. About.com [online]. 2011 [cit. 2014-04-22]. Dostupn´e z: http://databases.about. com/od/otherdatabases/a/Abandoning-Acid-In-Favor-Of-Base. htm
[Jak07]
ˇ ´IK, Ondˇrej. Srovn´an´ı datab´azov´ JAKUBC ych server˚ u. Linux EXPRES [online]. 2007 [cit. 2014-04-22]. Dostupn´e z: http://www.linuxexpres. cz/software/srovnani-databazovych-serveru
[Kal12]
ˇ Jindˇrich a Ludmila KALUZOV ˇ A. ´ Modelov´an´ı dat v inforKALUZA, maˇcn´ıch syst´emech. 1. vyd. Praha: Ekopress, 2012, 125 s. ISBN 978-8086929-81-1.
[Kat12]
KATSOV, Ilya. NoSQL Data Modeling Techniques. Highly Scalable Blog [online]. 1. 3. 2012 [cit. 2014-04-22]. Dostupn´e z: http://highlyscalable.wordpress.com/2012/03/01/ nosql-data-modeling-techniques/
69
LITERATURA
LITERATURA
[Klo12]
´ KLOBASA, Pavel. Letm´ y technologick´ y pohled na MongoDB. VsadNaJavu.cz: Odborn´y weblog o v´yvoji webov´ych aplikac´ı nad platformou Java a J2EE [online]. 23. 1. 2012 [cit. 2014-0424]. Dostupn´e z: http://vsadnajavu.cz/2012-01/databaze/ letmy-technologicky-pohled-na-mongodb/
[Kos99]
KOSEK, Jiˇr´ı. Aplikace na Webu: Jak pracuj´ı datab´aze na Webu: Co je ˇ O WWW [online]. to datab´aze. Domovsk´a str´anka Jirky Koska: VSE 1999 [cit. 2014-04-22]. Dostupn´e z: http://www.kosek.cz/clanky/ iweb/12.html
[Kul08]
´ KULHAN, Jakub a Zdenˇek LEHOCKY. Normalizace relaˇcn´ıch datab´az´ı. Programujte.com [online]. 2008 [cit. 201404-22]. Dostupn´e z: http://programujte.com/clanek/ 2008071900-normalizace-relacnich-databazi/
[Lac12]
LACHLAN, James. Why Big Data and Business Intelligence Are Like One Direction. SmartData Collective [online]. 2. 10. 2012 [cit. 201404-25]. Dostupn´e z: http://smartdatacollective.com/yellowfin/ 75616/why-big-data-and-business-intelligence-one-direction
[Mam11]
MAMTANI, Vinod. Cassandra Data Model. NimbleDais [online]. 1. 6. 2011 [cit. 2014-04-25]. Dostupn´e z: http://nimbledais.com/?p=150
[MaS08]
Market Share. MySQL [online]. 2008 [cit. 2014-04-22]. Dostupn´e z: http://www.mysql.com/why-mysql/marketshare/
[Mon14]
The MongoDB 2.6 Manual. MongoDB [online]. 2014 [cit. 2014-04-24]. Dostupn´e z: http://docs.mongodb.org/manual/
[MSSQL01] Microsoft SQL Server 2000: administrace syst´emu MCSE Training Kit. Vyd. 1. Praha: Computer Press, 2001, xxii, 651 s. ISBN 80-722-6526-1. [MyS11]
Co je to datab´aze MySQL?. Artic Studio Webdesign [online]. 2011 [cit. 2014-04-22]. Dostupn´e z: http://www.artic-studio.net/ slovnicek-pojmu/databaze-mysql/
[Nia13]
NIAH, Omer. Four category of NoSQL databases with examples. Database Diary [online]. 12. 12. 2013 [cit. 2014-04-23]. Dostupn´e z: http://dbdiary.com/ four-category-of-nosql-databases-with-examples/
[Norm07]
Teorie relaˇcn´ıch datab´az´ı: Normalizace. Manualy.net [online]. 2007 [cit. 2014-04-22]. Dostupn´e z: http://www.manualy.net/article. php?articleID=13 70
LITERATURA
LITERATURA
[Opp06]
OPPEL, Andrew. Datab´aze bez pˇredchoz´ıch znalost´ı. Vyd. 1. Brno: Computer Press, 2006, 319 s. ISBN 80-251-1199-7.
[Pok12]
´ Jaroslav. NoSQL datab´aze: souˇcasn´ POKORNY, y stav v´ yvoje. In: Modern´ı datab´aze 2012: Zpracov´an´ı velk´ych objem˚ u dat a transakc´ı. Praha: KOMIX s.r.o., 2012, s. 11. ISBN 978-80-905231-0-4. Dostupn´e z: http://www.analyzyareporting.cz/sitecore/content/ Komix_cs-CZ/Home/Produkty/MD/2012/~/media/Komix/Downloads/ Konference_Moderni_databaze/Moderni_databaze_2012/Sbornik_ konference_Moderni_databaze_2012.ashx
[Pok97]
´ Jaroslav. Z´aklady implementace soubor˚ POKORNY, u a datab´az´ı. 1. vyd. Praha: Karolinum, 1997, 196 s. ISBN 80-718-4472-1.
[Rah10]
RAHIEN, Ayende. That No SQL Thing: Column (Family) Databases. Ayende @ Rahien [online]. 14. 5. 2010 [cit. 2014-04-25]. Dostupn´e z: http://ayende.com/blog/4500/ that-no-sql-thing-column-family-databases
[Red12]
REDMOND, Eric, Jim R WILSON a Jacquelyn CARTER. Seven databases in seven weeks: a guide to modern databases and the NoSQL movement [online]. Dallas, Tex.: Pragmatic Bookshelf, 2012, xiii, 333 p. [cit. 2014-04-26]. Pragmatic programmers. ISBN 19-343-5692-1.
[Red14]
Documentation: Redis. Redis [online]. 2014 [cit. 2014-04-27]. Dostupn´e z: http://redis.io/documentation
[Ria11]
Why Riak. Riak Docs [online]. 2011 [cit. 2014-04-26]. Dostupn´e z: http: //docs.basho.com/riak/latest/theory/why-riak/
[Sad12]
SADALAGE, Pramod J. a Martin FOWLER. Introduction to Polyglot Persistence: Using Different Data Storage Technologies for Varying Data Storage Needs: Polyglot Data Store Usage. InformIT [online]. 5. 9. 2012 [cit. 2014-04-28]. Dostupn´e z: http://www.informit.com/ articles/article.aspx?p=1930511&seqNum=2
[Sad13]
SADALAGE, Pramod J a Martin FOWLER. NoSQL distilled: a brief guide to the emerging world of polyglot persistence. Upper Saddle River, NJ: Addison-Wesley, c2013, xix, 164 p. ISBN 03-218-2662-0.
[Seg12]
SEGUIN, Karl. The Little Redis Book. 23. 1. 2012. Dostupn´e z: http: //openmymind.net/2012/1/23/The-Little-Redis-Book/
[Sch88]
SCHEBER, Anton. Datab´azov´e syst´emy. 1. vyd. Praha: SNTL, 1988, 321 s. 71
LITERATURA
LITERATURA
[Skˇr00]
ˇ SKRIVAN, Jarom´ır. Datab´aze a jazyk SQL. Interval.cz [online]. 2000 [cit. 2014-04-22]. Dostupn´e z: http://interval.cz/clanky/ databaze-a-jazyk-sql/
[Skˇr02]
ˇ SKRIVAN, Jarom´ır. Datab´aze nejsou jen MySQL. Interval.cz [online]. 2002 [cit. 2014-04-22]. Dostupn´e z: http://interval.cz/clanky/ databaze-nejsou-jen-mysql/
[Sto10]
STONEBRAKER, Michael. SQL databases v. NoSQL databases. Communications of the ACM [online]. 2010-04-01, vol. 53, issue 4, s. 10[cit. 2014-04-28]. DOI: 10.1145/1721654.1721659. Dostupn´e z: http: //portal.acm.org/citation.cfm?doid=1721654.1721659
[Str11]
STRAUCH, Christof. NoSQL Databases. Stuttgart, 2011. Dostupn´e z: http://www.christof-strauch.de/nosqldbs.pdf
ˇ [Sel11]
ˇ SELENG, Martin a Michal LACLAV´IK. Dostupn´e ˇsk´alovateln´e rieˇsenia pre spracovanie velk´eho objemu d´at a d´atov´e sklady. Mikulov: DATAKON 2011, 2011, 22 s. Dostupn´e z: http://laclavik.sk/ publications/datakon_final_2011.pdf
[Tiw11]
TIWARI, Shashank C. Professional nosql. 1. vyd´an´ı. Indianapolis: Wiley Pubishing, Inc., 2011. ISBN 04-709-4224-X.
[Ver13]
VERMA, Ananda. CAP Theorem. TechSpritz: Stay Tuned to Technology [online]. 17. 5. 2013 [cit. 2014-04-22]. Dostupn´e z: http://www. techspritz.com/cap-theorem/
72
A Uˇzivatelsk´a pˇr´ıruˇcka Tato uˇzivatelsk´e pˇr´ıruˇcka popisuje pouˇzit´ı aplikace NoSqlManager pro datab´azov´ y syst´em Redis, kter´a slouˇz´ı pro jednoduchou spr´avu. Je uveden i postup pro zprovoznˇen´ı serveru s Redisem.
Zprovoznˇ en´ı datab´ azov´ eho syst´ emu Redis Pro spuˇstˇen´ı datab´azov´eho syst´emu jsou uvedeny tˇri moˇznosti, kde prvn´ı je urˇcena pro spuˇstˇen´ı na operaˇcn´ım syst´emu Windows, druh´a pomoc´ı VirtualBoxu a tˇret´ı pro operaˇcn´ı syst´em Linux. Na ofici´aln´ıch str´ank´ach Redisu je odkaz na projekt skupiny Microsoft Open Tech group1 , kter´a vyv´ıj´ı a udrˇzuje verzi Redisu pro operaˇcn´ı syst´em Windows. Poskytuje moˇznost si st´ahnout zip soubor s funkˇcn´ı verz´ı, kter´ y je um´ıstˇen na str´ank´ach projektu v /bin/release/. Tento soubor staˇc´ı rozbalit a n´aslednˇe spustit redisserver.exe. Syst´em pak n´aslednˇe bˇeˇz´ı jako localhost na portu 6379. Je tak´e moˇzno si z poskytnut´ ych zdrojov´ ych soubor˚ u vytvoˇrit vlastn´ı build. Druhou moˇznost´ı je otevˇr´ıt si pomoc´ı programu VirtualBox virtualizovan´ y obraz operaˇcn´ıho syst´emu Debian, kter´ y je souˇc´ast´ı pˇriloˇzen´eho DVD. Ve virtualizovan´em syst´emu jsou nastaveni dva uˇzivatel´e, user s heslem user a root, kter´ y m´a administr´atorsk´a pr´ava a heslo je opˇet stejn´e, root. Po pˇripojen´ı staˇc´ı spustit server pˇr´ıkazem redis-server. D´ale jsou uvedeny podrobnosti o virtualizovan´em obrazu. • Uˇ zivatel: user • Heslo: user • Administr´ ator: root • Heslo administr´ atora: root • IP adresa: 192.168.56.101 • Hostname: debian1 • Operaˇ cn´ı syst´ em: Debian 3.2.51-1 i686 GNU/Linux 1
https://github.com/MSOpenTech/redis
73
Uˇzivatelsk´a pˇr´ıruˇcka
Posledn´ı moˇznost´ı je nainstalovat si syst´em Redis na operaˇcn´ı syst´em Linux. Postup instalace je pˇrevzat z domovsk´ ych str´anek Redisu. Redis se nejprve st´ahne, pak rozbal´ı a zkompiluje pomoc´ı n´asleduj´ıc´ıch pˇr´ıkaz˚ u. $ $ $ $
wget http://download.redis.io/releases/redis-2.8.2.tar.gz tar xzf redis-2.8.2.tar.gz cd redis-2.8.2 make
Je nutn´e doinstalovat tak´e tcl verze 8.5 a prov´est test. Pot´e lze Redis spustit ve sloˇzce src opˇet pomoc´ı pˇr´ıkazu redis-server. $ apt-get install tcl $ make test $ make install
Vytvoˇren´ı distribuovan´e datab´aze s master-slave replikac´ı prob´ıh´a pˇres pˇr´ıkazovou ˇra´dku Redis-cli. Na vˇsech stroj´ıch mus´ı bˇeˇzet vlastn´ı instance Redisu, pot´e lze na uzlu, kter´ y bude v roli slave, zadat pˇr´ıkaz slaveof host port. Pomoc´ı pˇr´ıkazu slaveof no one se zruˇs´ı replikace na dan´em uzlu. >slaveof 192.168.56.101 6379
74
Uˇzivatelsk´a pˇr´ıruˇcka
NoSqlManager
Obr´azek A.1: Uk´azka hlavn´ıho okna programu NoSqlManager.
Po spuˇstˇen´ı programu NoSqlManager.exe se zobraz´ı uˇzivateli hlavn´ı okno aplikace, viz obr´azek A.1. To je rozdˇeleno do nˇekolika ˇc´ast´ı. Levou ˇca´st zab´ır´a okno pro v´ ypis stromov´e struktury pro pˇripojen´ı, pravou ˇc´ast pak zab´ıraj´ı z´aloˇzky s daty. V horn´ı ˇc´asti je liˇsta obsahuj´ıc´ı dvˇe nab´ıdky File a About. Doln´ı ˇc´ast zab´ır´a stavov´ y ˇra´dek, ve kter´em jsou zobrazov´any r˚ uzn´e stavov´e informace. Pˇri prvn´ım spuˇstˇen´ı je nutno pˇridat nov´e pˇripojen´ı k serveru s bˇeˇz´ıc´ım Redisem. Pomoc´ı nab´ıdky File → Add New Connection se otevˇre okno pro zad´an´ı jm´ena serveru, kter´ ym se bude prezentovat v aplikaci, IP adresa oznaˇcena v oknˇe jako Host, port, na kter´em bˇeˇz´ı instance Redisu a v pˇr´ıpadˇe, ˇze je Redis zabezpeˇcen, se m˚ uˇze zadat i heslo. Okno pro pˇrid´an´ı nov´eho pˇripojen´ı je stejn´e jako pro editaci st´avaj´ıc´ıho pˇripojen´ı, viz obr´azek A.2. Nastaven´a pˇripojen´ı se ukl´adaj´ı do konfiguraˇcn´ıho souboru a pˇri spuˇstˇen´ı jsou opˇetovnˇe naˇctena do stromov´e struktury.
75
Uˇzivatelsk´a pˇr´ıruˇcka
Obr´azek A.2: Okno pro pˇrid´an´ı a editaci pˇripojen´ı.
V lev´e ˇc´asti aplikace je n´azornˇe zobrazen seznam zadan´ ych pˇripojen´ı. Na zaˇca´tku jsou oznaˇceny ˇcerven´ ym symbolem, kter´ y znamen´a, ˇze se k serveru jeˇstˇe nepˇripojovalo nebo ˇze je pˇr´ıpadnˇe server nedostupn´ y. Po dvojkliku na n´azev serveru se stav aktualizuje. V pˇr´ıpadˇe u ´spˇeˇsn´eho pˇripojen´ı se zmˇen´ı ikonka na zelenou a otevˇre se seznam datab´az´ı. Pokud je server v roli slave, je opˇet pˇri dvojkliku otevˇren seznam datab´az´ı, ale ikonka je zobrazena ˇsedivou barvou. T´ım je uˇzivatel upozornˇen, ˇze se jedn´a pouze o sekund´arn´ı uzel, do kter´eho se nezapisuje. Na obr´azku A.3 je zn´azornˇen seznam pˇripojen´ı. Pokud na dan´em serveru Redis nebˇeˇz´ı nebo je poˇzadovan´a adresa neplatn´a, je uˇzivatel upozornˇen chybov´ ym hl´aˇsen´ım, ˇze se nepodaˇrilo pˇripojit k datab´azi.
Obr´azek A.3: Uk´azka stromov´e struktury seznamu pro pˇripojen´ı.
Nad n´azvem serveru je moˇzn´e zavolat dalˇs´ı nab´ıdku zobrazenou na obr´azku A.4 pomoc´ı stisknut´ı prav´eho tlaˇc´ıtka myˇsi. Je zde moˇzn´e zvolit editov´an´ı nastaven´ı pˇripojen´ı, moˇznost aktualizovat stav pˇripojen´ı pomoc´ı Refresh a tak´e pomoc´ı nab´ıdky 76
Uˇzivatelsk´a pˇr´ıruˇcka
Obr´azek A.4: Uk´azka nab´ıdky nad zvolen´ ym serverem. Delete zvolen´e nastaven´ı smazat ze stromov´e struktury. Dalˇs´ı poskytovanou nab´ıdkou je moˇznost zobrazen´ı informac´ıch o Redisu na zvolen´em serveru. Informace jsou zobrazeny formou v´ ypisu, kter´ y vrac´ı po dotazu Redis, v samostatn´em oknˇe, jehoˇz uk´azka je na obr´azku A.5. Je zde napˇr´ıklad uvedena verze syst´emu Redis, poˇcet pˇripojen´ ych klient˚ u a mnoˇzstv´ı kl´ıˇc˚ u v jednotliv´ ych datab´az´ıch.
Obr´azek A.5: Uk´azka okna s informacemi o serveru. V nab´ıdce je tak´e uvedena moˇznost otevˇren´ı konzolov´eho okna pro zvolen´ y server. Konzole je zobrazena jako jednoduch´e okno s ˇcern´ ym pozad´ım a b´ıl´ ym textem, viz obr´azek A.6. Okno konzole je rozdˇeleno na dvˇe ˇc´asti. Prvn´ı ˇc´ast zobrazuje poˇzadovan´e dotazy a jejich v´ ysledky. Pro pˇrehlednost je vˇzdy pˇred dotazem zobrazena adresa serveru a ˇc´ıslo aktu´aln´ı datab´aze. V´ ypis odpov´ıd´a pˇr´ıkazov´e ˇra´dce Redis-cli. 77
Uˇzivatelsk´a pˇr´ıruˇcka
Pˇr´ıkazy se zad´avaj´ı do pole, kter´e je um´ıstˇeno v doln´ı ˇca´sti. Pro jednoduˇsˇs´ı odes´ıl´an´ı dotaz˚ u je zde um´ıstˇeno tlaˇc´ıtko Send, kter´e je aktivn´ı pouze, pokud je v poli pro dotazy zaps´an nˇejak´ y text. Po zaps´an´ı dotazu do vstupn´ıho pole je moˇzn´e tak´e odeslat dotaz pomoc´ı kl´avesy Enter. Okno se zavˇre bud’ pˇr´ıkazem exit, nebo klasicky kˇr´ıˇzkem v prav´em horn´ım rohu. Konzolov´ ych oken m˚ uˇze b´ yt otevˇreno v´ıce a je moˇzn´e pˇrep´ınat mezi hlavn´ım oknem aplikace a konzol´ı, d´ıky ˇcemuˇz m˚ uˇze uˇzivatel pouˇz´ıvat jak grafick´e rozhran´ı, tak pˇr´ıkazovou ˇr´adku.
Obr´azek A.6: Konzolov´e okno. Po dvojkliku na zvolenou datab´azi serveru ve stromov´e struktuˇre se otevˇre v hlavn´ı ˇc´asti okna nov´a z´aloˇzka s daty. Pro jednoduˇsˇs´ı orientaci je z´aloˇzka vˇzdy oznaˇcena jm´enem serveru a oznaˇcen´ım datab´aze. Kaˇzd´a zvolen´a datab´aze m´a otevˇrenu pouze jednu z´aloˇzku. V pˇr´ıpadˇe, ˇze z´aloˇzka je otevˇrena, ale nen´ı aktivn´ı, a uˇzivatel chce znovu zobrazit dan´a data, staˇc´ı se pˇrepnout na z´aloˇzku nebo znova otevˇr´ıt dvojklikem danou datab´azi, z´aloˇzka se zvolenou datab´az´ı se pot´e stane aktivn´ı. Z´aloˇzky je tak´e moˇzn´e pomoc´ı tlaˇc´ıtka v z´ahlav´ı zavˇr´ıt. Na obr´azku A.7 je zn´azornˇena uk´azka hlavn´ıho okna, ve kter´em je otevˇreno nˇekolik z´aloˇzek.
78
Uˇzivatelsk´a pˇr´ıruˇcka
Obr´azek A.7: Uk´azka s nˇekolika z´aloˇzkami. Obsah kaˇzd´e z´aloˇzky tvoˇr´ı ˇsest tlaˇc´ıtek a tabulka s daty. Tabulka je tvoˇrena tˇremi sloupci, Key, Value a Type. Key zobrazuje jm´eno kl´ıˇce. Value zobrazuje hodnotu u dat typu String, u zb´ yvaj´ıc´ıch typ˚ u je zde uveden zjednoduˇsen´ y v´ ypis hodnot. Type pak urˇcuje typ dat. Pomoc´ı postrann´ıch ˇsipek tabulky je moˇzn´e si rozbalit podrobnˇejˇs´ı zobrazen´ı hodnot. U typ˚ u List s Set je pak zobrazen seznam hodnot. U Hash a SortedSet je po rozbalen´ı uvedena menˇs´ı tabulka. V pˇr´ıpadˇe Hash je tvoˇrena dvˇema sloupci Hash key a Value. SortedSet m´a tak´e dva sloupce, Value a Score.
Obr´azek A.8: Uk´azka okna pro pˇrid´an´ı nov´eho kl´ıˇce do datab´aze. 79
Uˇzivatelsk´a pˇr´ıruˇcka
Nov´a hodnota do datab´aze se pˇrid´a pomoc´ı tlaˇc´ıtka Add key. Zobraz´ı se okno s moˇznost´ı v´ ybˇeru typu kl´ıˇce, viz obr´azek A.8. D´ale je nutno zadat jm´eno kl´ıˇce. Hodnota se pˇrid´av´a pomoc´ı tlaˇc´ıtka oznaˇcen´eho symbolem tuˇzka. Po kliknut´ı na toto tlaˇc´ıtko se otevˇre dalˇs´ı okno, kde je umoˇznˇeno podle zvolen´eho typu zad´avat hodnoty. V pˇr´ıpadˇe zvolen´ı typu String, je moˇzno zadat pouze jednu hodnotu. V ostatn´ıch pˇr´ıpadech je umoˇznˇeno po vyplnˇen´ı jedn´e ˇra´dky v tabulce stisknout Enter a zadat dalˇs´ı hodnoty. Okno pro pˇrid´av´an´ı hodnot je zobrazeno na obr´azku A.9. Tlaˇc´ıtkem Ok se potvrd´ı zvolen´e hodnoty a uˇzivatel je vr´acen do okna pro nastavov´an´ı jm´ena a typu kl´ıˇce. M˚ uˇze opˇetovnˇe zavolat okno pro u ´pravu hodnot. V pˇr´ıpadˇe, ˇze uˇzivatel jiˇz vyplnil nˇejak´e hodnoty a zmˇen´ı typ dat, je upozornˇen, ˇze m˚ uˇze o nastaven´e hodnoty pˇrij´ıt. Po stisknut´ı tlaˇc´ıtka Add dojde k pˇripojen´ı k datab´azi a pˇrid´an´ı hodnoty. Pokud je zvoleno tlaˇc´ıtko Cancel nedojde k ˇz´adn´e akci.
Obr´azek A.9: Uk´azka okna pro pˇrid´av´an´ı a u ´pravu hodnot kl´ıˇce typu Hash.
Tlaˇc´ıtko Delete key vymaˇze z datab´aze vybran´e kl´ıˇce. Kl´ıˇc se mus´ı nejprve oznaˇcit kliknut´ım na jeho ˇra´dek. V pˇr´ıpadˇe v´ ybˇeru v´ıce kl´ıˇc˚ u pro smaz´an´ı staˇc´ı pˇridrˇzet kl´avesu Ctrl a pomoc´ı myˇsi udˇelat hromadn´ y v´ ybˇer. Po vybr´an´ı kl´ıˇc˚ u staˇc´ı kliknout na tlaˇc´ıtko Delete key a poˇzadovan´e kl´ıˇce jsou z datab´aze smaz´any.
80
Uˇzivatelsk´a pˇr´ıruˇcka
Obr´azek A.10: Uk´azka okna pro zobrazen´ı n´ahledu kl´ıˇce.
Pro u ´pravu dat je moˇzn´e uˇz´ıt tlaˇc´ıtko Edit key nebo dvojklik na poˇzadovan´ y ˇr´adek v tabulce. Zobraz´ı se n´ahledov´e okno, kter´e je zobrazeno na obr´azku A.10, kde jsou uvedeny podrobnˇejˇs´ı informace, jako je typ kl´ıˇce, jm´eno kl´ıˇce a n´ahled na hodnoty. Pro u ´pravu je nutno stisknout tlaˇc´ıtko se symbolem tuˇzky. Otevˇre se stejn´a tabulka, kter´a je pˇri pˇrid´av´an´ı dat do datab´aze, viz A.9. Hlavn´ım rozd´ılem oproti pˇrid´an´ı nov´e hodnoty je, ˇze jiˇz v t´eto tabulce doch´az´ı k dotaz˚ um do datab´aze. Napˇr´ıklad v pˇr´ıpadˇe, ˇze pomoc´ı kl´avesy Delete smaˇzeme nˇejakou hodnotu, dojde rovnou k proveden´ı odstranˇen´ı hodnoty v datab´azi. Pˇri u ´pravˇe je moˇzn´e pouze pˇrid´avat nov´e hodnoty nebo mazat st´avaj´ıc´ı. Tlaˇc´ıtko Refresh umoˇzn ˇuje aktualizovat tabulku s daty. Pomoc´ı tlaˇc´ıtka Export je umoˇznˇeno uloˇzit aktu´aln´ı data uveden´a na zvolen´e z´aloˇzce do souboru ve form´atu JSON. Po kliknut´ı na tlaˇc´ıtko je zobrazeno klasick´e dialogov´e okno pro uloˇzen´ı souboru. Obdobnˇe je tomu i pˇri kliknut´ı na tlaˇc´ıtko Import, kter´e poskytuje moˇznost nahr´at data do datab´aze ze zvolen´eho JSON souboru. V pˇr´ıpadˇe, ˇze se jiˇz v datab´azi nach´azej´ı nˇejak´a data, jsou pˇri importu doplnˇena o data uloˇzen´a v souboru. Pokud dojde k duplicitˇe kl´ıˇc˚ u, je st´avaj´ıc´ı kl´ıˇc pˇreps´an importovan´ ym kl´ıˇcem a jeho hodnotami. Pouze v pˇr´ıpadˇe kl´ıˇce typu List dojde k dvojit´emu pˇrid´an´ı hodnot. Jedn´a se o oˇcek´avan´e chov´an´ı, kter´e je zp˚ usobeno jednoduch´ ym pˇr´ıstupem Redisu k dat˚ um.
81
B Graf z´avislost´ı
Obr´azek B.1: Graf z´avislost´ı jednotliv´ ych jmenn´ ych prostor˚ u vygenerovan´ y Visual Studiem.
82
C Obsah DVD Pˇr´ılohou t´eto diplomov´e pr´ace je DVD, kter´e m´a n´asleduj´ıc´ı strukturu: ˇ mˇ • Cti e.txt – Textov´ y soubor, obsahuj´ıc´ı popis jednotliv´ ych adres´aˇr˚ u uloˇzen´ ych na m´ediu. • Dokumentace – Obsahuje elektronickou verzi t´eto diplomov´e pr´ace. • Program NoSqlManager – Obsahuje vˇsechny souˇc´asti programu, jako jsou spustiteln´ y soubor a zdrojov´e k´ody. – bin – Obsahuje zazipovanou spustitelnou verzi programu s pˇriloˇzen´ ymi knihovnami. – doc – Vygenerovan´a program´atorsk´a dokumentace. – src – Obsahuje zdrojov´e k´ody programu a graf z´avislosti jmenn´ ych prostor˚ u. • Programov´ e vybaven´ı – Obsahuje n´astroje pro spuˇstˇen´ı datab´azov´eho syst´emu Redis. – Instal´ ator .NET Framework 4.5.1 – Obsahuje instalaˇcn´ı program Microsoft .NET Framework 4.5.1. – MSOpenTech.Redis – Obsahuje verzi datab´azov´eho syst´emu Redis, kter´a je spustiteln´a na operaˇcn´ım syst´emu Windows. – VirtualBox – Obsahuje virtualizovan´ y obraz operaˇcn´ıho syst´emu Debian s nainstalovan´ ym syst´emem Redis
83