From 48ca038a2740c886284e407282724a085b41d0d1 Mon Sep 17 00:00:00 2001 From: Stanislav Hubacek Date: Wed, 3 Jun 2026 22:48:48 +0200 Subject: [PATCH] Upload files to "/" --- DATABAZOVE-ENGINY.md | 101 +++++++++++++++++++++ MONGODB.md | 116 ++++++++++++++++++++++++ ORACLE.md | 207 +++++++++++++++++++++++++++++++++++++++++++ POSTGRESQL.md | 178 +++++++++++++++++++++++++++++++++++++ VEKTOROVE-DB.md | 105 ++++++++++++++++++++++ 5 files changed, 707 insertions(+) create mode 100644 DATABAZOVE-ENGINY.md create mode 100644 MONGODB.md create mode 100644 ORACLE.md create mode 100644 POSTGRESQL.md create mode 100644 VEKTOROVE-DB.md diff --git a/DATABAZOVE-ENGINY.md b/DATABAZOVE-ENGINY.md new file mode 100644 index 0000000..a53ed46 --- /dev/null +++ b/DATABAZOVE-ENGINY.md @@ -0,0 +1,101 @@ +# ⚙️ Storage enginy a transakční modely + +## B-Tree vs LSM-Tree + +Dva dominantní storage engine přístupy v moderních databázích. + +| Vlastnost | B-Tree | LSM-Tree | +|-----------|--------|----------| +| **Zápis** | In-place update (náhodný I/O na page) | Append-only (sekvenční I/O) | +| **Čtení** | Rychlé (přímo v page, O(log N)) | Pomalejší (merge z více SSTable, bloom filtry) | +| **Write amplification** | Nižší (přepis stránky) | Vyšší (kompakce, merge SSTables) | +| **Read amplification** | Nižší (1 page read) | Vyšší (více SSTable k prohledání) | +| **Komprese** | Horší (fragmentace page) | Lepší (kompaktní SSTable, bloková komprese) | +| **Range scan** | Rychlý (linked list na listové úrovni) | Rychlý (SSTable jsou seřazené) | +| **Space amplification** | Nízká | Vyšší (čeká na kompakci) | +| **Typické DB** | PostgreSQL, MySQL (InnoDB), SQLite, Oracle | Cassandra, RocksDB, LevelDB, ScyllaDB, MongoDB (WiredTiger) | + +### Kdy zvolit který engine + +**B-Tree** — když: +- Potřebujete rychlé point lookupy (PK lookup, jedinečné ID) +- Workload je read-heavy (většina dotazů = SELECT podle klíče) +- Potřebujete range dotazy na primárním klíči +- Transakční workload (OLTP) s krátkými dotazy + +**LSM-Tree** — když: +- Potřebujete vysokou propustnost zápisů (write-heavy) +- Append-only workload (logy, time-series, IoT) +- Komprese dat je důležitá (ušetří místo) +- Write amplification nevadí (dostatek I/O kapacity) + +## Write-Ahead Log (WAL) + +Append-only log garantující, že žádná operace není ztracena při crash: + +```text +1. Transaction BEGIN → záznam do WAL +2. Data modification → záznam do WAL (před modifikací page) +3. Transaction COMMIT → flush WAL na disk (COMMIT potvrzen až po flush) +4. Checkpoint → flush dirty pages → WAL do bodu checkpointu může být smazán +``` + +- **Write-ahead** — WAL zapsán dříve než data page +- **Checkpoint** — bod, odkud je WAL při recovery potřeba +- **Redo log** (InnoDB) — podobný koncept, slouží k přehrání chybějících změn +- **Group commit** — více transakcí flushne WAL najednou (vyšší propustnost) + +## MVCC (Multi-Version Concurrency Control) + +Každá transakce vidí snapshot dat v okamžiku startu. Staré verze řádků zůstávají v tabulce. + +### Implementace + +| DB | Mechanismus | Vacuum/GC | Izolační úrovně | +|----|------------|-----------|-----------------| +| **PostgreSQL** | Heap tuple (xmin/xmax) — staré verze v hlavní tabulce | VACUUM (autovacuum) | RU, RC, RR, Serializable (SSI) | +| **MySQL InnoDB** | Undo log — staré verze v undo segmentech | Purge (automatický) | RU, RC, RR, Serializable | +| **MSSQL** | Tempdb version store | Automatické (row versioning) | RC (snapshot), Serializable | +| **Oracle** | Undo tablespace | Automatické (undo retention) | RC, Serializable, Read-only | +| **MongoDB WiredTiger** | MVCC na úrovni dokumentu | Automatické (eviction) | Snapshot isolation | +| **Cassandra** | MVCC není (přepis valore) | Compaction (merge SSTable) | — | + +### Anomálie + +| Úroveň | Dirty Read | Non-repeatable Read | Phantom Read | Serialization Anomaly | +|--------|-----------|---------------------|-------------|----------------------| +| **Read Uncommitted** | Ano | Ano | Ano | Ano | +| **Read Committed** | Ne | Ano | Ano | Ano | +| **Repeatable Read** | Ne | Ne | Ne (PG: ne, MySQL: next-key locking) | Ano | +| **Serializable** | Ne | Ne | Ne | Ne | + +- **Dirty Read** — čtení dat z necommitnuté transakce +- **Non-repeatable Read** — stejný dotaz vrátí jiná data +- **Phantom Read** — stejný dotaz vrátí nové řádky +- **Serialization Anomaly** — výsledek transakcí není ekvivalentní žádnému sériovému pořadí + +## Index types + +| Typ | Algoritmus | Use case | DB podpora | +|-----|-----------|----------|------------| +| **B-tree** | Balanced tree | `=`, `<`, `>`, `BETWEEN`, `IN`, `LIKE (prefix)` | Všechny (výchozí) | +| **Hash** | Hash table | Pouze `=` (equality) | PostgreSQL (hash index), MySQL (MEMORY) | +| **GiST** | Generalized Search Tree | Geometrie, full-text, intervaly, IP rozsahy | PostgreSQL | +| **GIN** | Generalized Inverted Index | JSONB, pole, full-text (contains, overlaps) | PostgreSQL | +| **BRIN** | Block Range Index | Time-series, logy (data v pořadí) — extrémně malý | PostgreSQL | +| **SP-GiST** | Space-partitioned | Kvadranty, KD-tree, radix tree | PostgreSQL | +| **R-tree** | Prostorový strom | Geoprostorová data | MySQL (MyISAM/InnoDB), SQLite | +| **Clustered index** | B-tree + data v listech | PK lookup (InnoDB) — data uložena s indexem | MySQL InnoDB, MSSQL | +| **Full-text** | Inverted index | Text search (stemming, relevance) | MySQL, PostgreSQL, MSSQL | + +## Zdroje + +Odkazy, knihy a standardy: [sources/databases/sources.md](sources/databases/sources.md) + +### Doporučená literatura + +| Kniha | Autoři | ISBN | Popis | +|-------|--------|------|-------| +| Database Internals | Alex Petrov | 978-1492040346 | Hloubkový výklad storage engine (B-Tree, LSM-Tree, WAL, MVCC), distribuované systémy (partitioning, replication, consensus) | + +*Poslední revize: 2026-06-03* diff --git a/MONGODB.md b/MONGODB.md new file mode 100644 index 0000000..0453c8e --- /dev/null +++ b/MONGODB.md @@ -0,0 +1,116 @@ +# 🥬 MongoDB + +## Přehled + +MongoDB je nejrozšířenější document-oriented NoSQL databáze. Ukládá data jako BSON (binární JSON) dokumenty s flexibilním schematem. Vhodná pro aplikace s rychlým vývojem, kde schema často migruje nebo je různorodé. + +## Data model + +- **Database** → Collection → Document (JSON/BSON) +- **Document** — pole s klíč-hodnota, vnořené objekty, pole +- **Flexibilní schema** — každý dokument může mít jiná pole (ale nedoporučuje se) +- **ObjectID** — výchozí primární klíč (12-bajtový: timestamp + machine + PID + counter) + +## Architektura + +``` +mongod (jednotlivý node) + ├── WiredTiger storage engine (výchozí od 3.2) + │ ├── B-Tree indexy (B-Tree, ne LSM) + │ ├── MVCC (snapshot isolation) + │ ├── Compression (zlib, snappy, zstd) + │ └── Cache (WiredTiger internal cache) + ├── Replication (replica set) + │ ├── Primary (všechny zápisy) + │ └── Secondary (replikace, volitelné čtení) + └── Sharding (cluster) + ├── mongos (router) + ├── Config servers (metadata) + └── Shards (replica sets) +``` + +### Replica set + +- Primární node = všechny zápisy, sekundární = replikace (oplog) +- Automatický failover (election mezi sekundáry) +- Až 50 nodeů v replica setu, max 7 voting nodes +- Read preference: primary (default), primaryPreferred, secondary, secondaryPreferred, nearest + +### Sharding + +- Shard klíč = rozhodující pro distribuci +- **Range sharding** — blízká data na stejném shardu (good for range queries, risk of hot spots) +- **Hashed sharding** — rovnoměrná distribuce (good for write throughput, bad for range queries) +- **Zoned sharding** — data umístěna podle zón (geo-distribuce, compliance) + +## Index types + +| Typ | Popis | +|-----|-------| +| **Single field** | Standard B-Tree index | +| **Compound** | Více polí v indexu (order matters) | +| **Multikey** | Index na pole (array) — každá hodnota samostatně | +| **Text** | Full-text search | +| **Geospatial (2d, 2dsphere)** | Geo dotazy (near, within, intersect) | +| **Hashed** | Pro hashed sharding | +| **TTL** | Automatické mazání dokumentů po expiraci | +| **Wildcard** | Index na neznámá/nepravidelná pole | + +## Aggregation pipeline + +MongoDB pipeline framework pro transformace dat: + +```javascript +db.orders.aggregate([ + { $match: { status: "shipped" } }, + { $group: { _id: "$customer_id", total: { $sum: "$amount" } } }, + { $sort: { total: -1 } }, + { $limit: 10 } +]) +``` + +## Doporučení — v čem je MongoDB lepší + +| Oblast | MongoDB | Konkurence | Proč MongoDB | +|--------|---------|------------|--------------| +| **Flexibilní schema** | Schema-less, změny bez migrace | PostgreSQL (ALTER TABLE + migration) | Rychlý vývoj, MVP, časté změny modelu | +| **JSON / dokumenty** | Nativní BSON, vnořené objekty | PostgreSQL (jsonb, ale chybí $ operators) | Jednodušší mapování objektů z kódu | +| **Horizontal scaling** | Nativní sharding (mongos + config) | MySQL (Vitess externí) | Vestavěný, jednoduchý na setup | +| **Geo-distribuce** | Zoned sharding, replica set per region | Cassandra (AP model, jiná filozofie) | CP z CAP, konzistence + distribuce | +| **Agregace** | Aggregation pipeline, $lookup (LEFT JOIN) | PostgreSQL (SQL JOINy, výkonnější) | Užitečné pro denormalizovaná data | +| **Rychlost developmentu** | ORM-like (Mongoose), JSON přirozený | SQL (schema first, migrace) | Nejrychlejší time-to-market | + +### Kdy použít MongoDB + +- **Rychlý vývoj / MVP** — schema evolves frequently, žádné migrace +- **Katalogová data** — produkty s různými atributy (e-commerce, marketplace) +- **Content management** — různorodý obsah (blog, CMS, headless CMS) +- **Real-time analytics** — agregace, dashboardy, event data +- **IoT / senzorová data** — různorodé struktury zpráv +- **Mobilní aplikace** — JSON dokumenty přirozeně mapují API response + +### Kdy použít něco jiného + +- **Finanční transakce** → PostgreSQL (ACID, referenční integrita) +- **Komplexní reporty / JOINy** → PostgreSQL nebo ClickHouse +- **Vztahová data (friends, follows)** → Neo4j (grafová DB) +- **High-throughput zápisů** → Cassandra (AP model, bez master bottlenecku) +- **Malá data, jeden server** → SQLite (jednodušší, žádný daemon) + +## MongoDB licensing + +MongoDB změnila licenci v roce 2018 z GNU AGPL v3 na **SSPL** (Server Side Public License): + +| Varianta | Licence | Cena | Podmínky | +|----------|---------|------|----------| +| **MongoDB Community** | SSPL | Zdarma | SSPL: pokud nabízíte MongoDB jako managed službu, musíte uvolnit celý stack (vč. orchestrace, monitoringu) jako open source. Interní použití bez omezení | +| **MongoDB Enterprise Advanced** | Komerční | ~$10 000/server/rok (Atlas: pay-per-use) | Enterprise funkce (LDAP, Kerberos, auditing, encryption), support 24/7 | +| **MongoDB Atlas** | Managed | Pay-per-use (~$0.10-5.00/hod dle instance) | Plně managed, multi-cloud, auto-scaling, backup, monitoring | + +**Dopad**: SSPL je podobný model jako u Redis — pro self-hosted interní použití bez omezení, cloud poskytovatelé (AWS, Azure) nesmí nabízet MongoDB jako managed službu bez komerční dohody. Alternativa: **FerretDB** (open source proxy kompatibilní s MongoDB wire protokolem). + +## Zdroje + +Odkazy, knihy a standardy: [sources/databases/sources.md](sources/databases/sources.md) + +*Poslední revize: 2026-06-03* diff --git a/ORACLE.md b/ORACLE.md new file mode 100644 index 0000000..59ff5fa --- /dev/null +++ b/ORACLE.md @@ -0,0 +1,207 @@ +# 🏛️ Oracle Database + +## Přehled + +Oracle Database je proprietární relační databáze s nejširší škálou enterprise funkcí — RAC clustering, Active Data Guard, partitioning, advanced compression, in-memory options a Oracle Exadata integrace. Dominantní v korporátním světě, financích, telekomunikacích a mainframe ekosystému. + +## Architektura + +### Oracle instance + database + +``` +Oracle Instance (memory + processes) + ├── System Global Area (SGA) + │ ├── Database Buffer Cache + │ ├── Shared Pool (library cache, dictionary cache) + │ ├── Redo Log Buffer + │ ├── Java Pool + │ ├── Large Pool (backup, parallel) + │ └── In-Memory Column Store (option) + ├── Program Global Area (PGA) — per session + └── Background processes + ├── PMON (process monitor) + ├── SMON (system monitor) + ├── DBWn (database writer) + ├── LGWR (log writer) + ├── CKPT (checkpoint) + ├── ARCn (archiver) + └── MMON (manageability monitor) +``` + +### Multitenant architektura (12c+) + +``` +Container Database (CDB) + ├── Root (CDB$ROOT) — metadata, system objects + ├── Seed (PDB$SEED) — template pro nové PDB + ├── Pluggable Database 1 (PDB1) — aplikace A + ├── Pluggable Database 2 (PDB2) — aplikace B + └── Pluggable Database 3 (PDB3) — aplikace C +``` + +Každé PDB vypadá jako samostatná databáze, ale sdílí SGA a background procesy. Výhoda: vyšší densita, jednodušší patchování (CDB úroveň), resource management per PDB. + +### Oracle RAC (Real Application Clusters) + +Multi-instance architektura — více serverů přistupuje ke stejné storage: + +```text +Node 1 ─── Oracle ASM ─── Shared Storage (SAN/NFS) +Node 2 ─── Oracle ASM ─── Shared Storage (SAN/NFS) +Node 3 ─── Oracle ASM ─── Shared Storage (SAN/NFS) + │ + Cache Fusion (private interconnect) +``` + +- Až 64 nodů v clusteru +- **Cache Fusion** — transfer dirty blocks mezi instancemi přes private interconnect (RAC-specific) +- **ASM** (Automatic Storage Management) — clustered filesystem + volume manager +- **Service** — workload routing (primární, report, batch) + +### Oracle Data Guard + +| Režim | Ochrana | Latence | Use case | +|-------|---------|---------|----------| +| **Maximum Protection** | Zero data loss (sync) | Nejvyšší | Kritické systémy | +| **Maximum Availability** | Zero data loss (sync, fallback na async) | Vysoká | Enterprise standard | +| **Maximum Performance** | Async | Nejnižší | DR na dálku | + +- **Active Data Guard** — standby pro čtení (reporting, backup) — vyžaduje licenci +- **Far Sync** — synchronní zápis na vzdálený standby přes async (kompromis) + +### Oracle Exadata + +Hardware+software platforma pro Oracle DB: + +| Komponenta | Popis | +|-----------|-------| +| **Database Servers** | x86 (Xeon), 2-8× per rack, NVMe, 1.5-6 TB RAM | +| **Storage Servers** | Celková kapacita až 2.7 PB raw per rack | +| **Smart Scan** | Predikátová filtrace na storage vrstvě (místo v DB serveru) | +| **Smart Flash Cache** | Násobné vrstvy caching (RAM, Flash, disk) | +| **RDMA over Converged Ethernet** | Nízká latence mezi DB a storage servery | + +Vhodné pro: největší OLTP, data warehousing, consolidation. + +## Klíčové enterprise funkce + +| Funkce | Popis | Konkurence | +|--------|-------|------------| +| **RAC** | Shared-everything cluster až 64 uzlů | MSSQL AlwaysOn FCI (2 uzly) | +| **Active Data Guard** | Standby pro čtení, far sync, automatic failover | MSSQL AlwaysOn AG, PostgreSQL streaming | +| **Partitioning** | Range, List, Hash, Composite, interval, reference | PostgreSQL (declarative partitioning 10+) | +| **Advanced Compression** | Columnar, HCC (Exadata), OLTP compression | InnoDB page compression, PG TOAST | +| **In-Memory** | Column store v SGA pro real-time analytics | PG (no native), MSSQL (columnstore index) | +| **Advanced Security** | TDE, data redaction, VPD, audit vault, database firewall | PG (pgcrypto, pgaudit), MSSQL (TDE, Always Encrypted) | +| **Flashback** | Dotazování na historická data (Flashback Query, Table, Database) | PG (temporal tables via extension), MSSQL (system-versioned) | +| **Sharding** | System-managed, composite, user-defined | MongoDB (native), Vitess (MySQL), Citus (PG) | +| **ASM** | Clustered filesystem + volume manager | VMware VMFS, Windows CSV | + +## Oracle licensing detail + +### Edice + +| Edice | Metrika | Cena (orientační) | Limitace | +|-------|---------|-------------------|----------| +| **Oracle Database Standard Edition 2 (SE2)** | Per core (core factor 0.5) | ~$17 500/core | Max 16 CPU threads (na server), max 2 sockets, žádný RAC (pouze Oracle RAC One), žádné partitioning, in-memory, compression | +| **Oracle Database Enterprise Edition (EE)** | Per core (core factor 0.5) | ~$47 500/core | Bez omezení, všechny funkce (RAC, partitioning, in-memory, compression, Advanced Security) — ale vše jako **volitelné licence** | +| **Oracle Database Enterprise Edition (RAC)** | Per core (EE + RAC option) | ~$47 500 + $23 000/core | EE + RAC clustering | + +### Volitelné licence (options) — EE only + +| Option | Cena (orientační / core) | Use case | +|--------|--------------------------|----------| +| **Real Application Clusters (RAC)** | ~$23 000 | Multi-instance cluster | +| **Active Data Guard** | ~$10 000 | Standby pro čtení, far sync, automatic failover | +| **Partitioning** | ~$11 500 | Range, list, hash, interval, reference, system | +| **Advanced Compression** | ~$11 500 | OLTP compression, HCC (Exadata), JSON compression | +| **Advanced Security** | ~$15 000 | TDE, data redaction, database firewall | +| **In-Memory Database** | ~$23 000 | Column store v SGA pro real-time analytics | +| **Database Vault** | ~$5 750 | Separation of duties, multi-tenancy security | +| **Multitenant (EE)** | Zdarma (od 21c) | CDB/PDB — max 3 PDB na CDB v EE bez license. Neomezeno s Multitenant option (~$17 500) | +| **Spatial / Graph** | ~$5 750 | Geoprostorová data, property graph | +| **Label Security** | ~$5 750 | Row-level security s klasifikacemi | + +### Oracle Cloud (OCI) licensing + +| Služba | Model | Cena | Poznámka | +|--------|-------|------|----------| +| **OCI Base Database (RDS-like)** | BYOL nebo License Included | ~$1-5/hod (BYOL levnější) | Single instance nebo RAC, automatické backup, patching | +| **OCI Exadata Database Service** | BYOL nebo License Included | ~$5-30/hod (dle shape) | Exadata X9M/X10M v OCI, elastic, full Exadata features | +| **OCI Autonomous Database** | Per CPU (ECPU) | ~$0.50-3.00/ECPU/hod | Auto-tuning, auto-scaling, auto-patching | +| **BYOL (Bring Your Own License)** | Vlastní Oracle license v OCI | Jen infrastruktura | Lze použít stávající perpetual license, včetně supportu | + +### RAC sizing — licence cost + +```text +4-node RAC, každý node 2× EPYC 9654 (96C) = 192 cores per node + Core factor 0.5 → 96 Oracle licenses per node + 4 × 96 = 384 Oracle EE licenses + +EE: 384 × $47 500 = $18 240 000 +RAC option: 384 × $23 000 = $8 832 000 +Support 22 % ročně: ($18 240 000 + $8 832 000) × 0.22 = $5 955 840/rok + +Tip: Pro RAC zvažte menší CPU (např. 64C místo 96C) — license cost často převyšuje hardware cost. +``` + +### Oracle vs PostgreSQL — srovnání + +| Oblast | Oracle | PostgreSQL | +|--------|--------|------------| +| **Licence** | Proprietary (per core, ~$17.5k-47.5k/core + 22 % support ročně) | Open source (PostgreSQL license, MIT-like) | +| **RAC clustering** | Nativní, shared-everything | Žádné (Citus = shared-nothing) | +| **Multitenant** | CDB/PDB architektura | Žádné (schemas per tenant) | +| **Parallel execution** | Vyspělý (auto DOP, parallel index scan) | Dobrý (parallel seq/index scan, join) | +| **Storage management** | ASM (integrovaný) | OS volume / LVM | +| **Materialized views** | S refresh on commit, query rewrite | Není query rewrite | +| **Partitioning** | 40+ možností (interval, referential, system) | Declarative (range, list, hash od 10+) | +| **In-memory** | Columnar in SGA | Není nativní | +| **Standby použitek** | Active Data Guard (read-only, licence) | Hot standby (read-only, zdarma) | +| **Cloud** | OCI (Oracle Cloud), AWS RDS, Azure | Všechny cloudy (native) | + +## Doporučení — v čem je Oracle lepší + +| Oblast | Oracle | Konkurence | Proč Oracle | +|--------|--------|------------|-------------| +| **Licence cost (4-node RAC, 384 cores)** | ~$50M (1. rok vč. supportu) | PostgreSQL: $0 | Oracle: 22 % support ročně z license fee | +| **Vendor lock-in** | Vysoký (GoldenGate migrace náročná, PL/SQL specific) | PostgreSQL: žádný | MySQL i PG mají nástroje pro migraci z Oracle (ora2pg, AWS DMS) | +| **Enterprise OLTP** | RAC + ASM, zero-downtime patching | MSSQL (FCI limit 2 nodes) | Shared-everything cluster, transparent failover | +| **Finance / Banking** | Audit Vault, Database Vault, TDE, VPD | PG (pgaudit, row-level security) | Compliance certifikace (SOX, PCI, GDPR) | +| **Consolidace** | Multitenant (CDB/PDB) — stovky DB na 1 instanci | PG (citizen schemas) | Nižší overhead, jednodušší management | +| **Data Warehouse** | Exadata Smart Scan, parallel execution, in-memory | ClickHouse (specializovaná) | Hybrid workload (OLTP + DW v jedné DB) | +| **High-end hardware** | Exadata engineered system | PG (běží na čemkoliv) | Full-stack optimalizace HW+SW | +| **Partitioning** | Rozsah možností (reference, interval, system) | PG (basic) | 10+ let náskok v implementaci | +| **Flashback / recovery** | Flashback Database, Table, Query — libovolný čas | PG (PITR, point-in-time) | Rychlejší, granularnější recovery | +| **Ekosystém** | OEM, Data Pump, SQL Developer, Toad, GoldenGate | PG (pgAdmin, pg_dump, Patroni) | Desítky let enterprise toolingu | + +### Kdy použít Oracle + +- **Kritické OLTP systémy** — banking, payment processing, trading +- **Enterprise konsolidace** — stovky DB na jednom RAC clusteru (multitenant) +- **Regulované prostředí** — finance, healthcare, government (audit, security, compliance) +- **Oracle ekosystém** — E-Business Suite, PeopleSoft, Siebel, JD Edwards +- **Exadata zákazníci** — maximální výkon pro hybrid workload (OLTP + DW) +- **GoldenGate replikace** — heterogenní replikace (Oracle → Kafka, Oracle → PostgreSQL) +- **Cloud migration** — OCI, AWS RDS for Oracle, Azure Oracle Database Service + +### Kdy použít něco jiného + +- **Startup / SME** → PostgreSQL (zdarma, dostatečný výkon, žádný vendor lock-in) +- **Web / LAMP stack** → MySQL (jednodušší, levnější, široká podpora) +- **Cloud-native** → Aurora, CockroachDB (architektura pro cloud, ne port on-prem do cloudu) +- **Potřebujete jen SQL** → PostgreSQL (Oracle overhead se nevyplatí) +- **Horizontální škálování zápisů** → Cassandra (RAC škáluje čtení, zápisy jdou přes jeden nod) + +## Zdroje + +Odkazy, knihy a standardy: [sources/databases/sources.md](sources/databases/sources.md) + +### Doporučená literatura + +| Kniha | Autoři | ISBN | Popis | +|-------|--------|------|-------| +| Oracle Database 23ai New Features | Oracle Corporation | — | Oficiální průvodce novinkami — AI Vector Search, JSON Relational Duality, property graphs, schema privileges | +| Expert Oracle Architecture (3rd ed.) | Thomas Kyte, Darl Kuhn | 978-1484249602 | Komplexní výklad Oracle architektury — od storage po RAC a Data Guard | + +*Poslední revize: 2026-06-03* diff --git a/POSTGRESQL.md b/POSTGRESQL.md new file mode 100644 index 0000000..c7644a0 --- /dev/null +++ b/POSTGRESQL.md @@ -0,0 +1,178 @@ +# 🐘 PostgreSQL + +## Přehled + +PostgreSQL je nejpokročilejší open-source relační databáze s důrazem na rozšiřitelnost, standardy SQL a spolehlivost. Vývoj od 1996, silná komunita, aktivní release cyklus (major verze každý rok). + +## Architektura + +### Procesový model + +```text +Postmaster (supervisor) + ├── Backend process (1 per connection) + ├── WAL writer + ├── Checkpointer + ├── Autovacuum launcher + ├── Stats collector + ├── Logical replication launcher + └── Archiver (WAL archiving) +``` + +Každé spojení = vlastní OS proces (ne vlákno). Výhoda: izolace, stabilita. Nevýhoda: vyšší memory footprint u tisíců spojení → nutný connection pooler (PgBouncer). + +### MVCC (Multi-Version Concurrency Control) + +Každá transakce vidí snapshot dat z okamžiku startu. Staré verze řádků (tuple) zůstávají v tabulce: + +- INSERT vytvoří nový tuple s `xmin = current_xid` +- DELETE označí tuple `xmax = current_xid` (nezmizí hned) +- UPDATE = DELETE old + INSERT new +- VACUUM fyzicky maže tuple starší než nejstarší aktivní snapshot + +### VACUUM a autovacuum + +| Parametr | Popis | Výchozí | +|----------|-------|---------| +| `autovacuum_vacuum_threshold` | Min. mrtvých řádků pro spuštění | 50 | +| `autovacuum_vacuum_scale_factor` | % z tabulky jako threshold | 0.2 (20 %) | +| `autovacuum_analyze_threshold` | Min. změněných řádků pro ANALYZE | 50 | +| `autovacuum_vacuum_cost_limit` | Limituje I/O vacuum (prevence zátěže) | 200 | +| `autovacuum_naptime` | Interval mezi kontrolami | 1 min | +| `deadlock_timeout` | Detekce deadlocků | 1 s | + +**Příznaky nedostatečného vacuum**: růst tabulky (bloat), zhoršení výkonu index scanů, XID wraparound hazard. + +### WAL (Write-Ahead Log) + +Append-only log všech změn pro crash recovery a replikaci: + +```conf +wal_level = replica # nebo logical +archive_mode = on +archive_command = 'aws s3 cp %p s3://backups/pg-wal/%f' +``` + +**PITR (Point-In-Time Recovery)**: +1. Restore base backup (pg_basebackup) +2. Replay WAL archivů až k cílovému času +3. `recovery_target_time = '2026-06-03 10:30:00 UTC'` + +### Replication slots + +- **Physical** — zaručuje, že WAL není smazán masterem, dokud ho replica nespotřebuje +- **Logical** — pro logickou replikaci (selektivní tabulky, transformace dat) +- **Riziko**: pokud replica spadne, WAL naroste na disku (disk full) +- Monitoring: `pg_replication_slots`, `pg_stat_replication` + +### Konfigurace + +Hlavní soubory (dle Obe & Hsu): +- `postgresql.conf` — paměť, síť, logování, storage +- `pg_hba.conf` — přístupová práva +- `pg_ident.conf` — mapování OS uživatelů na PostgreSQL role + +### AI-Ready PostgreSQL 18 + +(Kumar, Linster, 2026) — PostgreSQL 18 jako unified platform pro transakce, analytiku a AI: + +| Oblast | Technika | +|--------|----------| +| Vektory | pgvector — embeddingy přímo v řádcích tabulky | +| Hybridní pattern | Semantic recall → SQL filtrování | +| LLM integrace | PostgreSQL + MCP (Model Context Protocol) | +| Embedding pipeline | Batch i stream generování embeddingů | + +**Hybridní dotaz**: +```sql +SELECT p.*, pm.name +FROM products p +JOIN product_embeddings pe ON p.id = pe.product_id +WHERE pe.embedding <-> '[0.1, 0.3, ...]' < 0.8 + AND p.in_stock = true + AND p.price < 100.00 +ORDER BY pe.embedding <-> '[0.1, 0.3, ...]' +LIMIT 10; +``` + +### Rozšíření (extensions) + +| Extension | Účel | +|-----------|-------| +| pgvector | Vektorové vyhledávání pro AI/embeddings | +| PostGIS | Geografická data, prostorové dotazy | +| pg_stat_statements | Monitoring výkonu dotazů | +| pg_duckdb | Analytické dotazy (DuckDB engine uvnitř PG) | +| pg_search | Full-text a hybridní vyhledávání | +| pg_cron | Scheduling úloh v DB | +| citus | Horizontální škálování (sharding) | +| timescaledb | Time-series optimalizace | +| pgaudit | Auditní logování | + +## Connection pooling + +| Pooler | Typ | Protokol | +|--------|-----|----------| +| PgBouncer | Proxy (transaction/session) | PostgreSQL wire | +| Odyssey | Proxy (multithreaded) | PostgreSQL wire | +| pgpool-II | Proxy (replication, load balancing) | PostgreSQL wire | +| RDS Proxy | Managed proxy (AWS) | PostgreSQL wire | + +**PgBouncer režimy**: +- **Session pooling** — spojení drženo po celou dobu session (aplikace) → overhead +- **Transaction pooling** — spojení vráceno po dokončení transakce → efektivnější (vyžaduje bezstavovost) + +## Doporučení — v čem je PostgreSQL lepší + +| Oblast | PostgreSQL | Konkurence | Proč PG | +|--------|-----------|------------|---------| +| **Rozšiřitelnost** | Extensions, custom types, operators, index methods | MySQL omezené | Lze přidat cokoliv od vektorů po full-text v DB | +| **SQL standard** | Nejbližší ANSI SQL | MySQL odbočky (GROUP BY, ALTER TABLE) | Přenositelnost, méně překvapení | +| **Geoprostorová data** | PostGIS (zlatý standard GIS) | MySQL GIS (omezený) | Jediná reálná open-source volba pro GIS | +| **Konzistence** | SSI serializable, foreign keys, CHECK, exclusions | MySQL MyISAM bez FK, InnoDB jen RC | Vhodné pro finanční a kritické systémy | +| **Concurrent读写** | MVCC bez reader/writer blokování | MySQL InnoDB reader blokuje writer (a naopak) u starších verzí | Lepší škálovatelnost čtení | +| **AI/vektory** | pgvector nativně v DB | Samostatná vektorová DB (zvýšení latence) | Hybridní dotazy v jediném SQL | +| **Licence** | PostgreSQL license (MIT-like) | MySQL dvojí licence (Oracle) | Žádná vendor lock-in | + +### Kdy použít PostgreSQL + +- **Enterprise aplikace** — vyžadují ACID, referenční integritu, komplexní transakce +- **Geografické systémy** — GIS, mapové aplikace, lokalitní služby +- **Finanční systémy** — účetnictví, banking, compliance (audit logging, SSI) +- **AI / RAG aplikace** — hybridní vektorové + relační dotazy v jedné DB +- **Analytika na relačních datech** — pg_duckdb, materializované views, window functions +- **Multi-tenant aplikace** — row-level security, schemas per tenant + +## PostgreSQL licensing + +| Varianta | Licence | Cena | Omezení | +|----------|---------|------|---------| +| **PostgreSQL** | PostgreSQL license (MIT-like) | $0 | Žádná — lze používat, modifikovat, distribuovat v komerčních produktech. Není potřeba žádný "commercial license" | +| **Amazon Aurora PostgreSQL** | Proprietary (AWS) | ~$0.10-1.00/hod | AWS managed, PostgreSQL compatible. AWS smí používat PG kód díky PostgreSQL license | +| **YugabyteDB** | Apache 2.0 | $0 (core) | PostgreSQL kompatibilní distributed SQL, postaveno na PG query layer | +| **TimescaleDB** | Apache 2.0 (community) / Timescale License (enterprise) | $0 (community) | Časově řadová rozšíření PostgreSQL. Enterprise: tiered storage, compression, multi-node | + +**Klíčové**: PostgreSQL license je jedna z nejliberálnějších — umožňuje cloud providerům (AWS, GCP, Azure) nabízet PostgreSQL jako managed službu bez omezení. To je rozdíl oproti MongoDB (SSPL) a Redis (RSALv2). Díky tomu má PostgreSQL nejširší cloud podporu ze všech databází. + +**Dopad na výběr**: Žádný license risk, žádný vendor lock-in, žádné skryté náklady. PostgreSQL je bezpečná volba pro jakýkoliv projekt. + +### Kdy použít něco jiného + +- **Jednoduchý web / blog** → SQLite (v embedded scénáři lehčí) +- **High-throughput key-value** → Redis (o řád nižší latence) +- **Time-series v masivním měřítku** → TimescaleDB, InfluxDB +- **Globálně distribuovaná data** → CockroachDB, Spanner +- **Full-text search primárně** → Elasticsearch + +## Zdroje + +Odkazy, knihy a standardy: [sources/databases/sources.md](sources/databases/sources.md) + +### Doporučená literatura + +| Kniha | Autoři | ISBN | Popis | +|-------|--------|------|-------| +| PostgreSQL: Up and Running (3rd ed.) | Regina Obe, Leo Hsu | 978-1491962935 | Praktický průvodce administrací, konfigurací a extensions | +| AI-Ready PostgreSQL 18 | Kumar, Linster | — | PostgreSQL jako unified platform pro AI workloads | + +*Poslední revize: 2026-06-03* diff --git a/VEKTOROVE-DB.md b/VEKTOROVE-DB.md new file mode 100644 index 0000000..28b152d --- /dev/null +++ b/VEKTOROVE-DB.md @@ -0,0 +1,105 @@ +# 🧠 Vektorové databáze + +## Přehled + +Specializované databáze pro ukládání a vyhledávání **embeddingů** — vektorových reprezentací nestrukturovaných dat (text, obrázky, audio, video). Umožňují **sémantické vyhledávání** na základě podobnosti, nikoliv přesné shody. Klíčový stavební kámen pro RAG (Retrieval-Augmented Generation) a AI aplikace. + +## Embeddings + +- Mapují nestrukturovaná data do vektorového prostoru (seznam čísel) +- Blízkost ve vektorovém prostoru = sémantická podobnost +- Generovány modely: Word2Vec, BERT, OpenAI embeddings, E5, Cohere, Mistral +- Dimenze: 384 (all-MiniLM) až 3072 (OpenAI text-embedding-3-large) + +## Indexování vektorů + +| Metoda | Algoritmus | Popis | Přesnost | Rychlost | +|--------|-----------|-------|----------|----------| +| **Flat (brute-force)** | Úplné prohledání | Porovnání se všemi vektory | 100 % | O(N) — pomalé pro > 100K | +| **IVF** (Inverted File) | K-means clustering | Rozdělení do shluků, hledá se v nejbližším shluku | ~95-99 % | O(sqrt(N)) | +| **HNSW** (Hierarchical Navigable Small World) | Navigovatelný graf | Víceúrovňový graf, greedy search | ~99-100 % | O(log N) | +| **IVF-PQ** | IVF + Product Quantization | Komprese vektorů, menší paměť | ~90-95 % | O(sqrt(N)) | +| **DiskANN** | SSD-based graf | Vektory na disku, Vamana graf | ~95-98 % | O(log N) + I/O | + +### Volba indexu + +| Počet vektorů | Požadavek | Doporučený index | +|--------------|-----------|-----------------| +| < 100K | 100% přesnost | Flat | +| 100K - 10M | Vysoká přesnost, rychlost | HNSW | +| 10M+ | Paměťová efektivita | IVF-PQ, DiskANN | +| 100M+ | Škálování na SSD | DiskANN | + +## Use case: RAG (Retrieval-Augmented Generation) + +```text +User query → Embedding model → Vector DB search → Relevant chunks → LLM → Answer +``` + +Varianty: +- **Naive RAG** — jeden retrieval + jeden generování +- **Advanced RAG** — pre-retrieval (query rewriting, HyDE) + post-retrieval (reranking, filtering) +- **Multi-modal RAG** — text + obrázky + audio do jednoho pipeline + +## Nástroje — srovnání + +| Nástroj | Typ | Indexy | Cloud | Self-hosted | Poznámka | +|---------|-----|--------|-------|-------------|----------| +| **Pinecone** | Managed | HNSW, IVF-PQ | Ano | Ne | Plně spravovaná, žádný ops. Cena dle dimenze a počtu vektorů | +| **Weaviate** | Open source | HNSW, Flat | Ano (WCD) | Ano | Grafová + vektorová, hybridní dotazy, modulární (generative search) | +| **Qdrant** | Open source | HNSW, IVF-PQ, quantization | Ano (Cloud) | Ano | Rust, batch API, filtr souběžně s vektorovým search | +| **Milvus** | Open source | IVF, HNSW, IVF-PQ, DiskANN | Ano (Zilliz) | Ano | GPU akcelerace. Komplexnější ops (K8s required) | +| **pgvector** | PostgreSQL extension | IVFFlat, HNSW | Vše (díky RDS) | Ano | Embeddingy přímo v PostgreSQL. Hybridní SQL + vektory | +| **Chroma** | Open source | HNSW | Ne | Ano | Jednoduchý na embedding + retrieval, Python-native | +| **LanceDB** | Open source | IVF-PQ | Ne | Ano | Multimodální data, Arrow formát, žádný server (embedded) | +| **Elasticsearch** | Search engine | HNSW (8.0+) | Ano (Cloud) | Ano | Pokud už máte ES, lze použít i pro vektory | + +### pgvector vs samostatná vektorová DB + +| Vlastnost | pgvector | Samostatná (Pinecone, Qdrant, Milvus) | +|-----------|----------|---------------------------------------| +| **Architektura** | Extension v PostgreSQL | Samostatná služba | +| **Hybridní dotazy** | Nativní SQL + vektory | Nutná koordinace dvou systémů | +| **Latence** | Vyšší (disk-based PG) | Nižší (in-memory indexy) | +| **Škálování** | PG replikace / Citus | Nativní sharding, rebalancing | +| **Konzistence** | PG ACID transakce | Eventual consistency | +| **Provoz** | Jeden systém | Dva systémy (operational overhead) | + +## Doporučení — Volba nástroje + +| Scénář | Doporučení | Zdůvodnění | +|--------|-----------|-------------| +| **RAG na PostgreSQL datech** | pgvector | Hybridní SQL + vektory v jedné DB | +| **RAG produkce, žádný ops** | Pinecone | Plně managed, škálovatelné, žádný provoz | +| **Self-hosted RAG** | Qdrant (jednodušší) / Milvus (výkon) | Open source, kontrola nad daty | +| **Full-text + vektory** | Elasticsearch / Weaviate | Kombinace BM25 + vektorového skóre | +| **Výzkum / prototypování** | Chroma | Python-native, rychlý start | +| **Embedded / edge** | LanceDB | Žádný server, Arrow formát | +| **Multi-modal data** | Weaviate / LanceDB | Nativní podpora obrázků, audio, videa | +| **GPU akcelerace** | Milvus | CUDA podpora pro index build | + +## Kdy vektorovou DB (ne)použít + +**Použít** když: +- Potřebujete sémantické vyhledávání (podobnost podle významu, ne klíčových slov) +- Stavíte RAG / AI asistenta nad vlastními daty +- Deduplikace dokumentů, obrázků (near-duplicate detection) +- Doporučovací systémy (podobný obsah, podobní uživatelé) + +**Nepoužít** když: +- Potřebujete přesnou shodu (klíče, ID, foreign keys) → SQL +- Full-text search stačí (BM25, stemming) → Elasticsearch, PostgreSQL full-text +- Vektory jen jako doplněk k primární DB → pgvector (jednoduchost) +- Méně než 1000 dokumentů → postačí brute-force v aplikaci + +## Zdroje + +Odkazy, knihy a standardy: [sources/databases/sources.md](sources/databases/sources.md) + +### Doporučená literatura + +| Kniha | Autoři | Popis | +|-------|--------|-------| +| Vector Databases | Borwankar (2026) | Komplexní průvodce vektorovými DB od konceptů po produkční nasazení | + +*Poslední revize: 2026-06-03*