diff --git a/MONGODB.md b/MONGODB.md deleted file mode 100644 index 0453c8e..0000000 --- a/MONGODB.md +++ /dev/null @@ -1,116 +0,0 @@ -# 🥬 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*