Typy NoSQL databáz, CAP teoréma.
Typy NoSQL databáz
NoSQL databázy sú navrhnuté na spracovanie veľkých objemov neštruktúrovaných alebo pološtruktúrovaných dát, ktoré tradičné relačné databázy nemusia zvládnuť efektívne.
Databázy typu kľúč-hodnota (Key-Value Databases)
Dáta sú uložené vo forme párov kľúč : hodnota
. Tento typ sa používa napríklad pri vyrovnávacej pamäti (cache), pre správu a ukladanie relácií používateľov a podobne.
Charakteristiky:
- Jednoduchý dátový model.
- Rýchly prístup pomocou jedinečného kľúča.
- Hodnoty môžu byť jednoduché (reťazce, čísla) alebo zložité (JSON, binárne objekty).
Napríklad:
- Redis: In-memory (v pamäti RAM) databáza, s podporou perzistencie (trvalého uloženia na disk).
- Napríklad:
SET "user:1001" '{"meno": "Jana", "vek": 25}' GET "user:1001"
- Napríklad:
- Amazon DynamoDB: Škálovateľná a distribuovaná key-value databáza.
Dokumentové databázy (Document-Oriented Databases)
Dáta sú uložené vo forme dokumentov (zvyčajne JSON, BSON alebo XML).
Používajú sa pri aplikáciách s dynamickými a často meniacimi sa schémami, napríklad: e-commerce, CMS (Content Management System: WordPress a podobne).
Charakteristiky:
- Dokumenty obsahujú polia a hodnoty, podobne ako objekty v programovaní;
- Flexibilná štruktúra (každé pole nemusí byť rovnaké pre všetky dokumenty);
Napríklad:
- MongoDB: Populárna dokumentová databáza s podporou replikácie a "shardovania";
- Napríklad:
db.users.insertOne({ meno: "Peter", vek: 30, adresa: { mesto: "Bratislava", ulica: "Hlavná 5" } })
- Napríklad:
- Couchbase: Kombinuje dokumentové a key-value úložisko;
Stĺpcové databázy (Column-Family Databases)
Dáta sú uložené ako riadky, pričom každý riadok môže obsahovať rôzny počet stĺpcov, ktoré sú organizované do rodín (column families).
Používajú sa pri analytike, logovaní, v odporúčacích systémoch a tak ďalej...
Charakteristiky:
- Efektívne ukladanie a vyhľadávanie veľkých dát;
- Škálovanie na veľké objemy dát a geograficky distribuované systémy;
Napríklad:
- Apache Cassandra: Distribuovaná stĺpcová databáza odolná voči výpadkom;
- Napríklad:
CREATE TABLE pouzivatel ( pouzivatel_id UUID PRIMARY KEY, meno TEXT, email TEXT ); INSERT INTO pouzivatel (pouzivatel_id, meno, email) VALUES (uuid(), 'Jana', '[email protected]');
- Napríklad:
- Apache HBase: Beží na Hadoop HDFS a je navrhnutá na veľké objemy dát;
Grafové databázy
Dáta sú uložené vo forme uzlov (nodes) a hrán (edges), ktoré reprezentujú vzťahy medzi entitami (napríklad, pojmová mapa na vrchu tejto stránky je grafovou databázou). Používajú sa najmä pri sociálnych sieťach, analýze grafov alebo odporúčacích systémoch (napríklad: YouTube algoritmus, ktorý odporúča videá).
Charakteristiky:
- Navrhnuté na prácu s komplexnými vzťahmi.
- Každý uzol a hrana môžu mať vlastnosti (atribúty).
Napríklad:
- Neo4j: Najpopulárnejšia grafová databáza, používa jazyk Cypher pre definíciu a dopytovanie grafov;
- Napríklad:
CREATE (a:Person {name: "Jana", age: 25}) CREATE (b:Person {name: "Peter", age: 30}) CREATE (a)-[:FRIEND]->(b)
- Poznámka: Poznámkovač používa JavaScript knižnicu
vis-network
.
- Napríklad:
- Amazon Neptune: Plne spravovaná (managed) grafová databáza;
CAP Teoréma
CAP teoréma (Consistency, Availability, Partition Tolerance) vysvetľuje, že distribuovaný systém nemôže súčasne zaručiť všetky 3 vlastnosti:
- Konzistencia (Consistency):
- Každý klient vidí rovnaké dáta v rovnakom čase;
- Ak je vykonaná zmena, všetky uzly musia byť okamžite aktualizované;
- Príklad: Bankový systém, kde je kritická konzistencia zostatkov;
- Dostupnosť (Availability):
- Každý klient dostane odpoveď na svoju požiadavku, aj keď niektoré uzly zlyhajú;
- Odpovede však nemusia byť vždy aktuálne;
- Príklad: Cache systém, kde rýchla odpoveď má prednosť pred konzistenciou;
- Odolnosť voči rozdeleniu (Partition Tolerance):
- Systém musí správne fungovať aj v prípade, že dôjde k výpadku spojenia medzi časťami systému;
- Príklad: Globálne distribuovaná databáza s uzlami na viacerých kontinentoch;
CAP trojuholník
Distribuovaný systém môže poskytovať naraz iba dve z troch vlastností:
CAP Vlastnosti | Popis |
---|---|
CP (Consistency + Partition Tolerance) | Zaručuje konzistenciu, ale nemusí byť vždy dostupný. |
AP (Availability + Partition Tolerance) | Zaručuje dostupnosť, ale konzistencia môže byť slabá. |
CA (Consistency + Availability) | Nie je možné zabezpečiť, ak sa očakáva odolnosť voči rozdeleniu. |
Podpora CAP v NoSQL databázach
Databáza | CAP Model |
---|---|
Redis | CP (konzistentná a odolná voči rozdeleniu). |
MongoDB | AP (dostupná a odolná voči rozdeleniu). |
Apache Cassandra | AP (dostupná a odolná voči rozdeleniu). |
Neo4j | CP (konzistentná a odolná voči rozdeleniu). |
Zhrnutie
Typy NoSQL databáz
Typ | Charakteristika | Príklady |
---|---|---|
Kľúč-hodnota | Jednoduché páry kľúč-hodnota. | Redis, DynamoDB |
Dokumentové | Flexibilné ukladanie dokumentov. | MongoDB, Couchbase |
Stĺpcové | Dátové úložisko optimalizované na čítanie. | Cassandra, HBase |
Grafové | Ukladanie a analýza vzťahov medzi entitami. | Neo4j, Amazon Neptune |
CAP Teoréma
- Distribuovaný systém môže zaručiť naraz iba 2 vlastnosti z 3:
- Konzistencia (Consistency);
- Dostupnosť (Availability);
- Odolnosť voči rozdeleniu (Partition Tolerance);
- Výber závisí od potrieb aplikácie, napríklad: konzistencia pre bankovníctvo, dostupnosť pre sociálne siete;