Delete MYSQL.md
This commit is contained in:
142
MYSQL.md
142
MYSQL.md
@@ -1,142 +0,0 @@
|
||||
# 🐬 MySQL & MariaDB
|
||||
|
||||
## Přehled
|
||||
|
||||
MySQL je nejrozšířenější open-source relační databáze, zejména ve webovém prostředí (LAMP stack). MariaDB je fork po akvizici Oracle, plně kompatibilní s rozšířeními. Výchozí volba pro WordPress, Drupal, Magento a většinu PHP aplikací.
|
||||
|
||||
## Architektura (server + storage engine)
|
||||
|
||||
Na základě *High Performance MySQL* (Schwartz, Zaitsev, Tkachenko):
|
||||
|
||||
```text
|
||||
MySQL Server Layer
|
||||
├── Connection handling (thread-per-connection)
|
||||
├── Query parser & optimizer
|
||||
├── Built-in functions
|
||||
└── Storage Engine API
|
||||
├── InnoDB (výchozí, MVCC, ACID)
|
||||
├── MyISAM (legacy, table-level locks)
|
||||
├── MEMORY (in-memory, HEAP)
|
||||
└── ... (ostatní)
|
||||
```
|
||||
|
||||
### InnoDB (výchozí engine od MySQL 5.5+)
|
||||
|
||||
- **MVCC** — Multi-Version Concurrency Control (snapshot isolation)
|
||||
- **REPEATABLE READ** (výchozí) — next-key locking zabraňuje phantom reads
|
||||
- **Clustered index** — primární klíč = fyzické uspořádání dat
|
||||
- **Buffer pool** — cache dat a indexů v RAM (hlavní parametr výkonu)
|
||||
- **Doublewrite buffer** — prevence částečného zápisu stránky
|
||||
|
||||
### Schema design tipy
|
||||
|
||||
- Preferovat menší datové typy (MEDIUMINT místo INT, TIMESTAMP místo DATETIME)
|
||||
- NULL používat opatrně (každý NULL sloupec zvyšuje složitost indexu)
|
||||
- ENUM používat jen pro opravdu malé, stabilní seznamy hodnot
|
||||
- JSON sloupce v MySQL 8+ — užitečné pro flexibilní schema, ale ne pro joinování
|
||||
|
||||
### Deferred join pattern
|
||||
|
||||
```sql
|
||||
-- 1. covering index najde PK
|
||||
-- 2. teprve pak join na plný řádek
|
||||
SELECT * FROM users
|
||||
INNER JOIN (
|
||||
SELECT id FROM users
|
||||
WHERE status = 'active'
|
||||
ORDER BY created_at DESC
|
||||
LIMIT 100 OFFSET 1000
|
||||
) AS tmp USING (id);
|
||||
```
|
||||
|
||||
**Join decomposition**: Někdy výhodnější rozdělit JOIN na několik jednoduchých dotazů (lepší využití cache, méně locků, škálování napříč servery).
|
||||
|
||||
**IN() optimalizace**: MySQL řadí hodnoty v IN() seznamu a používá binární vyhledávání (O(log n)), na rozdíl od OR klauzulí (O(n)).
|
||||
|
||||
## MariaDB rozdíly oproti MySQL
|
||||
|
||||
| Vlastnost | MySQL 8.x | MariaDB 11.x |
|
||||
|-----------|-----------|--------------|
|
||||
| **Storage engine** | InnoDB (pouze) | InnoDB + XtraDB (fork) + Aria + MyRocks |
|
||||
| **JSON** | Native JSON typ | JSON alias na LONGTEXT + JSON funkce |
|
||||
| **CTE** | WITH (non-recursive + recursive) | WITH (non-recursive + recursive) |
|
||||
| **Window functions** | Ano (8.0+) | Ano (10.2+) |
|
||||
| **Sequence** | Ne (auto_increment only) | Ano (CREATE SEQUENCE) |
|
||||
| **Thread pooling** | Enterprise only | Vestavěný |
|
||||
| **Galera cluster** | Ne (nativně) | Ano (nativní synchronní clustering) |
|
||||
|
||||
## ProxySQL
|
||||
|
||||
ProxySQL je advanced proxy pro MySQL s pokročilým routingem:
|
||||
|
||||
| Vlastnost | Popis |
|
||||
|-----------|-------|
|
||||
| **Query routing** | Pravidla pro směrování dotazů (read/write split, sharding) |
|
||||
| **Connection pooling** | Multiplexování tisíců spojení do malého poolu |
|
||||
| **Query cache** | Cache výsledků v paměti (TTL, size limit) |
|
||||
| **Query rewriting** | Rewrite SQL dotazů na cestě |
|
||||
| **Aktivní monitoring** | Detekce výpadků backendů, automatic failover |
|
||||
|
||||
## Doporučení — v čem je MySQL lepší
|
||||
|
||||
| Oblast | MySQL | Konkurence | Proč MySQL |
|
||||
|--------|-------|------------|------------|
|
||||
| **Webové aplikace** | De facto standard pro WP, Drupal, Magento | PostgreSQL (méně CMS pluginů) | Nejširší podpora ve web hosting providers |
|
||||
| **Čtení (SELECT heavy)** | InnoDB buffer pool, covering index, adaptive hash | PostgreSQL (MVCC overhead u čtení) | Cache-efficient, rychlé point lookupy |
|
||||
| **Replikace** | Async replication, Group Replication, InnoDB Cluster | PostgreSQL (streaming replication) | Jednodušší setup, široká dokumentace |
|
||||
| **Ekosystém** | ProxySQL, Orchestrator, Vitess, PlanetScale | PostgreSQL (méně nástrojů) | Nejvíce toolingu pro správu clusteru |
|
||||
| **JSON v MySQL 8+** | JSON datový typ, Multi-Value Indexes | PostgreSQL (jsonb, GIN) | Srovnatelné, Multi-Value Index unikátní |
|
||||
|
||||
### Kdy použít MySQL / MariaDB
|
||||
|
||||
- **CMS / e-commerce** — WordPress, Drupal, Magento, Joomla (všechny vyžadují MySQL)
|
||||
- **Read-heavy aplikace** — InnoDB buffer pool efektivně cachuje často čtená data
|
||||
- **Jednoduchá replicace** — Group Replication / InnoDB Cluster pro HA
|
||||
- **MariaDB pro Galera cluster** — synchronní multi-master clustering
|
||||
- **PHP aplikace** — nativní PHP MySQL extensions (mysqli, PDO_MySQL)
|
||||
|
||||
## MySQL / MariaDB licensing
|
||||
|
||||
### MySQL licensing
|
||||
|
||||
| Varianta | Licence | Cena | Omezení |
|
||||
|----------|---------|------|---------|
|
||||
| **MySQL Community (GPL)** | GPL v2 | $0 | Pokud distribuujete aplikaci, která obsahuje MySQL (např. embedded), musíte uvolnit celou aplikaci pod GPL. Webová aplikace (přes network) ≠ distribuce — GPL se netýká |
|
||||
| **MySQL Standard (Commercial)** | Commercial (Oracle) | ~$2 000/server/rok | Bez GPL omezení, production support, MySQL Enterprise Monitor |
|
||||
| **MySQL Enterprise** | Commercial (Oracle) | ~$5 000/server/rok | Vše výše + MySQL Enterprise Backup, Audit, Firewall, Thread Pool, Encryption |
|
||||
| **MySQL Cluster CGE** | Commercial (Oracle) | ~$10 000/server/rok | Distributed multi-master cluster (NDB), telco-grade |
|
||||
|
||||
**Kdy GPL vadí**: Pokud embeddedujete MySQL do komerčního produktu (např. desktopová aplikace s MySQL knihovnou). Webová aplikace komunikující přes TCP/IP **není** distribuce — GPL se neuplatní.
|
||||
|
||||
### MariaDB licensing
|
||||
|
||||
| Varianta | Licence | Cena | Omezení |
|
||||
|----------|---------|------|---------|
|
||||
| **MariaDB Community** | GPL v2 | $0 | Stejné jako MySQL Community — GPL, ale bez Oracle licenčních rizik |
|
||||
| **MariaDB Enterprise** | Business Source License (BSL) | Subscription (~$2-5k/server/rok) | Po 3 letech se automaticky mění na GPL v2. Zahrnuje enterprise funkce (ColumnStore, Spider, Xpand) |
|
||||
| **MariaDB SkySQL** | Managed (BSL) | Pay-per-use (~$0.10-1.00/hod) | Fully managed DBaaS |
|
||||
|
||||
**Klíčový rozdíl oproti Oracle MySQL**:
|
||||
- MariaDB je nezávislý fork, není pod kontrolou Oracle
|
||||
- BSL model je liberálnější — po 3 letech se stává open source
|
||||
- MariaDB nevyžaduje commercial licenci pro enterprise funkce (v MySQL jsou enterprise-only)
|
||||
|
||||
### Kdy použít něco jiného
|
||||
|
||||
- **Komplexní dotazy / CTE / window functions** → PostgreSQL (pokročilejší optimalizátor)
|
||||
- **GIS / geoprostorová data** → PostgreSQL + PostGIS
|
||||
- **Konzistence > rychlost** → PostgreSQL (SSI serializable)
|
||||
- **High-throughput zápisů** → Cassandra (MySQL master bottleneck)
|
||||
- **Distribuovaný SQL cluster** → CockroachDB, Vitess (MySQL kompatibilní sharding)
|
||||
|
||||
## Zdroje
|
||||
|
||||
Odkazy, knihy a standardy: [sources/databases/sources.md](sources/databases/sources.md)
|
||||
|
||||
### Doporučená literatura
|
||||
|
||||
| Kniha | Autoři | ISBN | Popis |
|
||||
|-------|--------|------|-------|
|
||||
| High Performance MySQL (4th ed.) | Schwartz, Zaitsev, Tkachenko | 978-1492075292 | Komplexní průvodce architekturou, optimalizací a monitoringem MySQL |
|
||||
|
||||
*Poslední revize: 2026-06-03*
|
||||
Reference in New Issue
Block a user