PostgreSQL — sinu saidi ja e-poe andmebaas
Iga toode, tellimus, lead ja leht, mille 4buildsite'is loood, elab PostgreSQL-i andmebaasis. Sa ei pea seda ise haldama — aga tasub teada, miks me selle valisime: tehinguline terviklikkus maksete jaoks, peaaegu 30 aastaga tõestatud töökindlus ja null litsentsikulu sinu hinnas.
Mis on PostgreSQL ja mida see sinu saidis hoiab
PostgreSQL on relatsiooniline avatud lähtekoodiga andmebaasisüsteem, mida arendatakse pidevalt alates 1996. aastast — juured ulatuvad Berkeley ülikooli projekti POSTGRES (1986) juurde. 4buildsite'is on PostgreSQL koht, kus elavad sinu saidi andmed: tooted ja laoseisud, tellimused ja maksed, vormidest tulnud lead'id ja lehtede sisu. Sina töötad visuaalses redaktoris; PostgreSQL hoiab iga muudatuse turvaliselt alles.
Miks see sulle loeb, kui sa ei ole programmeerija? Sest vahe tõsise ja habras andmebaasi vahel ilmneb just rasketel hetkedel: liiklustipp kampaania ajal, kaks korda korratud makse, serveri taaskäivitus. PostgreSQL on kavandatud neist hetkedest läbi tulema ilma andmeid kaotamata või rikkumata — seetõttu kasutavad seda suures mahus sellised ettevõtted nagu Instagram ja Reddit ning ajalooliselt oli see Skype'i infrastruktuuri aluseks.
- Tooted, variandid ja laoseisud — sinu e-poe täielik kataloog
- Tellimused, Stripe'i maksed ja arved — müügiajalugu ilma aukudeta
- Vormidest tulnud lead'id — iga hinnapäring salvestatakse garanteeritult
- Lehtede ja mallide sisu — kõik, mida visuaalses redaktoris muudad
- Sinu saidi domeenid, seaded ja avaldatud versioonid
Tellimused ja maksed ilma rikutud andmeteta — ACID-terviklikkus
Kui klient teeb tellimuse, juhtub korraga mitu asja: laoseis väheneb, luuakse tellimus, registreeritakse Stripe'i makse. PostgreSQL täidab need ühe tehinguna: kas juhtub kõik või mitte midagi. Kui makse ebaõnnestub poole peal, taastub laoseis automaatselt algsele väärtusele. Seda käitumist nimetatakse ACID-iks (Atomicity, Consistency, Isolation, Durability) ja PostgreSQL garanteerib selle igal tabelil ilma erilise seadistuseta.
Lisaks tehingutele jõustab PostgreSQL terviklikkusereeglid otse andmebaasis: tellimusrida ei saa viidata olematule tootele, laoseis ei saa muutuda negatiivseks, konto e-posti aadressi ei saa dubleerida. Need piirangud (võõrvõtmed, check, unique) peatavad vigased andmed enne sisenemist — mitte pärast seda, kui need on sinu müügiaruande ära rikkunud.
Turuplatsidel on terviklikkus kahekordselt oluline: Stripe Connecti kaudu jagatud vahendustasud ja maksed arvutatakse tellimuse andmete põhjal. Dubleeritud tellimus või ebaühtlane summa tähendaks müüjate vahel valesti jagatud raha. PostgreSQL-i tehingud hoiavad need arvutused õigena, tellimus tellimuse haaval.
Otsing kataloogis ja paindlik sisu
PostgreSQL sisaldab täistekstiotsingu mootorit: kliendid otsivad „jooksujalatsid“ ja leiavad sobivad tooted, stemming-sõnastikega, sh rumeenia keele jaoks. Laiendus pg_trgm lisab tolerantsi trükivigade suhtes. E-poe jaoks tähendavad need võimalused, et kataloogis saab hästi otsida ilma eraldi Elasticsearchi-tüüpi teenuseta — seega on vähem komponente, mis võivad tõrkuda, ja väiksem infrastruktuurikulu.
Visuaalses redaktoris ehitatud lehtede sisul pole kindlat struktuuri — hero-plokil, vormil ja galeriil on erinevad väljad. PostgreSQL lahendab selle JSONB-ga: salvestab natiivset JSON-i, indekseeritav GIN-indeksitega, päritav nagu iga veerg. Saad dokumendiandmebaasi paindlikkuse, kuid säilitad tellimuste ja maksete relatsioonilise terviklikkuse — samas süsteemis, mitte kahes.
- tsvector + stemming-sõnastikud (rumeenia keel kaasa arvatud) — asjakohane otsing kataloogis
- pg_trgm — kliendid leiavad toote ka siis, kui eksivad ühe tähega
- JSONB GIN-indeksitega — paindlikud lehteplokid jäävad kiirelt päritavaks
Töökindlus: varukoopia, taastamine ja null üllatust
PostgreSQL kirjutab iga muudatuse esmalt logisse (WAL — Write-Ahead Log) ja alles seejärel tegelikesse andmetesse. Kui server peatub ootamatult, ehitatakse andmebaas taaskäivitusel logist üles, ilma rikutud andmeteta. Samale mehhanismile ehitab PostgreSQL ka punktipõhise taastamise (PITR) — mootori standardvõimekus WAL-logi arhiveerivate paigalduste jaoks. 4buildsite'is asuvad andmed püsivatel köidetel, rakendusest eraldi, seega platvormi taaskäivitus või uuendus neid ei puuduta.
PostgreSQL toetab ka striimivat replikatsiooni — andmebaasi sünkroonitud koopiat, mis on vajaduse korral valmis liiklust üle võtma.
Skaleerimine ja kulud — kasva ilma litsentsiarveteta
Kui e-pood kasvab, kasvab PostgreSQL sellega kaasa: indeksid hoiavad päringud kiired sadade tuhandete toodetega kataloogides, partitsioonimine jagab tellimuste ajaloo perioodideks ning lugemisreplikad võtavad üle aruannete liikluse. Instagram ja Reddit on PostgreSQL-iga skaleerunud sadade miljonite kasutajateni — veebipood jõuab selle tehnoloogia piirideni palju hiljem, kui arvatakse.
PostgreSQL-il on vaba litsents (PostgreSQL License, BSD-tüüpi) — ilma litsentsikuludeta ja ilma kommertsomanikuta, kes saaks reegleid üleöö muuta. Kommertsandmebaase litsentsitakse tavaliselt protsessorituuma kohta ning kulu jõuab paratamatult kliendi makstavasse hinda. 4buildsite'is on andmebaas plaani sisse arvatud, koos hostingu ja SSL-iga — ilma eraldi tasuta.
Eelised ja piirangud
Eelised
- Täielikud ACID-tehingud — tellimused ja maksed jäävad ühtseks ka vigade või serveritõrgete korral.
- Tõestatud töökindlus alates 1996. aastast, tootmises Instagramis, Redditis ja ajalooliselt Skype'is.
- Natiivne JSONB — paindlik lehesisu relatsioonilist terviklikkust ohverdamata.
- Sisseehitatud täistekstiotsing rumeenia keele stemmingu toega — otsing kataloogis ilma eraldi teenuseta.
- Vaba litsents — sinu plaani hinnas pole peidetud litsentsikulu.
- WAL-logi — serveri ootamatul peatumisel ehitatakse andmebaas taaskäivitusel üles ilma rikutud andmeteta.
Piirangud
- Täpsem haldus (tuning, replikatsioon, failover) nõuab kogemust — 4buildsite'is teeme seda meie, aga ise majutatuna on see nõudlik.
- Kirjutamised toimuvad ühel esmasel sõlmel — mitmele sõlmele jaotamine (sharding) pole natiivne ja nõuab lisatööriistu.
- Iga ühendus tarbib suhteliselt palju mälu — paljude ühenduste korral on vaja pooling'ut (PgBouncer).
- Täistekstiotsing on hea, kuid jääb erimootoritele alla täpsema asjakohasuse ja otsinguvihjete osas.
Lühike kokkuvõte
PostgreSQL on standardvalik saitide, veebipoodide, turuplatsside ja SaaS-platvormide jaoks, kus tellimusi, makseid ja lead'e ei tohi kaduda. Lihtne blogi saaks hakkama ka vähemaga — aga vaba litsents tähendab, et 4buildsite'is saad sellise turvataseme ikkagi lisakuluta.
Spetsifikatsioonide tabel
| Võimekus | Piir / lävi | Tüüpiline kasutus | |
|---|---|---|---|
| Tehinguline terviklikkus | Täielik ACID + MVCC, igal tabelil | Väga pikad tehingud hoiavad ressursse lukus | Tellimused, maksed, laoseisud |
| JSONB | Natiivne JSON, GIN-iga indekseeritav | Väga keerukad JSON-päringud on aeglasemad kui klassikalistel veergudel | Lehtede sisu, seaded, tooteatribuudid |
| Täistekstiotsing | tsvector + pg_trgm, mitmekeelne (rumeenia keel kaasa arvatud) | Asjakohasus jääb erimootoritele alla | Otsing e-poe kataloogis |
| Varukoopia ja replikatsioon | WAL, PITR, striimiv replikatsioon | Automaatne failover vajab väliseid tööriistu (nt Patroni) | Taastamine intsidentide järel, kõrge käideldavus |
| Skaleerimine | Lugemisreplikad, tabelite partitsioonimine | Kirjutamised jäävad esmasele sõlmele | Suured kataloogid ja tellimuste ajalugu |
| Kulu | Avatud lähtekood, vaba litsents | Tegelik kulu on infrastruktuur ja haldus | Sisaldub 4buildsite'i plaanides |
PostgreSQL vs MySQL vs MongoDB
| Kriteerium | PostgreSQL | MySQL | MongoDB |
|---|---|---|---|
| ACID-terviklikkus | Täielik, igal tabelil, vaikimisi | Täielik ainult InnoDB-mootoriga | Mitme dokumendi tehingud alles versioonist 4.0, piirangutega |
| Andmetüübid ja JSON | Indekseeritav JSONB + rikkalikud tüübid (array, range) | Kehtiv JSON, kaudne indekseerimine (genereeritud veerud) | Natiivsed BSON-dokumendid, ilma pealesurutud skeemita |
| Täistekstiotsing | Sisaldub: tsvector, pg_trgm, mitmekeelne stemming | Põhiline (InnoDB FTS) | Põhiline; täiustatud variant (Atlas Search) ainult kommertspilves |
| Litsents / kulu | PostgreSQL License — vaba, ilma kommertsomanikuta | GPL, Oracle'i omandis (kommertsväljaanded) | SSPL — pole enam klassikaline avatud lähtekoodiga litsents |
| Ökosüsteem | Võimsad laiendused (PostGIS, pgvector), tugi kõigis ORM-ides | Kõikjal klassikalises PHP/WordPressi hostingus | Tugev Node.js-is, mujal piiratum |
| Sobivus e-kaubandusele | Suurepärane — tellimused, laoseisud ja maksed garanteeritult ühtsed | Hea — ajalooline standard (Magento, WooCommerce) | Paindlike kataloogide jaoks; tellimuste ühtsus nõuab lisaaega ja -vaeva |
Korduma kippuvad küsimused
Kas PostgreSQL mõjutab minu saidi kiirust?
Avalikke lehti serveeritakse Next.js-ist vahemäluga ning indekseeritud PostgreSQL-i päringud vastavad millisekundites. Tüüpilise saidi või e-poe mahus ei ole andmebaas tavaliselt kitsaskoht — tajutava kiiruse jaoks loevad palju rohkem esiots ja pildid.
Miks mitte WordPress MySQL-iga, nagu kõik teised?
WordPress on PHP-põhine CMS teemade ja pluginatega, mida tuleb pidevalt hooldada ja uuendada. 4buildsite genereerib Next.js-saite PostgreSQL-iga: ilma paigatavate pluginateta ja vähemate turvaaukudega. MySQL pole halb valik — aga PostgreSQL lisab indekseeritava JSONB, parema täistekstiotsingu ja rangema terviklikkuse, samas vabas litsentsis.
Mis juhtub minu andmetega, kui server kukub?
PostgreSQL kirjutab iga muudatuse esmalt WAL-logisse, seega ehitatakse andmebaas taaskäivitusel üles ilma rikutud andmeteta — ootamatu serveritõrge ei riku sinu tellimusi. Lisaks asuvad andmed püsivatel köidetel, rakendusest eraldi, seega platvormi taaskäivitus või uuendus neid ei puuduta.
Kas ma saan oma andmed eksportida, kui 4buildsite'ist lahkun?
Jah. Sinu andmed asuvad PostgreSQL-is, mis on tööstuse standardvorming — tooteid, tellimusi ja kliente saab eksportida tavapärastesse vormingutesse (CSV, SQL). Pole omandivormingut, mis sind platvormi külge lukustaks.
Kas PostgreSQL saab hakkama, kui minu pood kasvab?
Jah, väga suure varuga. Instagram ja Reddit on PostgreSQL-iga skaleerunud sadade miljonite kasutajateni, kasutades indekseid, partitsioonimist ja lugemisreplikaid — samu tehnikaid, mis on saadaval ka 4buildsite'is. Veebipood jõuab PostgreSQL-i piirideni palju hiljem kui oma logistika piirideni.
Kui palju PostgreSQL-i litsents mulle maksab?
Mitte midagi. PostgreSQL-il on vaba litsents (PostgreSQL License, BSD-tüüpi), ilma serveri- või tuumapõhiste tasudeta. 4buildsite'is on andmebaas sinu plaani sisse arvatud, koos hostingu ja SSL-iga — selle eest ei maksa sa eraldi midagi.