Upload files to "/"
This commit is contained in:
101
DATABAZOVE-ENGINY.md
Normal file
101
DATABAZOVE-ENGINY.md
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
# ⚙️ Storage enginy a transakční modely
|
||||||
|
|
||||||
|
## B-Tree vs LSM-Tree
|
||||||
|
|
||||||
|
Dva dominantní storage engine přístupy v moderních databázích.
|
||||||
|
|
||||||
|
| Vlastnost | B-Tree | LSM-Tree |
|
||||||
|
|-----------|--------|----------|
|
||||||
|
| **Zápis** | In-place update (náhodný I/O na page) | Append-only (sekvenční I/O) |
|
||||||
|
| **Čtení** | Rychlé (přímo v page, O(log N)) | Pomalejší (merge z více SSTable, bloom filtry) |
|
||||||
|
| **Write amplification** | Nižší (přepis stránky) | Vyšší (kompakce, merge SSTables) |
|
||||||
|
| **Read amplification** | Nižší (1 page read) | Vyšší (více SSTable k prohledání) |
|
||||||
|
| **Komprese** | Horší (fragmentace page) | Lepší (kompaktní SSTable, bloková komprese) |
|
||||||
|
| **Range scan** | Rychlý (linked list na listové úrovni) | Rychlý (SSTable jsou seřazené) |
|
||||||
|
| **Space amplification** | Nízká | Vyšší (čeká na kompakci) |
|
||||||
|
| **Typické DB** | PostgreSQL, MySQL (InnoDB), SQLite, Oracle | Cassandra, RocksDB, LevelDB, ScyllaDB, MongoDB (WiredTiger) |
|
||||||
|
|
||||||
|
### Kdy zvolit který engine
|
||||||
|
|
||||||
|
**B-Tree** — když:
|
||||||
|
- Potřebujete rychlé point lookupy (PK lookup, jedinečné ID)
|
||||||
|
- Workload je read-heavy (většina dotazů = SELECT podle klíče)
|
||||||
|
- Potřebujete range dotazy na primárním klíči
|
||||||
|
- Transakční workload (OLTP) s krátkými dotazy
|
||||||
|
|
||||||
|
**LSM-Tree** — když:
|
||||||
|
- Potřebujete vysokou propustnost zápisů (write-heavy)
|
||||||
|
- Append-only workload (logy, time-series, IoT)
|
||||||
|
- Komprese dat je důležitá (ušetří místo)
|
||||||
|
- Write amplification nevadí (dostatek I/O kapacity)
|
||||||
|
|
||||||
|
## Write-Ahead Log (WAL)
|
||||||
|
|
||||||
|
Append-only log garantující, že žádná operace není ztracena při crash:
|
||||||
|
|
||||||
|
```text
|
||||||
|
1. Transaction BEGIN → záznam do WAL
|
||||||
|
2. Data modification → záznam do WAL (před modifikací page)
|
||||||
|
3. Transaction COMMIT → flush WAL na disk (COMMIT potvrzen až po flush)
|
||||||
|
4. Checkpoint → flush dirty pages → WAL do bodu checkpointu může být smazán
|
||||||
|
```
|
||||||
|
|
||||||
|
- **Write-ahead** — WAL zapsán dříve než data page
|
||||||
|
- **Checkpoint** — bod, odkud je WAL při recovery potřeba
|
||||||
|
- **Redo log** (InnoDB) — podobný koncept, slouží k přehrání chybějících změn
|
||||||
|
- **Group commit** — více transakcí flushne WAL najednou (vyšší propustnost)
|
||||||
|
|
||||||
|
## MVCC (Multi-Version Concurrency Control)
|
||||||
|
|
||||||
|
Každá transakce vidí snapshot dat v okamžiku startu. Staré verze řádků zůstávají v tabulce.
|
||||||
|
|
||||||
|
### Implementace
|
||||||
|
|
||||||
|
| DB | Mechanismus | Vacuum/GC | Izolační úrovně |
|
||||||
|
|----|------------|-----------|-----------------|
|
||||||
|
| **PostgreSQL** | Heap tuple (xmin/xmax) — staré verze v hlavní tabulce | VACUUM (autovacuum) | RU, RC, RR, Serializable (SSI) |
|
||||||
|
| **MySQL InnoDB** | Undo log — staré verze v undo segmentech | Purge (automatický) | RU, RC, RR, Serializable |
|
||||||
|
| **MSSQL** | Tempdb version store | Automatické (row versioning) | RC (snapshot), Serializable |
|
||||||
|
| **Oracle** | Undo tablespace | Automatické (undo retention) | RC, Serializable, Read-only |
|
||||||
|
| **MongoDB WiredTiger** | MVCC na úrovni dokumentu | Automatické (eviction) | Snapshot isolation |
|
||||||
|
| **Cassandra** | MVCC není (přepis valore) | Compaction (merge SSTable) | — |
|
||||||
|
|
||||||
|
### Anomálie
|
||||||
|
|
||||||
|
| Úroveň | Dirty Read | Non-repeatable Read | Phantom Read | Serialization Anomaly |
|
||||||
|
|--------|-----------|---------------------|-------------|----------------------|
|
||||||
|
| **Read Uncommitted** | Ano | Ano | Ano | Ano |
|
||||||
|
| **Read Committed** | Ne | Ano | Ano | Ano |
|
||||||
|
| **Repeatable Read** | Ne | Ne | Ne (PG: ne, MySQL: next-key locking) | Ano |
|
||||||
|
| **Serializable** | Ne | Ne | Ne | Ne |
|
||||||
|
|
||||||
|
- **Dirty Read** — čtení dat z necommitnuté transakce
|
||||||
|
- **Non-repeatable Read** — stejný dotaz vrátí jiná data
|
||||||
|
- **Phantom Read** — stejný dotaz vrátí nové řádky
|
||||||
|
- **Serialization Anomaly** — výsledek transakcí není ekvivalentní žádnému sériovému pořadí
|
||||||
|
|
||||||
|
## Index types
|
||||||
|
|
||||||
|
| Typ | Algoritmus | Use case | DB podpora |
|
||||||
|
|-----|-----------|----------|------------|
|
||||||
|
| **B-tree** | Balanced tree | `=`, `<`, `>`, `BETWEEN`, `IN`, `LIKE (prefix)` | Všechny (výchozí) |
|
||||||
|
| **Hash** | Hash table | Pouze `=` (equality) | PostgreSQL (hash index), MySQL (MEMORY) |
|
||||||
|
| **GiST** | Generalized Search Tree | Geometrie, full-text, intervaly, IP rozsahy | PostgreSQL |
|
||||||
|
| **GIN** | Generalized Inverted Index | JSONB, pole, full-text (contains, overlaps) | PostgreSQL |
|
||||||
|
| **BRIN** | Block Range Index | Time-series, logy (data v pořadí) — extrémně malý | PostgreSQL |
|
||||||
|
| **SP-GiST** | Space-partitioned | Kvadranty, KD-tree, radix tree | PostgreSQL |
|
||||||
|
| **R-tree** | Prostorový strom | Geoprostorová data | MySQL (MyISAM/InnoDB), SQLite |
|
||||||
|
| **Clustered index** | B-tree + data v listech | PK lookup (InnoDB) — data uložena s indexem | MySQL InnoDB, MSSQL |
|
||||||
|
| **Full-text** | Inverted index | Text search (stemming, relevance) | MySQL, PostgreSQL, MSSQL |
|
||||||
|
|
||||||
|
## Zdroje
|
||||||
|
|
||||||
|
Odkazy, knihy a standardy: [sources/databases/sources.md](sources/databases/sources.md)
|
||||||
|
|
||||||
|
### Doporučená literatura
|
||||||
|
|
||||||
|
| Kniha | Autoři | ISBN | Popis |
|
||||||
|
|-------|--------|------|-------|
|
||||||
|
| Database Internals | Alex Petrov | 978-1492040346 | Hloubkový výklad storage engine (B-Tree, LSM-Tree, WAL, MVCC), distribuované systémy (partitioning, replication, consensus) |
|
||||||
|
|
||||||
|
*Poslední revize: 2026-06-03*
|
||||||
116
MONGODB.md
Normal file
116
MONGODB.md
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
# 🥬 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*
|
||||||
207
ORACLE.md
Normal file
207
ORACLE.md
Normal file
@@ -0,0 +1,207 @@
|
|||||||
|
# 🏛️ Oracle Database
|
||||||
|
|
||||||
|
## Přehled
|
||||||
|
|
||||||
|
Oracle Database je proprietární relační databáze s nejširší škálou enterprise funkcí — RAC clustering, Active Data Guard, partitioning, advanced compression, in-memory options a Oracle Exadata integrace. Dominantní v korporátním světě, financích, telekomunikacích a mainframe ekosystému.
|
||||||
|
|
||||||
|
## Architektura
|
||||||
|
|
||||||
|
### Oracle instance + database
|
||||||
|
|
||||||
|
```
|
||||||
|
Oracle Instance (memory + processes)
|
||||||
|
├── System Global Area (SGA)
|
||||||
|
│ ├── Database Buffer Cache
|
||||||
|
│ ├── Shared Pool (library cache, dictionary cache)
|
||||||
|
│ ├── Redo Log Buffer
|
||||||
|
│ ├── Java Pool
|
||||||
|
│ ├── Large Pool (backup, parallel)
|
||||||
|
│ └── In-Memory Column Store (option)
|
||||||
|
├── Program Global Area (PGA) — per session
|
||||||
|
└── Background processes
|
||||||
|
├── PMON (process monitor)
|
||||||
|
├── SMON (system monitor)
|
||||||
|
├── DBWn (database writer)
|
||||||
|
├── LGWR (log writer)
|
||||||
|
├── CKPT (checkpoint)
|
||||||
|
├── ARCn (archiver)
|
||||||
|
└── MMON (manageability monitor)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Multitenant architektura (12c+)
|
||||||
|
|
||||||
|
```
|
||||||
|
Container Database (CDB)
|
||||||
|
├── Root (CDB$ROOT) — metadata, system objects
|
||||||
|
├── Seed (PDB$SEED) — template pro nové PDB
|
||||||
|
├── Pluggable Database 1 (PDB1) — aplikace A
|
||||||
|
├── Pluggable Database 2 (PDB2) — aplikace B
|
||||||
|
└── Pluggable Database 3 (PDB3) — aplikace C
|
||||||
|
```
|
||||||
|
|
||||||
|
Každé PDB vypadá jako samostatná databáze, ale sdílí SGA a background procesy. Výhoda: vyšší densita, jednodušší patchování (CDB úroveň), resource management per PDB.
|
||||||
|
|
||||||
|
### Oracle RAC (Real Application Clusters)
|
||||||
|
|
||||||
|
Multi-instance architektura — více serverů přistupuje ke stejné storage:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Node 1 ─── Oracle ASM ─── Shared Storage (SAN/NFS)
|
||||||
|
Node 2 ─── Oracle ASM ─── Shared Storage (SAN/NFS)
|
||||||
|
Node 3 ─── Oracle ASM ─── Shared Storage (SAN/NFS)
|
||||||
|
│
|
||||||
|
Cache Fusion (private interconnect)
|
||||||
|
```
|
||||||
|
|
||||||
|
- Až 64 nodů v clusteru
|
||||||
|
- **Cache Fusion** — transfer dirty blocks mezi instancemi přes private interconnect (RAC-specific)
|
||||||
|
- **ASM** (Automatic Storage Management) — clustered filesystem + volume manager
|
||||||
|
- **Service** — workload routing (primární, report, batch)
|
||||||
|
|
||||||
|
### Oracle Data Guard
|
||||||
|
|
||||||
|
| Režim | Ochrana | Latence | Use case |
|
||||||
|
|-------|---------|---------|----------|
|
||||||
|
| **Maximum Protection** | Zero data loss (sync) | Nejvyšší | Kritické systémy |
|
||||||
|
| **Maximum Availability** | Zero data loss (sync, fallback na async) | Vysoká | Enterprise standard |
|
||||||
|
| **Maximum Performance** | Async | Nejnižší | DR na dálku |
|
||||||
|
|
||||||
|
- **Active Data Guard** — standby pro čtení (reporting, backup) — vyžaduje licenci
|
||||||
|
- **Far Sync** — synchronní zápis na vzdálený standby přes async (kompromis)
|
||||||
|
|
||||||
|
### Oracle Exadata
|
||||||
|
|
||||||
|
Hardware+software platforma pro Oracle DB:
|
||||||
|
|
||||||
|
| Komponenta | Popis |
|
||||||
|
|-----------|-------|
|
||||||
|
| **Database Servers** | x86 (Xeon), 2-8× per rack, NVMe, 1.5-6 TB RAM |
|
||||||
|
| **Storage Servers** | Celková kapacita až 2.7 PB raw per rack |
|
||||||
|
| **Smart Scan** | Predikátová filtrace na storage vrstvě (místo v DB serveru) |
|
||||||
|
| **Smart Flash Cache** | Násobné vrstvy caching (RAM, Flash, disk) |
|
||||||
|
| **RDMA over Converged Ethernet** | Nízká latence mezi DB a storage servery |
|
||||||
|
|
||||||
|
Vhodné pro: největší OLTP, data warehousing, consolidation.
|
||||||
|
|
||||||
|
## Klíčové enterprise funkce
|
||||||
|
|
||||||
|
| Funkce | Popis | Konkurence |
|
||||||
|
|--------|-------|------------|
|
||||||
|
| **RAC** | Shared-everything cluster až 64 uzlů | MSSQL AlwaysOn FCI (2 uzly) |
|
||||||
|
| **Active Data Guard** | Standby pro čtení, far sync, automatic failover | MSSQL AlwaysOn AG, PostgreSQL streaming |
|
||||||
|
| **Partitioning** | Range, List, Hash, Composite, interval, reference | PostgreSQL (declarative partitioning 10+) |
|
||||||
|
| **Advanced Compression** | Columnar, HCC (Exadata), OLTP compression | InnoDB page compression, PG TOAST |
|
||||||
|
| **In-Memory** | Column store v SGA pro real-time analytics | PG (no native), MSSQL (columnstore index) |
|
||||||
|
| **Advanced Security** | TDE, data redaction, VPD, audit vault, database firewall | PG (pgcrypto, pgaudit), MSSQL (TDE, Always Encrypted) |
|
||||||
|
| **Flashback** | Dotazování na historická data (Flashback Query, Table, Database) | PG (temporal tables via extension), MSSQL (system-versioned) |
|
||||||
|
| **Sharding** | System-managed, composite, user-defined | MongoDB (native), Vitess (MySQL), Citus (PG) |
|
||||||
|
| **ASM** | Clustered filesystem + volume manager | VMware VMFS, Windows CSV |
|
||||||
|
|
||||||
|
## Oracle licensing detail
|
||||||
|
|
||||||
|
### Edice
|
||||||
|
|
||||||
|
| Edice | Metrika | Cena (orientační) | Limitace |
|
||||||
|
|-------|---------|-------------------|----------|
|
||||||
|
| **Oracle Database Standard Edition 2 (SE2)** | Per core (core factor 0.5) | ~$17 500/core | Max 16 CPU threads (na server), max 2 sockets, žádný RAC (pouze Oracle RAC One), žádné partitioning, in-memory, compression |
|
||||||
|
| **Oracle Database Enterprise Edition (EE)** | Per core (core factor 0.5) | ~$47 500/core | Bez omezení, všechny funkce (RAC, partitioning, in-memory, compression, Advanced Security) — ale vše jako **volitelné licence** |
|
||||||
|
| **Oracle Database Enterprise Edition (RAC)** | Per core (EE + RAC option) | ~$47 500 + $23 000/core | EE + RAC clustering |
|
||||||
|
|
||||||
|
### Volitelné licence (options) — EE only
|
||||||
|
|
||||||
|
| Option | Cena (orientační / core) | Use case |
|
||||||
|
|--------|--------------------------|----------|
|
||||||
|
| **Real Application Clusters (RAC)** | ~$23 000 | Multi-instance cluster |
|
||||||
|
| **Active Data Guard** | ~$10 000 | Standby pro čtení, far sync, automatic failover |
|
||||||
|
| **Partitioning** | ~$11 500 | Range, list, hash, interval, reference, system |
|
||||||
|
| **Advanced Compression** | ~$11 500 | OLTP compression, HCC (Exadata), JSON compression |
|
||||||
|
| **Advanced Security** | ~$15 000 | TDE, data redaction, database firewall |
|
||||||
|
| **In-Memory Database** | ~$23 000 | Column store v SGA pro real-time analytics |
|
||||||
|
| **Database Vault** | ~$5 750 | Separation of duties, multi-tenancy security |
|
||||||
|
| **Multitenant (EE)** | Zdarma (od 21c) | CDB/PDB — max 3 PDB na CDB v EE bez license. Neomezeno s Multitenant option (~$17 500) |
|
||||||
|
| **Spatial / Graph** | ~$5 750 | Geoprostorová data, property graph |
|
||||||
|
| **Label Security** | ~$5 750 | Row-level security s klasifikacemi |
|
||||||
|
|
||||||
|
### Oracle Cloud (OCI) licensing
|
||||||
|
|
||||||
|
| Služba | Model | Cena | Poznámka |
|
||||||
|
|--------|-------|------|----------|
|
||||||
|
| **OCI Base Database (RDS-like)** | BYOL nebo License Included | ~$1-5/hod (BYOL levnější) | Single instance nebo RAC, automatické backup, patching |
|
||||||
|
| **OCI Exadata Database Service** | BYOL nebo License Included | ~$5-30/hod (dle shape) | Exadata X9M/X10M v OCI, elastic, full Exadata features |
|
||||||
|
| **OCI Autonomous Database** | Per CPU (ECPU) | ~$0.50-3.00/ECPU/hod | Auto-tuning, auto-scaling, auto-patching |
|
||||||
|
| **BYOL (Bring Your Own License)** | Vlastní Oracle license v OCI | Jen infrastruktura | Lze použít stávající perpetual license, včetně supportu |
|
||||||
|
|
||||||
|
### RAC sizing — licence cost
|
||||||
|
|
||||||
|
```text
|
||||||
|
4-node RAC, každý node 2× EPYC 9654 (96C) = 192 cores per node
|
||||||
|
Core factor 0.5 → 96 Oracle licenses per node
|
||||||
|
4 × 96 = 384 Oracle EE licenses
|
||||||
|
|
||||||
|
EE: 384 × $47 500 = $18 240 000
|
||||||
|
RAC option: 384 × $23 000 = $8 832 000
|
||||||
|
Support 22 % ročně: ($18 240 000 + $8 832 000) × 0.22 = $5 955 840/rok
|
||||||
|
|
||||||
|
Tip: Pro RAC zvažte menší CPU (např. 64C místo 96C) — license cost často převyšuje hardware cost.
|
||||||
|
```
|
||||||
|
|
||||||
|
### Oracle vs PostgreSQL — srovnání
|
||||||
|
|
||||||
|
| Oblast | Oracle | PostgreSQL |
|
||||||
|
|--------|--------|------------|
|
||||||
|
| **Licence** | Proprietary (per core, ~$17.5k-47.5k/core + 22 % support ročně) | Open source (PostgreSQL license, MIT-like) |
|
||||||
|
| **RAC clustering** | Nativní, shared-everything | Žádné (Citus = shared-nothing) |
|
||||||
|
| **Multitenant** | CDB/PDB architektura | Žádné (schemas per tenant) |
|
||||||
|
| **Parallel execution** | Vyspělý (auto DOP, parallel index scan) | Dobrý (parallel seq/index scan, join) |
|
||||||
|
| **Storage management** | ASM (integrovaný) | OS volume / LVM |
|
||||||
|
| **Materialized views** | S refresh on commit, query rewrite | Není query rewrite |
|
||||||
|
| **Partitioning** | 40+ možností (interval, referential, system) | Declarative (range, list, hash od 10+) |
|
||||||
|
| **In-memory** | Columnar in SGA | Není nativní |
|
||||||
|
| **Standby použitek** | Active Data Guard (read-only, licence) | Hot standby (read-only, zdarma) |
|
||||||
|
| **Cloud** | OCI (Oracle Cloud), AWS RDS, Azure | Všechny cloudy (native) |
|
||||||
|
|
||||||
|
## Doporučení — v čem je Oracle lepší
|
||||||
|
|
||||||
|
| Oblast | Oracle | Konkurence | Proč Oracle |
|
||||||
|
|--------|--------|------------|-------------|
|
||||||
|
| **Licence cost (4-node RAC, 384 cores)** | ~$50M (1. rok vč. supportu) | PostgreSQL: $0 | Oracle: 22 % support ročně z license fee |
|
||||||
|
| **Vendor lock-in** | Vysoký (GoldenGate migrace náročná, PL/SQL specific) | PostgreSQL: žádný | MySQL i PG mají nástroje pro migraci z Oracle (ora2pg, AWS DMS) |
|
||||||
|
| **Enterprise OLTP** | RAC + ASM, zero-downtime patching | MSSQL (FCI limit 2 nodes) | Shared-everything cluster, transparent failover |
|
||||||
|
| **Finance / Banking** | Audit Vault, Database Vault, TDE, VPD | PG (pgaudit, row-level security) | Compliance certifikace (SOX, PCI, GDPR) |
|
||||||
|
| **Consolidace** | Multitenant (CDB/PDB) — stovky DB na 1 instanci | PG (citizen schemas) | Nižší overhead, jednodušší management |
|
||||||
|
| **Data Warehouse** | Exadata Smart Scan, parallel execution, in-memory | ClickHouse (specializovaná) | Hybrid workload (OLTP + DW v jedné DB) |
|
||||||
|
| **High-end hardware** | Exadata engineered system | PG (běží na čemkoliv) | Full-stack optimalizace HW+SW |
|
||||||
|
| **Partitioning** | Rozsah možností (reference, interval, system) | PG (basic) | 10+ let náskok v implementaci |
|
||||||
|
| **Flashback / recovery** | Flashback Database, Table, Query — libovolný čas | PG (PITR, point-in-time) | Rychlejší, granularnější recovery |
|
||||||
|
| **Ekosystém** | OEM, Data Pump, SQL Developer, Toad, GoldenGate | PG (pgAdmin, pg_dump, Patroni) | Desítky let enterprise toolingu |
|
||||||
|
|
||||||
|
### Kdy použít Oracle
|
||||||
|
|
||||||
|
- **Kritické OLTP systémy** — banking, payment processing, trading
|
||||||
|
- **Enterprise konsolidace** — stovky DB na jednom RAC clusteru (multitenant)
|
||||||
|
- **Regulované prostředí** — finance, healthcare, government (audit, security, compliance)
|
||||||
|
- **Oracle ekosystém** — E-Business Suite, PeopleSoft, Siebel, JD Edwards
|
||||||
|
- **Exadata zákazníci** — maximální výkon pro hybrid workload (OLTP + DW)
|
||||||
|
- **GoldenGate replikace** — heterogenní replikace (Oracle → Kafka, Oracle → PostgreSQL)
|
||||||
|
- **Cloud migration** — OCI, AWS RDS for Oracle, Azure Oracle Database Service
|
||||||
|
|
||||||
|
### Kdy použít něco jiného
|
||||||
|
|
||||||
|
- **Startup / SME** → PostgreSQL (zdarma, dostatečný výkon, žádný vendor lock-in)
|
||||||
|
- **Web / LAMP stack** → MySQL (jednodušší, levnější, široká podpora)
|
||||||
|
- **Cloud-native** → Aurora, CockroachDB (architektura pro cloud, ne port on-prem do cloudu)
|
||||||
|
- **Potřebujete jen SQL** → PostgreSQL (Oracle overhead se nevyplatí)
|
||||||
|
- **Horizontální škálování zápisů** → Cassandra (RAC škáluje čtení, zápisy jdou přes jeden nod)
|
||||||
|
|
||||||
|
## Zdroje
|
||||||
|
|
||||||
|
Odkazy, knihy a standardy: [sources/databases/sources.md](sources/databases/sources.md)
|
||||||
|
|
||||||
|
### Doporučená literatura
|
||||||
|
|
||||||
|
| Kniha | Autoři | ISBN | Popis |
|
||||||
|
|-------|--------|------|-------|
|
||||||
|
| Oracle Database 23ai New Features | Oracle Corporation | — | Oficiální průvodce novinkami — AI Vector Search, JSON Relational Duality, property graphs, schema privileges |
|
||||||
|
| Expert Oracle Architecture (3rd ed.) | Thomas Kyte, Darl Kuhn | 978-1484249602 | Komplexní výklad Oracle architektury — od storage po RAC a Data Guard |
|
||||||
|
|
||||||
|
*Poslední revize: 2026-06-03*
|
||||||
178
POSTGRESQL.md
Normal file
178
POSTGRESQL.md
Normal file
@@ -0,0 +1,178 @@
|
|||||||
|
# 🐘 PostgreSQL
|
||||||
|
|
||||||
|
## Přehled
|
||||||
|
|
||||||
|
PostgreSQL je nejpokročilejší open-source relační databáze s důrazem na rozšiřitelnost, standardy SQL a spolehlivost. Vývoj od 1996, silná komunita, aktivní release cyklus (major verze každý rok).
|
||||||
|
|
||||||
|
## Architektura
|
||||||
|
|
||||||
|
### Procesový model
|
||||||
|
|
||||||
|
```text
|
||||||
|
Postmaster (supervisor)
|
||||||
|
├── Backend process (1 per connection)
|
||||||
|
├── WAL writer
|
||||||
|
├── Checkpointer
|
||||||
|
├── Autovacuum launcher
|
||||||
|
├── Stats collector
|
||||||
|
├── Logical replication launcher
|
||||||
|
└── Archiver (WAL archiving)
|
||||||
|
```
|
||||||
|
|
||||||
|
Každé spojení = vlastní OS proces (ne vlákno). Výhoda: izolace, stabilita. Nevýhoda: vyšší memory footprint u tisíců spojení → nutný connection pooler (PgBouncer).
|
||||||
|
|
||||||
|
### MVCC (Multi-Version Concurrency Control)
|
||||||
|
|
||||||
|
Každá transakce vidí snapshot dat z okamžiku startu. Staré verze řádků (tuple) zůstávají v tabulce:
|
||||||
|
|
||||||
|
- INSERT vytvoří nový tuple s `xmin = current_xid`
|
||||||
|
- DELETE označí tuple `xmax = current_xid` (nezmizí hned)
|
||||||
|
- UPDATE = DELETE old + INSERT new
|
||||||
|
- VACUUM fyzicky maže tuple starší než nejstarší aktivní snapshot
|
||||||
|
|
||||||
|
### VACUUM a autovacuum
|
||||||
|
|
||||||
|
| Parametr | Popis | Výchozí |
|
||||||
|
|----------|-------|---------|
|
||||||
|
| `autovacuum_vacuum_threshold` | Min. mrtvých řádků pro spuštění | 50 |
|
||||||
|
| `autovacuum_vacuum_scale_factor` | % z tabulky jako threshold | 0.2 (20 %) |
|
||||||
|
| `autovacuum_analyze_threshold` | Min. změněných řádků pro ANALYZE | 50 |
|
||||||
|
| `autovacuum_vacuum_cost_limit` | Limituje I/O vacuum (prevence zátěže) | 200 |
|
||||||
|
| `autovacuum_naptime` | Interval mezi kontrolami | 1 min |
|
||||||
|
| `deadlock_timeout` | Detekce deadlocků | 1 s |
|
||||||
|
|
||||||
|
**Příznaky nedostatečného vacuum**: růst tabulky (bloat), zhoršení výkonu index scanů, XID wraparound hazard.
|
||||||
|
|
||||||
|
### WAL (Write-Ahead Log)
|
||||||
|
|
||||||
|
Append-only log všech změn pro crash recovery a replikaci:
|
||||||
|
|
||||||
|
```conf
|
||||||
|
wal_level = replica # nebo logical
|
||||||
|
archive_mode = on
|
||||||
|
archive_command = 'aws s3 cp %p s3://backups/pg-wal/%f'
|
||||||
|
```
|
||||||
|
|
||||||
|
**PITR (Point-In-Time Recovery)**:
|
||||||
|
1. Restore base backup (pg_basebackup)
|
||||||
|
2. Replay WAL archivů až k cílovému času
|
||||||
|
3. `recovery_target_time = '2026-06-03 10:30:00 UTC'`
|
||||||
|
|
||||||
|
### Replication slots
|
||||||
|
|
||||||
|
- **Physical** — zaručuje, že WAL není smazán masterem, dokud ho replica nespotřebuje
|
||||||
|
- **Logical** — pro logickou replikaci (selektivní tabulky, transformace dat)
|
||||||
|
- **Riziko**: pokud replica spadne, WAL naroste na disku (disk full)
|
||||||
|
- Monitoring: `pg_replication_slots`, `pg_stat_replication`
|
||||||
|
|
||||||
|
### Konfigurace
|
||||||
|
|
||||||
|
Hlavní soubory (dle Obe & Hsu):
|
||||||
|
- `postgresql.conf` — paměť, síť, logování, storage
|
||||||
|
- `pg_hba.conf` — přístupová práva
|
||||||
|
- `pg_ident.conf` — mapování OS uživatelů na PostgreSQL role
|
||||||
|
|
||||||
|
### AI-Ready PostgreSQL 18
|
||||||
|
|
||||||
|
(Kumar, Linster, 2026) — PostgreSQL 18 jako unified platform pro transakce, analytiku a AI:
|
||||||
|
|
||||||
|
| Oblast | Technika |
|
||||||
|
|--------|----------|
|
||||||
|
| Vektory | pgvector — embeddingy přímo v řádcích tabulky |
|
||||||
|
| Hybridní pattern | Semantic recall → SQL filtrování |
|
||||||
|
| LLM integrace | PostgreSQL + MCP (Model Context Protocol) |
|
||||||
|
| Embedding pipeline | Batch i stream generování embeddingů |
|
||||||
|
|
||||||
|
**Hybridní dotaz**:
|
||||||
|
```sql
|
||||||
|
SELECT p.*, pm.name
|
||||||
|
FROM products p
|
||||||
|
JOIN product_embeddings pe ON p.id = pe.product_id
|
||||||
|
WHERE pe.embedding <-> '[0.1, 0.3, ...]' < 0.8
|
||||||
|
AND p.in_stock = true
|
||||||
|
AND p.price < 100.00
|
||||||
|
ORDER BY pe.embedding <-> '[0.1, 0.3, ...]'
|
||||||
|
LIMIT 10;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Rozšíření (extensions)
|
||||||
|
|
||||||
|
| Extension | Účel |
|
||||||
|
|-----------|-------|
|
||||||
|
| pgvector | Vektorové vyhledávání pro AI/embeddings |
|
||||||
|
| PostGIS | Geografická data, prostorové dotazy |
|
||||||
|
| pg_stat_statements | Monitoring výkonu dotazů |
|
||||||
|
| pg_duckdb | Analytické dotazy (DuckDB engine uvnitř PG) |
|
||||||
|
| pg_search | Full-text a hybridní vyhledávání |
|
||||||
|
| pg_cron | Scheduling úloh v DB |
|
||||||
|
| citus | Horizontální škálování (sharding) |
|
||||||
|
| timescaledb | Time-series optimalizace |
|
||||||
|
| pgaudit | Auditní logování |
|
||||||
|
|
||||||
|
## Connection pooling
|
||||||
|
|
||||||
|
| Pooler | Typ | Protokol |
|
||||||
|
|--------|-----|----------|
|
||||||
|
| PgBouncer | Proxy (transaction/session) | PostgreSQL wire |
|
||||||
|
| Odyssey | Proxy (multithreaded) | PostgreSQL wire |
|
||||||
|
| pgpool-II | Proxy (replication, load balancing) | PostgreSQL wire |
|
||||||
|
| RDS Proxy | Managed proxy (AWS) | PostgreSQL wire |
|
||||||
|
|
||||||
|
**PgBouncer režimy**:
|
||||||
|
- **Session pooling** — spojení drženo po celou dobu session (aplikace) → overhead
|
||||||
|
- **Transaction pooling** — spojení vráceno po dokončení transakce → efektivnější (vyžaduje bezstavovost)
|
||||||
|
|
||||||
|
## Doporučení — v čem je PostgreSQL lepší
|
||||||
|
|
||||||
|
| Oblast | PostgreSQL | Konkurence | Proč PG |
|
||||||
|
|--------|-----------|------------|---------|
|
||||||
|
| **Rozšiřitelnost** | Extensions, custom types, operators, index methods | MySQL omezené | Lze přidat cokoliv od vektorů po full-text v DB |
|
||||||
|
| **SQL standard** | Nejbližší ANSI SQL | MySQL odbočky (GROUP BY, ALTER TABLE) | Přenositelnost, méně překvapení |
|
||||||
|
| **Geoprostorová data** | PostGIS (zlatý standard GIS) | MySQL GIS (omezený) | Jediná reálná open-source volba pro GIS |
|
||||||
|
| **Konzistence** | SSI serializable, foreign keys, CHECK, exclusions | MySQL MyISAM bez FK, InnoDB jen RC | Vhodné pro finanční a kritické systémy |
|
||||||
|
| **Concurrent读写** | MVCC bez reader/writer blokování | MySQL InnoDB reader blokuje writer (a naopak) u starších verzí | Lepší škálovatelnost čtení |
|
||||||
|
| **AI/vektory** | pgvector nativně v DB | Samostatná vektorová DB (zvýšení latence) | Hybridní dotazy v jediném SQL |
|
||||||
|
| **Licence** | PostgreSQL license (MIT-like) | MySQL dvojí licence (Oracle) | Žádná vendor lock-in |
|
||||||
|
|
||||||
|
### Kdy použít PostgreSQL
|
||||||
|
|
||||||
|
- **Enterprise aplikace** — vyžadují ACID, referenční integritu, komplexní transakce
|
||||||
|
- **Geografické systémy** — GIS, mapové aplikace, lokalitní služby
|
||||||
|
- **Finanční systémy** — účetnictví, banking, compliance (audit logging, SSI)
|
||||||
|
- **AI / RAG aplikace** — hybridní vektorové + relační dotazy v jedné DB
|
||||||
|
- **Analytika na relačních datech** — pg_duckdb, materializované views, window functions
|
||||||
|
- **Multi-tenant aplikace** — row-level security, schemas per tenant
|
||||||
|
|
||||||
|
## PostgreSQL licensing
|
||||||
|
|
||||||
|
| Varianta | Licence | Cena | Omezení |
|
||||||
|
|----------|---------|------|---------|
|
||||||
|
| **PostgreSQL** | PostgreSQL license (MIT-like) | $0 | Žádná — lze používat, modifikovat, distribuovat v komerčních produktech. Není potřeba žádný "commercial license" |
|
||||||
|
| **Amazon Aurora PostgreSQL** | Proprietary (AWS) | ~$0.10-1.00/hod | AWS managed, PostgreSQL compatible. AWS smí používat PG kód díky PostgreSQL license |
|
||||||
|
| **YugabyteDB** | Apache 2.0 | $0 (core) | PostgreSQL kompatibilní distributed SQL, postaveno na PG query layer |
|
||||||
|
| **TimescaleDB** | Apache 2.0 (community) / Timescale License (enterprise) | $0 (community) | Časově řadová rozšíření PostgreSQL. Enterprise: tiered storage, compression, multi-node |
|
||||||
|
|
||||||
|
**Klíčové**: PostgreSQL license je jedna z nejliberálnějších — umožňuje cloud providerům (AWS, GCP, Azure) nabízet PostgreSQL jako managed službu bez omezení. To je rozdíl oproti MongoDB (SSPL) a Redis (RSALv2). Díky tomu má PostgreSQL nejširší cloud podporu ze všech databází.
|
||||||
|
|
||||||
|
**Dopad na výběr**: Žádný license risk, žádný vendor lock-in, žádné skryté náklady. PostgreSQL je bezpečná volba pro jakýkoliv projekt.
|
||||||
|
|
||||||
|
### Kdy použít něco jiného
|
||||||
|
|
||||||
|
- **Jednoduchý web / blog** → SQLite (v embedded scénáři lehčí)
|
||||||
|
- **High-throughput key-value** → Redis (o řád nižší latence)
|
||||||
|
- **Time-series v masivním měřítku** → TimescaleDB, InfluxDB
|
||||||
|
- **Globálně distribuovaná data** → CockroachDB, Spanner
|
||||||
|
- **Full-text search primárně** → Elasticsearch
|
||||||
|
|
||||||
|
## Zdroje
|
||||||
|
|
||||||
|
Odkazy, knihy a standardy: [sources/databases/sources.md](sources/databases/sources.md)
|
||||||
|
|
||||||
|
### Doporučená literatura
|
||||||
|
|
||||||
|
| Kniha | Autoři | ISBN | Popis |
|
||||||
|
|-------|--------|------|-------|
|
||||||
|
| PostgreSQL: Up and Running (3rd ed.) | Regina Obe, Leo Hsu | 978-1491962935 | Praktický průvodce administrací, konfigurací a extensions |
|
||||||
|
| AI-Ready PostgreSQL 18 | Kumar, Linster | — | PostgreSQL jako unified platform pro AI workloads |
|
||||||
|
|
||||||
|
*Poslední revize: 2026-06-03*
|
||||||
105
VEKTOROVE-DB.md
Normal file
105
VEKTOROVE-DB.md
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
# 🧠 Vektorové databáze
|
||||||
|
|
||||||
|
## Přehled
|
||||||
|
|
||||||
|
Specializované databáze pro ukládání a vyhledávání **embeddingů** — vektorových reprezentací nestrukturovaných dat (text, obrázky, audio, video). Umožňují **sémantické vyhledávání** na základě podobnosti, nikoliv přesné shody. Klíčový stavební kámen pro RAG (Retrieval-Augmented Generation) a AI aplikace.
|
||||||
|
|
||||||
|
## Embeddings
|
||||||
|
|
||||||
|
- Mapují nestrukturovaná data do vektorového prostoru (seznam čísel)
|
||||||
|
- Blízkost ve vektorovém prostoru = sémantická podobnost
|
||||||
|
- Generovány modely: Word2Vec, BERT, OpenAI embeddings, E5, Cohere, Mistral
|
||||||
|
- Dimenze: 384 (all-MiniLM) až 3072 (OpenAI text-embedding-3-large)
|
||||||
|
|
||||||
|
## Indexování vektorů
|
||||||
|
|
||||||
|
| Metoda | Algoritmus | Popis | Přesnost | Rychlost |
|
||||||
|
|--------|-----------|-------|----------|----------|
|
||||||
|
| **Flat (brute-force)** | Úplné prohledání | Porovnání se všemi vektory | 100 % | O(N) — pomalé pro > 100K |
|
||||||
|
| **IVF** (Inverted File) | K-means clustering | Rozdělení do shluků, hledá se v nejbližším shluku | ~95-99 % | O(sqrt(N)) |
|
||||||
|
| **HNSW** (Hierarchical Navigable Small World) | Navigovatelný graf | Víceúrovňový graf, greedy search | ~99-100 % | O(log N) |
|
||||||
|
| **IVF-PQ** | IVF + Product Quantization | Komprese vektorů, menší paměť | ~90-95 % | O(sqrt(N)) |
|
||||||
|
| **DiskANN** | SSD-based graf | Vektory na disku, Vamana graf | ~95-98 % | O(log N) + I/O |
|
||||||
|
|
||||||
|
### Volba indexu
|
||||||
|
|
||||||
|
| Počet vektorů | Požadavek | Doporučený index |
|
||||||
|
|--------------|-----------|-----------------|
|
||||||
|
| < 100K | 100% přesnost | Flat |
|
||||||
|
| 100K - 10M | Vysoká přesnost, rychlost | HNSW |
|
||||||
|
| 10M+ | Paměťová efektivita | IVF-PQ, DiskANN |
|
||||||
|
| 100M+ | Škálování na SSD | DiskANN |
|
||||||
|
|
||||||
|
## Use case: RAG (Retrieval-Augmented Generation)
|
||||||
|
|
||||||
|
```text
|
||||||
|
User query → Embedding model → Vector DB search → Relevant chunks → LLM → Answer
|
||||||
|
```
|
||||||
|
|
||||||
|
Varianty:
|
||||||
|
- **Naive RAG** — jeden retrieval + jeden generování
|
||||||
|
- **Advanced RAG** — pre-retrieval (query rewriting, HyDE) + post-retrieval (reranking, filtering)
|
||||||
|
- **Multi-modal RAG** — text + obrázky + audio do jednoho pipeline
|
||||||
|
|
||||||
|
## Nástroje — srovnání
|
||||||
|
|
||||||
|
| Nástroj | Typ | Indexy | Cloud | Self-hosted | Poznámka |
|
||||||
|
|---------|-----|--------|-------|-------------|----------|
|
||||||
|
| **Pinecone** | Managed | HNSW, IVF-PQ | Ano | Ne | Plně spravovaná, žádný ops. Cena dle dimenze a počtu vektorů |
|
||||||
|
| **Weaviate** | Open source | HNSW, Flat | Ano (WCD) | Ano | Grafová + vektorová, hybridní dotazy, modulární (generative search) |
|
||||||
|
| **Qdrant** | Open source | HNSW, IVF-PQ, quantization | Ano (Cloud) | Ano | Rust, batch API, filtr souběžně s vektorovým search |
|
||||||
|
| **Milvus** | Open source | IVF, HNSW, IVF-PQ, DiskANN | Ano (Zilliz) | Ano | GPU akcelerace. Komplexnější ops (K8s required) |
|
||||||
|
| **pgvector** | PostgreSQL extension | IVFFlat, HNSW | Vše (díky RDS) | Ano | Embeddingy přímo v PostgreSQL. Hybridní SQL + vektory |
|
||||||
|
| **Chroma** | Open source | HNSW | Ne | Ano | Jednoduchý na embedding + retrieval, Python-native |
|
||||||
|
| **LanceDB** | Open source | IVF-PQ | Ne | Ano | Multimodální data, Arrow formát, žádný server (embedded) |
|
||||||
|
| **Elasticsearch** | Search engine | HNSW (8.0+) | Ano (Cloud) | Ano | Pokud už máte ES, lze použít i pro vektory |
|
||||||
|
|
||||||
|
### pgvector vs samostatná vektorová DB
|
||||||
|
|
||||||
|
| Vlastnost | pgvector | Samostatná (Pinecone, Qdrant, Milvus) |
|
||||||
|
|-----------|----------|---------------------------------------|
|
||||||
|
| **Architektura** | Extension v PostgreSQL | Samostatná služba |
|
||||||
|
| **Hybridní dotazy** | Nativní SQL + vektory | Nutná koordinace dvou systémů |
|
||||||
|
| **Latence** | Vyšší (disk-based PG) | Nižší (in-memory indexy) |
|
||||||
|
| **Škálování** | PG replikace / Citus | Nativní sharding, rebalancing |
|
||||||
|
| **Konzistence** | PG ACID transakce | Eventual consistency |
|
||||||
|
| **Provoz** | Jeden systém | Dva systémy (operational overhead) |
|
||||||
|
|
||||||
|
## Doporučení — Volba nástroje
|
||||||
|
|
||||||
|
| Scénář | Doporučení | Zdůvodnění |
|
||||||
|
|--------|-----------|-------------|
|
||||||
|
| **RAG na PostgreSQL datech** | pgvector | Hybridní SQL + vektory v jedné DB |
|
||||||
|
| **RAG produkce, žádný ops** | Pinecone | Plně managed, škálovatelné, žádný provoz |
|
||||||
|
| **Self-hosted RAG** | Qdrant (jednodušší) / Milvus (výkon) | Open source, kontrola nad daty |
|
||||||
|
| **Full-text + vektory** | Elasticsearch / Weaviate | Kombinace BM25 + vektorového skóre |
|
||||||
|
| **Výzkum / prototypování** | Chroma | Python-native, rychlý start |
|
||||||
|
| **Embedded / edge** | LanceDB | Žádný server, Arrow formát |
|
||||||
|
| **Multi-modal data** | Weaviate / LanceDB | Nativní podpora obrázků, audio, videa |
|
||||||
|
| **GPU akcelerace** | Milvus | CUDA podpora pro index build |
|
||||||
|
|
||||||
|
## Kdy vektorovou DB (ne)použít
|
||||||
|
|
||||||
|
**Použít** když:
|
||||||
|
- Potřebujete sémantické vyhledávání (podobnost podle významu, ne klíčových slov)
|
||||||
|
- Stavíte RAG / AI asistenta nad vlastními daty
|
||||||
|
- Deduplikace dokumentů, obrázků (near-duplicate detection)
|
||||||
|
- Doporučovací systémy (podobný obsah, podobní uživatelé)
|
||||||
|
|
||||||
|
**Nepoužít** když:
|
||||||
|
- Potřebujete přesnou shodu (klíče, ID, foreign keys) → SQL
|
||||||
|
- Full-text search stačí (BM25, stemming) → Elasticsearch, PostgreSQL full-text
|
||||||
|
- Vektory jen jako doplněk k primární DB → pgvector (jednoduchost)
|
||||||
|
- Méně než 1000 dokumentů → postačí brute-force v aplikaci
|
||||||
|
|
||||||
|
## Zdroje
|
||||||
|
|
||||||
|
Odkazy, knihy a standardy: [sources/databases/sources.md](sources/databases/sources.md)
|
||||||
|
|
||||||
|
### Doporučená literatura
|
||||||
|
|
||||||
|
| Kniha | Autoři | Popis |
|
||||||
|
|-------|--------|-------|
|
||||||
|
| Vector Databases | Borwankar (2026) | Komplexní průvodce vektorovými DB od konceptů po produkční nasazení |
|
||||||
|
|
||||||
|
*Poslední revize: 2026-06-03*
|
||||||
Reference in New Issue
Block a user