Baze podataka bez magle

Koje vrste baza podataka postoje

18 min
What you'll learn
  • razlikovati pet obitelji baza — relacijske, ključ-vrijednost, dokumentne, stupčane, grafovske — po načinu pohrane i tipičnim zadacima
  • birati spremište prema naravi upita: relacijska baza po zadanome, a Redis/MongoDB/ClickHouse za konkretan zadatak, a ne „jer je u modi”
  • objasniti razliku između -a i -a i zašto proizvod piše u PostgreSQL, a analitika čita iz stupčane replike
  • prepoznati „dokumentnu” potrebu koju u PostgreSQL-u pokriva stupac jsonb bez druge baze

Na putu do popisa QUERY usporava kraj tamne sekcije spremišta. Iza stakla je registar arhiva stare Zemlje koji nisu preživjeli Veliki Lom: predmemorijski čvorovi ugasili su se prvi, dokumentna spremišta stigla su u poderanim ulomcima, analitički klasteri šute u čitavim sektorima. A relacijska snimka Kotomarketa preživjela je u cijelosti — sa svim vezama.

Ne samo relacijske

Za Kotomarket osobito su nam zgodne relacijske baze: kupci, narudžbe i proizvodi prirodno se slažu u tablice s vezama. Upravo su njima posvećene ove lekcije. No u industriji — i 2024. i danas — susreću se i drugi pristupi:

  • ključ-vrijednost (Redis) — vrlo brz format „ključ → vrijednost”, kad jednostavan zapis treba dohvatiti istog trena;
  • dokumentno orijentirane (MongoDB) — čuvaju fleksibilne dokumente, u kojima se struktura može razlikovati od zapisa do zapisa;
  • stupčane (ClickHouse) — snažne u analitici, kad treba brzo izračunati pokazatelje nad golemim količinama podataka.

Većina popularnih -ova za razvoj proizvoda ostaje relacijska: PostgreSQL, MySQL, Oracle, MS SQL. Svladaš li SQL ovdje, moći ćeš pouzdano čitati podatke u vrlo različitim tvrtkama.

QUERY: Svakom arhivu svoj posao: jednima brzina, drugima fleksibilnost, trećima analitika. Tebi i meni se posrećilo: zapao nas je onaj u kojem je sve povezano sa svime.

Tamna galerija ugaslih arhiva stare Zemlje raznih oblika; na njezinu kraju u cijelosti svijetli relacijski hologram od povezanih tablica
Spremišta su različita: ključ-vrijednost, dokumenti, stupci. Naša preživjela snimka je relacijska: tablice i veze.

Not only relational

For Kotomarket, relational databases suit us especially well: buyers, orders, and products fall naturally into tables with links between them. That’s what this course is about. But across the industry — in 2024 just as today — you’ll meet other approaches too:

  • key-value (Redis) — a blazingly fast "key → value" format for when you need to grab a simple record instantly;
  • document-oriented (MongoDB) — stores flexible documents whose structure can differ from record to record;
  • columnar (ClickHouse) — strong at analytics, when you need to crunch metrics over enormous volumes of data fast.

Most of the popular DBMSs for product development stay relational: PostgreSQL, MySQL, Oracle, MS SQL. Master SQL here and you’ll be able to read data confidently at very different companies.

QUERY: Each archive has its own job: one prizes speed, another flexibility, a third analytics. You and I got lucky: we inherited the one where everything is connected to everything.

Registar obitelji: redom na police

Registar iza stakla povod je da se obitelji baza podataka razlože ozbiljno: „koje vrste baza postoje i kad koju uzeti” jedno je od najčešćih pitanja na razgovorima za posao. Proći ćemo kroz pet obitelji zaredom, a svaku po istoj shemi: način pohrane, jake i slabe strane, proizvodi i kad je uzeti.

Relacijske baze: stroga shema i veze

Način pohrane: redci u tablicama s unaprijed objavljenom shemom — svaki stupac ima tip, među tablicama vrijede veze po ključevima, a sam čuva cjelovitost: narudžbu od nepostojećeg kupca neće biti moguće zapisati. Izmjene se izvršavaju transakcijama s jamstvima — „narudžba + otpis zalihe” ili se zapišu zajedno ili se ne zapišu uopće.

users — a tableidPKintegerfull_nametextcitytextsignup_datedate123Artyom VolkovEkaterina AlekseevNikolay NikitinSaint PetersburgYekaterinburgAlmaty2024-10-202025-01-252024-09-21rows are records · columns are typed properties · there can be just one table
U temelju relacijske baze je tablica: redci-zapisi i stupci sa svojim tipom. Veze po ključevima dolaze povrh toga, a tablica može biti i samo jedna.
usersidnameproductsidtitleordersiduser_idproduct_idFK → PKproducts · banking · ordersPostgreSQL · MySQL
A kad je tablica više — povezuju se ključevima: stroga shema i veze među tablicama.
  • Jake strane: izražajan SQL (filtri, spajanja tablica, agregati), cjelovitost na razini baze, transakcije.
  • Slabe: shemu treba osmisliti unaprijed i migrirati pri izmjenama; horizontalno skaliranje na mnogo poslužitelja teže ide nego kod obitelji.
  • Proizvodi: PostgreSQL, MySQL/MariaDB, Microsoft SQL Server, Oracle, SQLite.
  • Kad je uzeti: korisnici, narudžbe, novac, skladište — svugdje gdje su podaci povezani i pogreška pri zapisivanju nije dopuštena. Za novi proizvod to je zadani izbor.

Baze ključ-vrijednost: rječnik na najvećoj brzini

Način pohrane: jedan golemi rječnik „ključ → vrijednost”, najčešće u radnoj memoriji. Ni tablica ni veza: spremiš po ključu — dohvatiš po ključu u djeliću milisekunde.

-- Ovo nije SQL, ovo su naredbe Redisa
SET session:8f3a '{"user_id": 42}'
GET session:8f3a
keyvalueuser:42Anna · Moscowcart:42[milk, cheese]sess:9factive until 18:40lookup by key — instantcache · sessions · carts — Redis
Ključ-vrijednost: trenutačan pristup po točnom ključu — i nikakvih upita „po sadržaju”.
  • Jake strane: brzina, jednostavnost, lako skaliranje.
  • Slabe: upiti samo po točnom ključu — pitanje „nađi sve sesije kupaca iz Moskve” ovom se formatu ne može postaviti; nutrina vrijednosti za bazu je neprozirna.
  • Proizvodi: Redis, Memcached, Amazon DynamoDB.
  • Kad je uzeti: predmemorija, sesije, brojači, redovi, ljestvice — vrući podaci uz glavnu bazu, a ne umjesto nje.

Dokumentne baze: fleksibilan JSON

Način pohrane: zapisi su dokumenti grupirani u kolekcije. Shema se ne objavljuje unaprijed: pametni sat ima polje „trajanje baterije”, hudica ima „tablicu veličina”, i oba dokumenta mirno leže u istoj kolekciji. Ugniježđene strukture čuvaju se izravno unutar dokumenta, bez zasebnih tablica.

document 1document 2{name: "Mouse",price: 390,tags: ["hit"]}{name: "Food",brand: "Kote",specs: {weight: "2 kg"}}fields and nesting differ — schema is flexiblecatalogs · profiles · CMS — MongoDB
Dokumentni model: fleksibilni JSON dokumenti s različitim skupom polja žive u jednoj kolekciji.
  • Jake strane: fleksibilna struktura, dokument se cijeli čita jednim dohvatom, zgodno za kataloge s raznorodnim atributima i za brze prototipe.
  • Slabe: veze među dokumentima briga su aplikacije, punopravnog -a gotovo da nema; bez discipline se kolekcija pretvori u zoološki vrt nespojivih formata.
  • Proizvodi: MongoDB, Couchbase, Firestore.
  • Kad je uzeti: sadržaj, katalozi s vrlo različitim poljima, profili i postavke.

Granica među obiteljima, usput, mutna je: PostgreSQL zna čuvati dokumente u stupcu tipa jsonb i graditi indekse nad njima — često to pokriva „dokumentnu” potrebu bez druge baze:

-- Primjer izvan naše snimke: attrs — stupac tipa jsonb
SELECT name, attrs->>'color' AS color
FROM catalog
WHERE attrs @> '{"brand": "Kotomarket"}';

Stupčane baze: analitika nad milijardama redaka

Način pohrane: vrijednosti ne leže po retku, nego po stupcu: sve cijene — jedna uz drugu, svi datumi — jedan uz drugi. Upit „prosječan iznos po mjesecima” čita s diska samo dva stupca umjesto cijele tablice, a istovrsne se vrijednosti izvrsno sažimaju. Otud brzina na agregatima.

-- Omiljeni žanr stupčane baze (dijalekt ClickHousea: toYYYYMM — njegova funkcija)
SELECT toYYYYMM(created_at) AS month, avg(total_amount) AS avg_check
FROM orders
GROUP BY month;
columnar storage: the table is laid out by columnsuser_ideventpricets39029905901490990AVG(price): only one column is readevent analytics · metrics — ClickHouse
Stupčana pohrana: agregat čita s diska samo potrebne stupce, a ne cijelu tablicu redak po redak.
  • Jake strane: agregati i skeniranje milijardi redaka, snažno sažimanje.
  • Slabe: točkasta ažuriranja i brisanja skupa su; pročitati jedan redak u cijelosti — sporije je nego u retčanoj bazi; transakcijsko opterećenje — za takvo opterećenje nisu namijenjene.
  • Proizvodi: ClickHouse, BigQuery, Snowflake, Amazon Redshift.
  • Kad je uzeti: analitika, izvještaji, događaji, dnevnici, metrike — obično uz „borbenu” relacijsku bazu.

Tu su i dva pojma koja se vole na razgovorima za posao: (online processing — mnogo kratkih operacija zapisivanja i čitanja, svijet PostgreSQL-a) i (online analytical processing — teška analitička čitanja po cijeloj povijesti, svijet ClickHousea). Proizvod piše u OLTP bazu, a analitika čita OLAP kopiju.

I posljednja obitelj — grafovske baze

Kad su veze važnije od samih zapisa — „prijatelji prijatelja”, dostavni pravci, lanci preporuka — uzimaju se grafovske baze (Neo4j, Memgraph). Podaci su u njima čvorovi (to su zapisi) i bridovi (to su veze među zapisima); obilazak veza bilo koje dubine prirodna je operacija. U relacijskoj bazi takav obilazak su ljestve od spajanja tablica koje s dubinom postaju sve teže.

friendAnnBobCaraDanEvenodes are records, edges are links; "friends of friends" = two edges away
Graf: kružići-čvorovi su zapisi (npr. ljudi), linije-bridovi su veze među njima. „Prijatelji prijatelja” jednostavno su prijelaz po bridovima.

Mini-vodič: kako odabrati bazu za projekt

  1. Kreni od pitanja, a ne od podataka. Koje će upite postavljati proizvod: točkaste „po ključu”, vezane „tko je što kupio”, analitičke „koliko za mjesec”?
  2. Po zadanome — relacijska. Povezani podaci plus cijena pogreške (narudžbe, plaćanja, zalihe) — to je PostgreSQL. Najsigurniji početak gotovo za svaki proizvod.
  3. Specijalizirane baze — za konkretan zadatak, a ne „za svaki slučaj”. Pritišću li vruća čitanja — dodaj predmemoriju na Redisu. Narasla je analitika — repliciraj događaje u ClickHouse. Divlja raznolikost polja — najprije jsonb u PostgreSQL-u, a tek kad on ne bude dovoljan — dokumentna baza.
  4. Računaj cijenu druge baze. Svaki novi znači sinkronizaciju podataka, sigurnosne kopije, nadzor i još jednu tehnologiju koju tim mora održavati.

Zamka: birati bazu „po modi”. „Uzmimo MongoDB — bez sheme je brže” završi tako da shemu ipak projektiraju, samo što njezina pravila sada žive u kodu aplikacije, a ne pod zaštitom baze. Postoji i obrnuta zamka: vući ClickHouse za količine koje PostgreSQL agregira u milisekundama. Baza se bira prema naravi upita i cijeni pogreške — ne prema hajpu.

ClickHouse je stupčani za analitiku: vole ga zbog brzih izračuna nad velikim tablicama događaja i narudžbi. Ima vlastiti SQL dijalekt; na platformi postoji zaseban trenažer za ClickHouse. A naša je snimka relacijska: dalje QUERY otvara popis i pokazuje od čega je sastavljena — tablice, redci i niti-ključevi među njima.

Interview question

Pitanje s razgovora za posao: koje vrste baza podataka poznaješ i kako bi odabrao spremište za novu uslugu?

Snažan odgovor: relacijske (PostgreSQL, MySQL) — stroga shema, veze, transakcije; ključ-vrijednost (Redis) — predmemorija, sesije, brojači; dokumentne (MongoDB) — fleksibilni dokumenti; stupčane (ClickHouse, BigQuery) — analitika nad velikim količinama; grafovske (Neo4j) — duboke veze. U izboru polazim od naravi upita: izvorom istine činim relacijsku bazu, a specijalizirane priključujem za konkretan zadatak (predmemorija, analitika), a ne umjesto nje.

Dodatno pitanje: po čemu se razlikuje od -a?

Snažan odgovor: OLTP — mnogo kratkih transakcija zapisivanja i čitanja (oblikovanje narudžbi), retčani -ovi poput PostgreSQL-a; OLAP — teška analitička čitanja i agregati po povijesti, stupčani DBMS-ovi poput ClickHousea. Često rade u paru: proizvod piše u OLTP, a analitika čita OLAP repliku.

Check yourself
Koju vrstu baze obično biraju za analitiku velikih količina podataka?