Files
knowledge-base/MONGODB.md
2026-06-03 22:48:48 +02:00

5.4 KiB

🥬 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:

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

Poslední revize: 2026-06-03