Přeskočit obsah

Základní principy NoSQL databáze

Často se u zákazníků setkáváme s požadavkem na instalaci NoSQL databází. Tyto databáze jsou obecně známé svojí snadnou škálovatelností a rychlostí. To je ale vykoupeno tím, jak je databáze interně navržena.

Rozdíly mezi NoSQL a SQL

NoSQL databáze bývají navrženy dle principu BASE:

  • Basically Available: zápisové a čtecí operace jsou vždy dostupné na všech nodech, ale za cenu konzistence (čtecí operace nemusí dostat nejnovější data)
  • Soft state: bez garance konzistence můžeme odhadovat, v jakém stavu jsou data, pouze s určitou jistotou
  • Eventually consistent: Pokud je systém funkční, tak po dostatečné dlouhé době se data dostanou do konzistentního stavu.

Oproti transakčním databázím splňující ACID je to pochopitelně velké omezení. V NoSQL není zajištěna atomicita dat a jak je uvedeno výše, repliky jsou asynchronní. Při návrhu aplikace je třeba na tato omezení myslet. NoSQL databáze pro některé typu dat nejsou vhodná. Typickým příkladem špatného použití je jakákoliv manipulace s penězmi – ukládat do NoSQL finanční trasakce, volný kredit zákazníka v aplikaci/službě apod. Tento typ dat je vždy nutné ukádat do databáze splňující principy ACID.

Dalším rozdílem oproti SQL databázím je chování v případě výpadku nodu v clusteru. NoSQL se snaží zachovat dostupnost služby (každý dotaz dostane odpověď), kdežto SQL preferují konzistenci dat (při čtení dostane klient aktuální data nebo chybu).

Výhody NoSQL

Motivace pro použití NoSQL jsou především snadný návrh aplikace, jednoduché škálování a schopnost ukládání velkého množství dat. Při výběru správné NoSQL je však třeba si jednoznačně určit s jakým typem dat bude aplikace pracovat a podle toho zvolit správný produkt. Nejtypičtějším použitím je ukládání dat typu klíč-hodnota, ale existují databáze pro speciální použití například pro ukládání dokumentů, grafů, objektů, xml apod. Existují i databáze univerzální, které podporují více způsobů ukládání dat. Zvolit si správný produkt přesně pro potřeby konkrétního projektu je klíčové.