10 min čteníŠtěpán Unar

Strategie škálování databází, které skutečně využijete

Vaše aplikace roste. Databáze se potí. Jak škálovat PostgreSQL z tisíců na miliony řádků bez přepisu.

Zeď jménem databáze

Každá úspěšná aplikace narazí na stejnou zeď: databáze se stane úzkým hrdlem. Dotazy, které trvaly 50 ms, najednou trvají 5 sekund. Connection pool je na maximu. Váš ORM generuje dotazy, že by se DBA rozplakal. Pokušení je hodit na to hardware — větší instance, víc RAM, rychlejší disky. Tím si koupíte měsíce, ne roky. Skutečné škálování vyžaduje strategii.

Začněte se základy

Začněte se základy. 90 % výkonnostních problémů databází vyřeší správné indexování, optimalizace dotazů a connection pooling. Použijte EXPLAIN ANALYZE na nejpomalejší dotazy. Přidejte kompozitní indexy odpovídající vašim WHERE klauzulím a JOIN podmínkám. Použijte PgBouncer nebo Supavisor pro connection pooling — vaše aplikace nepotřebuje 200 přímých připojení k databázi. Implementujte cachování výsledků dotazů přes Redis pro data, která se nemění s každým requestem. Tyto základy vás donesou dál, než si většina týmů uvědomuje.

Read repliky jako další krok

Když základy nestačí, read repliky jsou další krok. Směrujte všechny čtecí dotazy na jednu nebo více replik a primární databázi nechte pro zápisy. Většina aplikací je z 80–90 % čtení, takže tím efektivně násobíte kapacitu. PostgreSQL streaming replikace je vyspělá a spolehlivá. Kompromis je eventuální konzistence — repliky zaostávají za primárem o milisekundy až sekundy. Pro většinu případů je to naprosto přijatelné. Pro ty, kde není, čtěte z primáru.

Sharding je nukleární možnost

Sharding — rozdělení dat přes více databázových instancí — je nukleární možnost. Řeší problémy, které nic jiného nevyřeší, ale přináší enormní složitost: cross-shard dotazy, distribuované transakce, rebalancing a routing na úrovni aplikace. Než začnete shardovat, vyčerpejte všechny ostatní možnosti. Partitionujte velké tabulky podle data nebo tenanta. Archivujte stará data. Denormalizujte hot paths. Použijte materializované pohledy pro složité agregace. Ve steezr jsme škálovali PostgreSQL databáze od startupu po miliony denních transakcí — a sharding jsme potřebovali jen dvakrát. Nudné optimalizace skoro vždy přijdou první.

Napsal/a

Štěpán Unar

Chcete s námi spolupracovat?

Vaše aplikace roste. Databáze se potí. Jak škálovat PostgreSQL z tisíců na miliony řádků bez přepisu.