PostgreSQL — tavo svetainės ir parduotuvės duomenų bazė
Kiekvienas produktas, užsakymas, lead ir puslapis, kuriuos sukuri 4buildsite platformoje, gyvena PostgreSQL duomenų bazėje. Tau jos administruoti nereikia, bet verta žinoti, kodėl ją pasirinkome: transakcinis vientisumas mokėjimams, beveik 30 metų patikrintas patikimumas ir jokių licencijos kaštų tavo kainoje.
Kas yra PostgreSQL ir ką jis laiko tavo svetainėje
PostgreSQL – reliacinė atvirojo kodo duomenų bazių sistema, nuolat plėtojama nuo 1996 m., kurios šaknys siekia POSTGRES projektą Berkeley universitete (1986). 4buildsite platformoje PostgreSQL yra vieta, kurioje gyvena tavo svetainės duomenys: produktai ir atsargos, užsakymai ir mokėjimai, formų lead’ai ir puslapių turinys. Tu dirbi vizualiniame redaktoriuje, o PostgreSQL saugiai išsaugo kiekvieną pakeitimą.
Kodėl tai svarbu tau, jei nesi programuotojas? Nes skirtumas tarp rimtos ir trapios duomenų bazės išryškėja būtent sunkiomis akimirkomis: srauto šuolis per akciją, du kartus pakartotas mokėjimas, serverio perkrovimas. PostgreSQL sukurtas tokias akimirkas pereiti neprarandant ir nesugadinant duomenų – todėl jį dideliu mastu naudoja tokios įmonės kaip Instagram ir Reddit, o istoriškai jis buvo Skype infrastruktūros pagrindas.
- Produktai, variantai ir atsargos – visas tavo parduotuvės katalogas
- Užsakymai, Stripe mokėjimai ir sąskaitos faktūros – pardavimų istorija be spragų
- Formų lead’ai – kiekviena pasiūlymo užklausa išsaugoma duomenų bazėje
- Puslapių ir šablonų turinys – viskas, ką redaguoji vizualiniame redaktoriuje
- Tavo svetainės domenai, nustatymai ir paskelbtos versijos
Užsakymai ir mokėjimai be sugadintų duomenų – ACID vientisumas
Kai klientas pateikia užsakymą, vienu metu įvyksta keli dalykai: sumažėja atsargos, sukuriamas užsakymas, užregistruojamas Stripe mokėjimas. PostgreSQL juos vykdo kaip vieną transakciją: arba įvyksta viskas, arba nieko. Jei mokėjimas nepavyksta pusiaukelėje, atsargos automatiškai grįžta į pradinę vertę. Šis elgesys vadinamas ACID (Atomicity, Consistency, Isolation, Durability), ir PostgreSQL jį garantuoja bet kuriai lentelei be jokių specialių nustatymų.
Be transakcijų, PostgreSQL vientisumo taisykles užtikrina tiesiai duomenų bazėje: užsakymo eilutė negali nurodyti neegzistuojančio produkto, atsargos negali tapti neigiamos, paskyros el. paštas negali pasikartoti. Šie apribojimai (foreign key, check, unique) sustabdo klaidingus duomenis dar prieš jiems patenkant – o ne po to, kai jie jau sugadino tavo pardavimų ataskaitą.
Prekyvietėms vientisumas svarbus dvigubai: komisiniai ir mokėjimai, padalyti per Stripe Connect, skaičiuojami pagal užsakymo duomenis. Dubliuotas užsakymas ar nenuosekli suma reikštų neteisingai tarp pardavėjų padalytus pinigus. PostgreSQL transakcijos šiuos skaičiavimus išlaiko teisingus – užsakymas po užsakymo.
Greita katalogo paieška ir lankstus turinys
PostgreSQL turi pilnatekstės paieškos variklį: klientai ieško „bėgimo bateliai“ ir randa tinkamus produktus, naudojant stemming žodynus, įskaitant rumunų kalbą. Plėtinys pg_trgm prideda toleranciją rašybos klaidoms. Parduotuvei tai reiškia, kad katalogą galima gerai ieškoti be atskiros Elasticsearch tipo paslaugos – vadinasi, mažiau komponentų, kurie gali sugesti, ir mažesni infrastruktūros kaštai.
Vizualiniame redaktoriuje kuriamų puslapių turinys neturi fiksuotos struktūros – hero blokas, forma ir galerija turi skirtingus laukus. PostgreSQL tai sprendžia su JSONB: saugo natūralų JSON, indeksuojamą GIN indeksais, užklausiamą kaip bet kuris stulpelis. Gauni dokumentų duomenų bazės lankstumą, bet išlaikai reliacinį vientisumą užsakymams ir mokėjimams – toje pačioje sistemoje, o ne dviejose.
- tsvector + stemming žodynai (įskaitant rumunų) – tinkama katalogo paieška
- pg_trgm – klientai randa produktą, net jei suklysta viena raide
- JSONB su GIN indeksais – lankstūs puslapių blokai lieka greitai užklausiami
Patikimumas: atsarginės kopijos ir atkūrimas
PostgreSQL kiekvieną pakeitimą pirmiausia įrašo į žurnalą (WAL – Write-Ahead Log) ir tik tada į pačius duomenis. Jei serveris staiga sustoja, paleidus iš naujo duomenų bazė atkuriama iš žurnalo be sugadintų duomenų. Ant to paties mechanizmo PostgreSQL stato ir atkūrimą į tam tikrą laiko tašką (PITR) – standartinę variklio galimybę įdiegimams, kurie archyvuoja WAL žurnalą. 4buildsite platformoje duomenys laikomi pastoviuose tomuose, atskirtuose nuo programos, todėl platformos perkrovimas ar atnaujinimas jų neliečia.
PostgreSQL palaiko ir streaming replikaciją – sinchronizuotą duomenų bazės kopiją, pasirengusią prireikus perimti srautą. Tavo svetainei duomenų bazės patikimumas svarbus ir SEO: nuolat atsakanti svetainė nuolat nuskaitoma ir indeksuojama, o pasikartojančios 5xx klaidos mažina pozicijas „Google“.
Mastelis ir kaštai – augk be licencijos sąskaitų
Kai parduotuvė auga, kartu auga ir PostgreSQL: indeksai padeda greitai atlikti užklausas kataloguose su šimtais tūkstančių produktų, partitioning skaido užsakymų istoriją pagal laikotarpius, o skaitymo replikos perima ataskaitų srautą. Instagram ir Reddit išplėtė PostgreSQL iki šimtų milijonų naudotojų – internetinė parduotuvė šios technologijos ribas pasiekia daug vėliau, nei manoma.
PostgreSQL turi laisvą licenciją (PostgreSQL License, BSD tipo) – jokių licencijos kaštų ir jokio komercinio savininko, galinčio per naktį pakeisti taisykles. Komercinės duomenų bazės paprastai licencijuojamos pagal procesoriaus branduolį, ir kaina neišvengiamai atsiduria kliento mokamoje kainoje. 4buildsite platformoje duomenų bazė įtraukta į planą kartu su talpinimu ir SSL – be jokio atskiro mokesčio.
Privalumai ir apribojimai
Privalumai
- Pilnos ACID transakcijos – užsakymai ir mokėjimai išlieka nuoseklūs net ir esant klaidoms ar serverio gedimams.
- Patikimumas, įrodytas nuo 1996 m., produkcijoje Instagram, Reddit ir istoriškai Skype.
- Natūralus JSONB – lankstus puslapių turinys neaukojant reliacinio vientisumo.
- Įtaisyta pilnatekstė paieška su rumunų kalbos stemming – katalogo paieška be atskiros paslaugos.
- Laisva licencija – nėra paslėpto licencijos kaštų tavo plano kainoje.
- WAL žurnalas – staiga sustojus serveriui, duomenų bazė paleidus iš naujo atkuriama be sugadintų duomenų.
Apribojimai
- Pažangus administravimas (tuning, replikacija, failover) reikalauja patirties – 4buildsite platformoje tai darome mes, bet savarankiškai talpinamas jis reiklus.
- Rašymai vyksta viename pagrindiniame mazge – paskirstymas keliuose mazguose (sharding) nėra natūralus ir reikalauja papildomų įrankių.
- Kiekviena jungtis sunaudoja palyginti daug atminties – esant daug jungčių reikia pooling (PgBouncer).
- Pilnatekstė paieška gera, tačiau pažangiam tinkamumui ir paieškos pasiūlymams nusileidžia specializuotiems varikliams.
Trumpa išvada
PostgreSQL – standartinis pasirinkimas svetainėms, internetinėms parduotuvėms, prekyvietėms ir SaaS platformoms, kuriose užsakymai, mokėjimai ir lead’ai neturi teisės dingti. Paprastam tinklaraščiui pakaktų ir mažiau, tačiau laisva licencija reiškia, kad 4buildsite platformoje šį saugumo lygį gauni bet kuriuo atveju, be papildomų kaštų.
Specifikacijų lentelė
| Galimybė | Riba / slenkstis | Tipinis naudojimas | |
|---|---|---|---|
| Transakcinis vientisumas | Pilnas ACID + MVCC, bet kuriai lentelei | Labai ilgos transakcijos laiko užrakintus išteklius | Užsakymai, mokėjimai, atsargos |
| JSONB | Natūralus JSON, indeksuojamas su GIN | Labai sudėtingos JSON užklausos lėtesnės nei klasikiniuose stulpeliuose | Puslapių turinys, nustatymai, produktų atributai |
| Pilnatekstė paieška | tsvector + pg_trgm, daugiakalbė (įskaitant rumunų) | Tinkamumas žemesnis nei specializuotų paieškos variklių | Parduotuvės katalogo paieška |
| Atsarginės kopijos ir replikacija | WAL, PITR, streaming replikacija | Automatiniam failover reikia išorinių įrankių (pvz., Patroni) | Atkūrimas po incidentų, aukštas prieinamumas |
| Mastelis | Skaitymo replikos, lentelių partitioning | Rašymai lieka pagrindiniame mazge | Dideli katalogai ir ilgos užsakymų istorijos |
| Kaina | Atvirasis kodas, laisva licencija | Tikrieji kaštai – infrastruktūra ir administravimas | Įtraukta į 4buildsite planus |
PostgreSQL ir MySQL ir MongoDB
| Kriterijus | PostgreSQL | MySQL | MongoDB |
|---|---|---|---|
| ACID vientisumas | Pilnas, bet kuriai lentelei, pagal numatytuosius nustatymus | Pilnas tik su InnoDB varikliu | Kelių dokumentų transakcijos tik nuo v4.0, su apribojimais |
| Duomenų tipai ir JSON | Indeksuojamas JSONB + turtingi tipai (array, range) | Galiojantis JSON, netiesioginis indeksavimas (generuojami stulpeliai) | Natūralūs BSON dokumentai, be primestos schemos |
| Pilnatekstė paieška | Įtraukta: tsvector, pg_trgm, daugiakalbis stemming | Pagrindinė (InnoDB FTS) | Pagrindinė; pažangi versija (Atlas Search) tik komerciniame debesyje |
| Licencija / kaina | PostgreSQL License – laisva, be komercinio savininko | GPL, priklauso Oracle (komercinės laidos) | SSPL – nebe klasikinė atvirojo kodo licencija |
| Ekosistema | Galingi plėtiniai (PostGIS, pgvector), palaikomas visuose ORM | Visur paplitęs klasikiniame PHP/WordPress talpinime | Stiprus su Node.js, siauresnis kitur |
| Tinkamumas e. komercijai | Puikus – nuoseklūs užsakymai, atsargos ir mokėjimai | Geras – istorinis standartas (Magento, WooCommerce) | Lanksčiems kataloguose; užsakymų nuoseklumas reikalauja papildomų pastangų |
Dažniausiai užduodami klausimai
Ar PostgreSQL veikia mano svetainės greitį?
Viešieji puslapiai pateikiami iš Next.js su talpykla, o indeksuotos PostgreSQL užklausos atsako per milisekundes. Suvokiamam greičiui daug didesnę reikšmę turi frontend ir vaizdai.
Kodėl ne WordPress su MySQL, kaip visi?
WordPress – PHP CMS su temomis ir įskiepiais, kuriuos reikia nuolat prižiūrėti ir atnaujinti. 4buildsite generuoja Next.js svetaines su PostgreSQL: be taisytinų įskiepių ir su mažiau saugumo spragų. MySQL nėra blogas pasirinkimas, tačiau PostgreSQL prideda indeksuojamą JSONB, geresnę pilnatekstę paiešką ir griežtesnį vientisumą, su ta pačia laisva licencija.
Kas nutinka mano duomenims, jei serveris sugenda?
PostgreSQL kiekvieną pakeitimą pirmiausia įrašo į WAL žurnalą, todėl paleidus iš naujo duomenų bazė atkuriama be sugadintų duomenų. Be to, duomenys laikomi pastoviuose tomuose, atskirtuose nuo programos, todėl platformos perkrovimas ar atnaujinimas jų neliečia.
Ar galiu eksportuoti savo duomenis, jei išeisiu iš 4buildsite?
Taip. Tavo duomenys yra PostgreSQL – pramonės standartiniame formate; produktus, užsakymus ir klientus galima eksportuoti įprastais formatais (CSV, SQL). Nėra nuosavybinio formato, kuris pririštų prie platformos.
Ar PostgreSQL susidoros, jei mano parduotuvė augs?
Taip, su labai dideliu rezervu. Instagram ir Reddit išplėtė PostgreSQL iki šimtų milijonų naudotojų, naudodami indeksus, partitioning ir skaitymo replikas – tos pačios technikos prieinamos ir 4buildsite platformoje. Internetinė parduotuvė PostgreSQL ribas pasiekia daug vėliau nei savo logistikos ribas.
Kiek man kainuoja PostgreSQL licencija?
Nieko. PostgreSQL turi laisvą licenciją (PostgreSQL License, BSD tipo), be mokesčių už serverį ar branduolį. 4buildsite platformoje duomenų bazė įtraukta į tavo planą kartu su talpinimu ir SSL – už ją atskirai nemoki nieko.