Dokumentově orientovaná databáze
- data ukládá v BSON (binární JSON)
Architektura
- máme server, databáze, kolekce (logický kontejner pro dokumenty, ekvivalent tabulky) a dokumenty (jsou ve formátu klíč-hodnota i s vnořenými a složitými strukturami)
Sharding
- automatická distribuce dat mezi více uzlů clusteru
- na jednotlivých uzlech jsou shardy
- shard je implementován jako replikační set pro zajištění dostupnosti
- data se rozdělují pomocí sharding klíčů
- součástí jsou konfigurační servery, které udržují metadata o rozložení dat v clusteru
- součástí jsou Mongo Routery = příjímají dotazy od klienta a přeposílají je na konkrétní shardy + vrací data klientovi
Replikace
- v rámci replikačního setu máme primární uzel a sekundární uzly
- primární přijímá všechny zápisy
- sekundární obsahují kopie dat a slouží k obsluze dat na čtení
- po selhání primárního uzlu je jeden ze sekundárních uzlů povýšený na primární
- pomocí algoritmu volby (quorum)
Indexy
- optimalizace výkonu dotazů, redukují množství prohledávaných dat
- bez indexu se provádí full collection scan
- máme jednoduché (na jednom poli dokumentu) a složené (na více polích najednou)
- multikey indexy - na pole obsahující pole nebo vnořené pole
- mám pak index na každou hodnotu v poli
- textové indexy - pro fulltextové vyhledávání
- geospatiální indexy - na geolokační data
- pozor - indexy jsou náročné na místo na disku
Výhody
- flexibilita (různé dokumenty v jedné kolekci)
- škálovatelné - horizontální škálování pomocí shardingu
- výkon
- vnořené dokumenty - můžu reprezentovat složité struktury a nemusím joinovat
Nevýhody
- nezaručená integrita dat
- nadbytek dat - můžou vznikat redundance
- složitější správa clusteru
- absence joinů - dotazování se napříč kolekcemi je složitější
Validační schéma
- pokud chceme specifikovat různé datové typy, povinnost jednotlivých properties či rozsah hodnot
- úrovně vynucování validace:
- strict - pokud dokument nevyhovuje validačnímu schématu - operace selže
- moderate - operace selže jenom při explicitní změně nevyhovujících polí
- takže můžeme vkládat dokumenty, které nevyhovují schématu
- díky validačnímu schématu máme kvalitnější data, minimum chyb (aplikace nepracuje s nevalidními daty) a lepší údržba (máme očekávatelný formát)
db.createCollection("uzivatele", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["jmeno", "vek"],
properties: {
jmeno: {
bsonType: "string",
description: "Jméno uživatele musí být text"
},
vek: {
bsonType: "int",
minimum: 0,
maximum: 120,
description: "Věk musí být celé číslo v rozsahu 0–120"
},
email: {
bsonType: "string",
pattern: "^.+@.+$",
description: "Email musí být validní"
}
}
}
}
});
CAP teorém
- splňuje garanci CP