Delete MONGODB.md
This commit is contained in:
116
MONGODB.md
116
MONGODB.md
@@ -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*
|
|
||||||
Reference in New Issue
Block a user