====== Databázové systémy (SQL vs NoSQL) ====== **Databázový systém** je software, který umožňuje organizované ukládání, vyhledávání a správu velkého množství dat. V moderním vývoji se rozhodujeme mezi dvěma hlavními světy: tradičním relačním (SQL) a flexibilním nerelačním (NoSQL). ===== 1. SQL: Relační databáze (RDBMS) ===== Relační databáze jsou postaveny na principech definovaných Edgarem F. Coddem v 70. letech. Data jsou organizována do pevných **tabulek**, které jsou navzájem propojeny pomocí **vztahů** (relací). ==== Klíčové vlastnosti SQL: ==== * **Strukturované schéma:** Předem definovaná struktura (schema), která určuje, jaká data a v jakém formátu mohou být uložena. * **Dotazovací jazyk SQL:** Standardizovaný jazyk (Structured Query Language) pro manipulaci s daty. * **ACID integrita:** Záruka, že databázové transakce jsou bezpečné (Atomicity, Consistency, Isolation, Durability). To je klíčové pro bankovní a finanční systémy. ==== Populární systémy: ==== * **PostgreSQL:** Nejpokročilejší open-source databáze s bohatými funkcemi. * **MySQL / MariaDB:** Standard pro webové aplikace (součást balíku LAMP). * **Microsoft SQL Server / Oracle DB:** Robustní komerční řešení pro korporátní sféru. --- ===== 2. NoSQL: Nerelační databáze ===== NoSQL (Not Only SQL) systémy vznikly jako odpověď na potřeby moderního webu: obrovské objemy dat, potřeba horizontálního škálování a proměnlivá struktura dat. ==== Čtyři základní typy NoSQL: ==== 1. **Dokumentové:** Data se ukládají v dokumentech (obvykle JSON/BSON). Ideální pro CMS a katalogy. (Např. **MongoDB**, **CouchDB**) 2. **Klíč-hodnota (Key-Value):** Nejjednodušší model pro rychlé ukládání. Skvělé pro cache. (Např. **Redis**, **Memcached**) 3. **Sloupcové (Wide-column):** Optimalizované pro dotazy nad obrovskými datasety. (Např. **Cassandra**, **HBase**) 4. **Grafové:** Zaměřené na vztahy mezi objekty (sociální sítě, doporučovací systémy). (Např. **Neo4j**) ---- ===== 3. Srovnání: Kdy zvolit kterou? ===== ^ Parametr ^ SQL Databáze ^ NoSQL Databáze ^ | **Schéma** | Pevné (Rigidní) | Flexibilní (Dynamické) | | **Škálování** | Vertikální (silnější HW) | Horizontální (více levných serverů) | | **Vztahy** | Komplexní JOINy | Často redundance (denormalizace) | | **Konzistence** | Silná (ACID) | Často Eventuální konzistence (BASE) | ==== Kdy zvolit SQL? ==== * Pokud jsou data strukturovaná a vztahy mezi nimi jsou jasné. * Pokud je kritická datová integrita (finance, zdravotnictví). * Pokud potřebujete komplexní analytické dotazy. ==== Kdy zvolit NoSQL? ==== * Pokud se struktura dat často mění nebo není předem známá. * Pokud vyvíjíte aplikaci v reálném čase s miliony uživatelů. * Pokud pracujete s Big Data a potřebujete distribuované úložiště. ---- ===== 4. Moderní trend: NewSQL a Polyglot Persistence ===== Dnešní svět už není černobílý: * **NewSQL:** Moderní SQL databáze, které si zachovávají ACID, ale umí se škálovat jako NoSQL (např. **CockroachDB**, **Google Spanner**). * **Polyglot Persistence:** Strategie, kdy jedna aplikace používá více typů databází pro různé účely (např. SQL pro uživatele a Redis pro rychlou cache). ---- //Související články:// * [[it:dev:web_tech|Webové technologie a Backend]] * [[it:dev:algorithms|Algoritmy a datové struktury]] * [[it:net:cloud|Cloud computing a databáze jako služba (DBaaS)]] //Tagy: {{tag>data database sql nosql mongodb mysql postgresql acid bigdata}}//