---
id: 2bc35fc657eb35eb5dbcb7286c1033ba
author: gosunuts
title: 'Databázové servery a embedded databázy: porovnanie architektúry a charakteristík I/O'
description: Porovnávame nezávislé RDBMS založené na samostatných procesoch a vnorené databázy bežiace v rámci procesu aplikácie, ako sú SQLite, RocksDB, BadgerDB a PebbleDB, z hľadiska latencie I/O operácií na NVMe SSD, izolácie dát v architektúre MSA a štruktúry nasadenia.
language: sk
date: 2025-08-21T12:11:23.268337247Z
path: /blog/posts/database-servers-and-embedded-databases-zd4cb799f
category: database
---

## Databázový server

Databázový server je databáza, ktorá beží ako samostatný serverový proces a spracúva požiadavky aplikácií prostredníctvom siete. Väčšina RDBMS, ktoré nám sú známe, ako MySQL, PostgreSQL alebo Oracle DB, patrí k tomuto modelu. Databázový server má nasledujúce výhody.

- **Centralizovaná správa**: Dáta sú spravované na jednom mieste, čo uľahčuje zachovanie konzistencie, zabezpečenie, zálohovanie a obnovu.
- **Nezávislosť zdrojov**: Databázový server má pridelené vlastné CPU, pamäť a úložisko, vďaka čomu zabezpečuje stabilný výkon bez ohľadu na stav aplikácie.
- **Vysoká súbežnosť a škálovateľnosť**: Je optimalizovaný pre súbežný prístup mnohých používateľov a horizontálne škálovanie prostredníctvom klastrovania alebo replikácie je pomerne jednoduché.

Vďaka týmto vlastnostiam sa databázový server za posledné desaťročia etabloval ako štandard softvérovej infraštruktúry. Vplyvom technologického vývoja a zmien prostredia sa však v niektorých prostrediach začali prejavovať nevýhody databázového servera, a preto sa ako ich alternatíva opäť dostáva do popredia vnorená databáza.

## Nový trend: vnorená databáza

Vnorená databáza je databázový engine, ktorý nevyžaduje samostatný serverový proces, je zahrnutý v aplikácii ako knižnica a beží v rámci rovnakého procesu. Typickými príkladmi vnorených databáz sú SQLite, LevelDB a RocksDB. Dôvody, prečo sa vnorené databázy v súčasnom technologickom prostredí stali silnou alternatívou, sú nasledovné.

- **Nástup SSD**

  V systémovom prostredí zameranom na HDD bol výkon náhodného prístupu výrazne nižší v porovnaní s výkonom sekvenčného čítania a zápisu dát. Preto bolo kľúčom k optimalizácii výkonu minimalizovať diskové I/O operácie a maximalizovať využitie pamäťovej cache. Databázové servery sa tomu prispôsobili prevádzkou rozsiahlej cache a spracovaním zápisových operácií dávkovo, čím prekonávali fyzické obmedzenia HDD.

  Nástup SSD však tento predpoklad úplne zmenil. SSD má výkon náhodného I/O až tisíckrát vyšší ako HDD a jeho latencia je výrazne nižšia. V dôsledku toho zanikol zaužívaný názor, že „diskové I/O je najväčšou prekážkou“, a naopak, latencia spôsobená vzdialeným prístupom k databázovému serveru cez sieť sa začala javiť ako nová úzka hrdlo.

- **MSA a nezávislosť dát**

  V minulosti bola typickou štruktúrou jedna veľká monolitická aplikácia závislá od jedinej centralizovanej databázy. Tento prístup bol jednoduchý, no s rastúcim rozsahom služieb sa ťažšie menila dátová schéma a všetky služby zdieľajúce rovnakú databázu boli príliš previazané.

  V moderných architektúrach mikroservisov sa na riešenie týchto problémov kladie dôraz na princíp „Database per Service“. Každá služba vlastní a zapuzdruje svoje vyhradené dátové úložisko, čím sa zabezpečuje nezávislosť medzi službami a uľahčuje sa izolácia porúch a škálovanie. V tomto kontexte sa vnorená databáza stáva ideálnou voľbou pre dátové úložisko na úrovni služby. Je ľahká a rýchla a môže byť nasadená spolu s kódom služby, vďaka čomu sa výborne hodí do prostredia MSA.

  Typicky sa v prostredí Kubernetes používa vzor sidecar, pri ktorom sa vnorená databáza umiestni vedľa kontajnera aplikácie s cieľom optimalizovať lokálne spracovanie dát. Tento prístup znižuje sieťové úzke hrdlá a minimalizuje latenciu prístupu k dátam.

- **Zjednodušenie prevádzkového prostredia**

  Databázový server vyžaduje zložité prevádzkové postupy, ako sú inštalácia, aktualizácie, zálohovanie, obnova po haváriách, replikácia a monitorovanie výkonu, a na ich zabezpečenie sú nevyhnutní vyhradení DBA a odborný prevádzkový personál. Najmä vo veľkých prostrediach je táto správcovská záťaž veľmi vysoká.

  Vnorená databáza tieto problémy výrazne zmierňuje. Keď je databáza integrovaná v rámci aplikácie, unit testy, zostavovanie, správa verzií a nasadenie prebiehajú spoločne, a preto nie je potrebná samostatná prevádzka servera. Okrem toho sa pri horizontálnom škálovaní aplikácie škáluje aj vnorená databáza a umožňuje sa automatizovaná správa prostredníctvom kultúry DevOps a CI/CD pipeline. Najmä v startupoch, malých službách a vývojových prostrediach pre prototypy vnorená databáza výrazne znižuje prevádzkovú zložitosť a výrazne zvyšuje rýchlosť vývoja a nasadenia.

- **Vysokovýkonné systémové jazyky a rozvoj ekosystému**

  V minulosti sa databáza a aplikácia bežne písali v rôznych jazykoch. Napríklad databázové engine vyžadujúce vysoký výkon sa väčšinou písali v jazykoch C a C++, zatiaľ čo aplikácie sa vyvíjali v jazykoch ako Java, Python alebo PHP. Tento spôsob bol účinný pri optimalizácii výkonu, no mal obmedzenia v podobe problémov s bezpečnosťou pamäte, zložitým spracovaním súbežnosti, latenciou a ťažkosťami s integráciou knižníc a nasadením.

  Nedávny nástup moderných systémových programovacích jazykov, ako sú Go a Rust, however, tieto obmedzenia výrazne zmiernil. Go je najmä vhodný nielen na vysokovýkonné aplikácie, ale aj na písanie nízkoúrovňových programov, ako sú databázové engine, čo umožňuje pracovať s databázou a aplikáciou v rámci jedného jazykového ekosystému.

  V jazyku Golang sa skutočne aktívne používajú vysokovýkonné vnorené databázy, ako sú [BadgerDB](https://github.com/hypermodeinc/badger) a [PebbleDB](https://github.com/cockroachdb/pebble). To znamená, že vnorené databázy už nie sú len ľahkou alternatívou k databázovým serverom, ale stali sa významnou voľbou s vlastnou konkurenčnou silou.

## Záver

Pri požiadavkách na centralizovanú správu rozsiahlych dát, komplexné transakcie a vysokú súbežnosť zostáva databázový server najsilnejším riešením. Avšak v jednotlivých službách architektúry MSA, na IoT edge zariadeniach, pri rýchlom prototypovaní a v projektoch, kde je dôležitá prevádzková efektívnosť, sa vnorená databáza môže stať efektívnejšou a rozumnejšou voľbou. Podstatné je v konečnom dôsledku zvoliť optimálny nástroj, ktorý najlepšie zodpovedá danej situácii a požiadavkám, a vývoj vnorených databáz nám ponúka širší a rozmanitejší výber možností.
