- jednotlivé dokumenty jsou kódované v JSONu, BSONu (binární verze JSONu) a nebo ve formátu XML
- dokumenty jsou tedy většinou hierarchické stromové struktury
- jsou organizovány do různých kolekcí
- dokumenty vedle samotných dat obsahují i metadata
- a mohou mít různou strukturu, nejsou omezený nějakým pevně daným schématem
- využívají se i u webových aplikací, protože dokumenty se mapoují na objekty (ideální na OOP vývoj)
- dá se říct, že jsou to rozšířené Key-Value databases, kde “value” část je možné prozkoumat na úrovni databáze ⇒ je to strom
- v Key-value stores je hodnota black-box pro danou databázi
- je možné vytvářet indexy nad poli dokumentů pro rychlejší vyhledávání
- každá dokumentová databáze má svůj dotazovací jazyk a nebo API
Výhody
- dobře se mapují na objekty a tím pádem se dobře integrují s moderními aplikacemi
- jsou flexibilní - není potřeba striktně definovat a dodržovat strukturu dat
- vysoký výkon - dokumenty se ukládají jako jedna jednotka (neexistují joiny)
- škálovatelné - dobrá podpora shardingu
Nevýhody
- nepodporují joiny, je složitější se dotazovat na data napříč kolekcemi
- velké dokumenty mohou být neefektivní, když se dotazuji pouze na část (tak se musí načíst celý)
- mohou se objevovat duplicitní a nadbytečná data
- není zaručená integrita dat - není zajištěné to, že jsou všechna data konzistentní
- jak je všechno uložené u sebe
Use cases
- logování eventů, CMS systémy, blogy, webová analytika, e-commerce aplikace
- všechno, kde se dají využít strukturované dokumenty s podobným schématem
- kdy spíše nepoužívat:
- když se schéma/design dokumentů často mění
- když se často aktualizuje více dokumentů najednou
Konkrétní databáze