From 184d451dfd757c5182aa2a14f978ac80a0b5d1f2 Mon Sep 17 00:00:00 2001 From: Stanislav Hubacek Date: Thu, 11 Jun 2026 13:54:31 +0200 Subject: [PATCH] Delete MYSQL.md --- MYSQL.md | 142 ------------------------------------------------------- 1 file changed, 142 deletions(-) delete mode 100644 MYSQL.md diff --git a/MYSQL.md b/MYSQL.md deleted file mode 100644 index 9729081..0000000 --- a/MYSQL.md +++ /dev/null @@ -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*