🗄️ Databázová architektura
Klasifikace databází
Relační (SQL)
| DB |
Licence |
Use case |
Detail |
| PostgreSQL |
Open source |
Univerzální, geospatial, analytika, AI |
POSTGRESQL.md |
| MySQL / MariaDB |
Open source |
Web, LAMP stack, e-commerce |
MYSQL.md |
| Microsoft SQL Server |
Proprietary |
Enterprise .NET, Windows ekosystém |
— |
| Oracle DB |
Proprietary |
Enterprise, finance, mainframe, RAC cluster |
ORACLE.md |
| Amazon Aurora |
Managed |
MySQL/PostgreSQL kompatibilní, cloud-native |
— |
NoSQL
| Typ |
DB |
Use case |
Detail |
| Document |
MongoDB, Couchbase |
JSON data, flexibilní schema |
MONGODB.md |
| Key-Value / Cache |
Redis, Memcached, DynamoDB |
Cache, session store, real-time |
REDIS.md |
| Wide-column |
Cassandra, ScyllaDB |
Time-series, IoT, velká data |
CASSANDRA.md |
| Vector |
Pinecone, Qdrant, Milvus, pgvector |
Embeddingy, RAG, sémantické vyhledávání |
VEKTOROVE-DB.md |
| Graph |
Neo4j, Dgraph |
Vztahy, doporučení, social grafy |
— |
Storage enginy
Společné koncepty napříč databázemi: DATABAZOVE-ENGINY.md
Transaction isolation levels
| Úroveň |
Dirty Read |
Non-repeatable Read |
Phantom Read |
Serialization Anomaly |
| Read Uncommitted |
Ano (možné) |
Ano |
Ano |
Ano |
| Read Committed |
Ne (prevence) |
Ano |
Ano |
Ano |
| Repeatable Read |
Ne |
Ne |
Ne (PostgreSQL: Ne) |
Ano |
| Serializable |
Ne |
Ne |
Ne |
Ne |
Anomálie:
- Dirty Read — čtení dat z necommitnuté transakce (data mohou být rollbacknuta)
- Non-repeatable Read — stejný dotaz vrátí jiná data (jiná transakce mezitím updatovala řádek)
- Phantom Read — stejný dotaz vrátí nové řádky (jiná transakce insertla data splňující podmínku)
- Serialization Anomaly — výsledek transakcí není ekvivalentní žádnému sériovému pořadí
PostgreSQL vs MySQL rozdíly
- PostgreSQL: Read Uncommitted se chová jako Read Committed. Repeatable Read = Snapshot Isolation (zabraňuje i phantom reads). Serializable = SSI.
- MySQL InnoDB: Repeatable Read používá next-key locking (zabrání phantom reads).
CAP teorém
V distribuovaném systému lze mít pouze 2 ze 3: Consistency, Availability, Partition tolerance.
V praxi: P je vždy vyžadováno, volíme mezi CP (konzistence) a AP (dostupnost).
PACELC rozšíření
PACELC rozšiřuje CAP o chování za normálních podmínek (bez partition):
- Partition → Availability vs Consistency
- Else (bez partition) → Latency vs Consistency
| DB |
Partition volba |
Else volba |
| Cassandra |
AP (dostupnost) |
LC (nízká latence, eventual consistency) |
| DynamoDB (default) |
AP |
LC |
| MongoDB |
CP (primární) |
LC |
| PostgreSQL (single) |
CP |
CC |
| CockroachDB |
CP |
CC |
Quorum detail
- R (read quorum) + W (write quorum) > N (replication factor)
- Typické: N=3, R=2, W=2 (toleruje 1 node down)
- Sloppy quorum — při nedostupnosti nodu, data dočasně uložena na jiném nodu
- Hinted handoff — dočasný zápis na jiný node s hintem, při obnově se data přenesou
Replikace
| Typ |
Popis |
Latence |
| Synchronní |
Zápis potvrzen až po replikaci na všechny nod |
Vysoká, ale konzistentní |
| Asynchronní |
Zápis potvrzen ihned, replikace na pozadí |
Nízká, možný data loss |
| Semi-synchronní |
Potvrzení od majority nodů |
Kompromis |
Topologie
- Leader-Follower (Master-Slave) — čtení z replic
- Leader-Leader (Multi-master) — zápis na více nodů
- Quorum-based — R + W > N (Cassandra, DynamoDB)
Sharding
Distribuce dat napříč uzly podle shard klíče.
Metody
| Metoda |
Popis |
Výhoda |
Nevýhoda |
| Hash-based |
shard_id = hash(key) % N |
Rovnoměrná distribuce |
Ztráta range dotazů |
| Range-based |
Data dle rozsahu (A-M, N-Z) |
Zachovává řazení |
Hot spots |
| Consistent hashing |
Hash ring, vnodes |
Min. přeuspořádání při změně počtu shardů |
Složitější |
Routing
- Proxy-based — aplikace jde na proxy, ta routuje (Vitess, ProxySQL, mongos)
- Client-side — aplikace ví, na který shard jít
- DNS-based — každý shard má vlastní endpoint
Data consistency patterns
| Pattern |
Popis |
Příklad |
| Strong consistency |
Po zápisu každý read vidí nejnovější data |
Single DB, Raft, Spanner |
| Eventual consistency |
Po zápisu se data časem propagují |
DNS, DynamoDB (default), Cassandra |
| Read-after-write |
Autor svůj zápis vždy vidí (ostatní eventual) |
Sociální sítě, komentáře |
| Causal consistency |
Kauzálně závislé operace viděny ve správném pořadí |
COPS, Orbe, MongoDB (causal clusters) |
| Monotonic reads |
Nevidíte starší data po tom, co jste viděli novější |
Cassandra (MONOTONIC_READ consistency) |
| Monotonic writes |
Zápisy od jednoho clienta v pořadí |
Queue-based, single leader |
Migrace dat
Schema migrace
Zero-downtime migrace
- Expand — přidání nového sloupce/tabulky (aplikace toleruje oba stavy)
- Migrate — backfill dat, update aplikace na nové schema
- Contract — odstranění starého sloupce/tabulky
Nástroje
| Nástroj |
Jazyk |
Strategie |
Zero-downtime |
Rollback |
| Flyway |
Java (multi-lang CLI) |
Versioned SQL |
Omezeně (jen additive) |
undo (limited, enterprise) |
| Liquibase |
Java (multi-lang CLI) |
Changesets (XML/YAML/JSON/SQL) |
Ano (changeset design) |
rollback <count> |
| Alembic |
Python |
Auto-generation, versioned |
Ano (branching) |
downgrade |
| Prisma Migrate |
TypeScript |
Declarative schema → diff |
Ano (shadow DB) |
migrate diff |
| gh-ost |
Go |
Triggerless online DDL (MySQL) |
Ano (binlog stream) |
Ne (progresivní) |
| pgroll |
Go |
Online schema migrace (PG) |
Ano (views, multiple versions) |
Ano (okamžitý) |
SQL Antipatterns
Na základě More SQL Antipatterns (Karwin, 2026) — 14 nových antipatternů:
Language antipatterns
| Antipattern |
Problém |
Řešení |
| Fear of JOINs |
Manuální párování v aplikaci místo JOIN |
Používat JOIN správně |
| Relational Division |
Hledání množin v WHERE |
Relační dělení (subquery s GROUP BY/HAVING) |
| Pagination via OFFSET |
OFFSET je O(n) — čím větší offset, tím pomalejší |
Keyset pagination (WHERE id > last_seen) |
| Non-Sargable queries |
Funkce na sloupci v WHERE (WHERE YEAR(date) = 2026) |
Přepsat na range podmínku |
Optimization antipatterns
| Antipattern |
Problém |
Řešení |
| Premature denormalization |
Denormalizace bez důvodu |
Měřit, pak optimalizovat |
| JSON overuse |
JSON jako univerzální řešení |
Použít JSON jen pro skutečně flexibilní data |
| Cacheless transactions |
Spoléhání na query cache (v MySQL 8 odstraněna) |
Application-level caching |
Application antipatterns
| Antipattern |
Problém |
Řešení |
| Polling |
Pravidelné dotazování na změny |
LISTEN/NOTIFY, Kafka, Change Data Capture |
| Transaction encapsulation |
Každý model si spravuje vlastní transakci |
Unit of Work pattern |
| Fear of deadlocks |
Snaha o prevenci všech deadlocků |
Mitigace, ne prevence |
| Data hoarding |
Ukládání všeho navždy |
Data retention politiky, archívace |
Mini-antipatterny
LIMIT bez ORDER BY — nedeterministické výsledky
NATURAL JOIN — křehký, implicitní join condition
N+1 queries — dotaz v cyklu místo JOIN/batch
- Redundantní indexy — duplicitní/překrývající se indexy zbytečně zpomalují zápisy
Designing Data-Intensive Applications (2. vydání)
Kleppmann, Riccomini (2026) — zásadně přepracované vydání.
Novinky oproti 1. vydání
| Oblast |
Co je nové |
| Cloud-native |
Storage = object store (S3, Blob), nikoliv lokální disk. Separace control/data/compute plane |
| AI workloads |
Vektorové indexy, DataFrames jako datový model, batch processing pro training data |
| Local-first software |
DuckDB, PGlite, SQLite — databáze běžící na laptopu/edge, sync při připojení |
| Formal methods |
Randomizované testování, formální verifikace (důležité pro AI-generovaný kód) |
| Legal & ethics |
GDPR, etika prediktivní analytiky, bias, accountability algoritmů |
| Streaming → SQL views |
Materialize, incremental view maintenance — streamování jako SQL |
Klíčové principy (nemění se)
Spolehlivost (Reliability), škálovatelnost (Scalability), udržovatelnost (Maintainability) — tři pilíře dobrých datových systémů.
Apache Iceberg Lakehouse
Na základě Architecting an Apache Iceberg Lakehouse (Merced, 2026):
Co je data lakehouse
Architektura kombinující flexibilitu a nízkou cenu data lake (object storage) s výkonem a governance data warehouse. Apache Iceberg je open source table format.
Iceberg metadata architektura
Klíčové vlastnosti
| Vlastnost |
Popis |
| ACID transakce |
Bezpečné concurrent read/write |
| Schema evolution |
Přidání/odebrání/přejmenování sloupce bez rewrite |
| Time travel |
Dotazování na historické snapshoty |
| Partition evolution |
Změna partition strategie bez rewrite dat |
| Hidden partitioning |
Automatické partition filtry (uživatel nemusí uvádět) |
| Multi-engine |
Spark, Flink, Trino, Dremio, Snowflake nad stejnými daty |
Kdy použít Iceberg
- Multi-tool přístup ke stejným governed datům
- ACID na lake datech
- Streamování + batch v jedné tabulce
- Snížení duplicity (jedna canonical kopie místo ETL do warehouse)
Best practices
- Connection pooling — PgBouncer, RDS Proxy, ProxySQL
- Indexování podle query patternů — nemít zbytečné indexy
- Read replicas pro reporting a analytiku
- Backup & recovery — point-in-time recovery (PITR), pravidelné testy
- Query monitoring — slow query log, pg_stat_statements, performance_schema
- Encryption at rest & in transit
- Migrace v CI/CD — součást pipeline, ne manuálně
- Volba DB podle workloadu — neexistuje jedna univerzální DB (polyglot persistence)
Srovnání licenčních modelů databází
| DB |
Licence |
Cena (self-hosted) |
Cena (managed cloud) |
Vendor lock-in |
Poznámka |
| PostgreSQL |
PostgreSQL license (MIT-like) |
$0 |
~$0.10-1.00/hod (RDS, CloudSQL, Aurora) |
Nízký |
Plně open source, žádná omezení |
| MySQL |
GPL v2 / Commercial (Oracle) |
$0 (GPL) / ~$2 000/server/rok (commercial) |
~$0.10-1.00/hod (RDS, PlanetScale) |
Střední (Oracle vlastní) |
GPL = nutnost uvolnit aplikaci? (závisí na distribuci) |
| MariaDB |
GPL v2 / Business Source |
$0 (GPL) |
~$0.10-1.00/hod (SkySQL) |
Nízký |
Plně kompatibilní fork MySQL, žádný Oracle vliv |
| Oracle SE2 |
Proprietary (per core) |
~$17 500/core + 22 % support/rok |
~$1-5/hod (RDS, OCI) |
Vysoký |
Core factor 0.5 (EPYC/Xeon), max 16 threads |
| Oracle EE |
Proprietary (per core + options) |
~$47 500/core + options + 22 % support |
~$2-30/hod (OCI, RDS) |
Vysoký |
Options zdvojnásobují cenu (RAC, partitioning, compression) |
| SQL Server Standard |
Proprietary (per core + CAL) |
~$1 000/core + $200/CAL |
~$0.20-1.00/hod (Azure SQL) |
Střední |
Windows Server license nutná navíc |
| SQL Server Enterprise |
Proprietary (per core + CAL) |
~$7 000/core + $200/CAL |
~$1-5/hod (Azure SQL) |
Střední |
AlwaysOn, partitioning, in-memory OLTP |
| MongoDB |
SSPL (Community) / Commercial (Enterprise) |
$0 (Community) / ~$10k/server/rok (Enterprise) |
~$0.10-5.00/hod (Atlas) |
Střední |
SSPL omezuje managed cloud služby |
| Redis |
RSALv2 + SSPL (7.4+) / BSD (Valkey) |
$0 (Valkey) |
~$0.10-1.00/hod (ElastiCache, Memorystore → Valkey) |
Nízký (Valkey) |
Redis 7.4+ změna licence → fork Valkey |
| Cassandra |
Apache 2.0 |
$0 |
~$0.10-1.00/hod (Keyspaces, Amazon Managed) |
Nízký |
Plně open source, žádná omezení |
| ScyllaDB |
Apache 2.0 (OSS) / Enterprise |
$0 (OSS) / Enterprise subscription |
~$0.50-3.00/hod (ScyllaDB Cloud) |
Nízký (OSS) |
Enterprise: monitoring, security, support |
| CockroachDB |
BSL (Business Source License) / Enterprise |
$0 (core) / Enterprise subscription |
~$0.50-3.00/hod (CockroachDB Cloud) |
Střední |
BSL: po 3 letech se mění na MIT. Enterprise: multi-region, backup |
Klíčová doporučení:
- Nejnižší TCO: PostgreSQL (žádná licence, nejširší cloud podpora)
- Nejvyšší vendor lock-in: Oracle (PL/SQL, proprietary options, drahá migrace)
- License risk: Redis (změna licence) → používejte Valkey pro nové projekty
- Cloud-native licensing: MongoDB Atlas, CockroachDB Cloud, ScyllaDB Cloud — pay-per-use, žádná správa licencí
Zdroje
Odkazy, knihy a standardy: sources/databases/sources.md
Doporučená literatura
| Kniha |
Autoři |
ISBN |
Klíčový přínos |
| Database Internals |
Alex Petrov |
978-1492040346 |
Hloubkový výklad storage engine (B-Tree, LSM-Tree, WAL, MVCC), distribuované systémy |
| Designing Data-Intensive Applications (2nd ed.) |
Kleppmann, Riccomini |
— |
Cloud-native, AI, local-first, formal methods |
| High Performance MySQL (4th ed.) |
Schwartz, Zaitsev, Tkachenko |
978-1492075292 |
MySQL architektura, schema/index optimalizace |
| Expert Oracle Architecture (3rd ed.) |
Kyte, Kuhn |
978-1484249602 |
Oracle architektura, RAC, Data Guard, tuning |
| AI-Ready PostgreSQL 18 |
Kumar, Linster |
— |
PostgreSQL jako unified platform pro AI |
| More SQL Antipatterns |
Bill Karwin (2026) |
— |
14 antipatternů, keyset pagination |
| Vector Databases |
Borwankar (2026) |
— |
Embeddings, vektorové indexy, RAG |
| Architecting an Apache Iceberg Lakehouse |
Merced (2026) |
— |
Lakehouse architektura, Iceberg metadata |
Poslední revize: 2026-06-03