Kur iš tiesų yra duomenų bazės schema
Šiame straipsnyje
Viskas, ką daro ši paslauga, yra versijų valdyme. Bent jau kodas. Duomenų bazę, kuria ji remiasi, sudaro 32 lentelės, o 15 jų saugykloje niekur neturi apibrėžties — jokio CREATE TABLE, jokio schemos failo, nieko. Išklotinė atkuria visas 32 su nepažeista struktūra; ko saugykla neturi – antros, nepriklausomos tos struktūros kopijos.
Šie skaičiai gauti lyginant veikiančią duomenų bazę su 736 failais ir 5 671 710 saugyklos ženklų. Tai ne spėjimas.
Kaip dingsta pusė schemos
Tai ne aplaidumas – būtent todėl verta užrašyti. Kiekvienas atskiras žingsnis buvo pagrįstas.
Lentelės, sukurtos dar iki dabartinio kodo, niekada neužrašytos, nes tuo metu jos tiesiog buvo. Vėliau pridėtos lentelės atėjo per migracijų scenarijus, o tie scenarijai yra saugykloje — iš ten ir 17 apibrėžčių. Vėliau pridėti stulpeliai pridėti vienos eilutės ALTER TABLE komanda, įvesta komandų eilutėje, nes tai buvo greičiau nei rašyti scenarijų sekundę trukusiam pakeitimui.
Indeksai – blogiausias atvejis. Indeksas pridedamas, kai kas nors lėta, tą pačią akimirką, ir iš karto pataiso problemą. Nelieka jokio darbo rezultato, nieko peržiūrėti, nieko, kas sugestų jį pamiršus. Vienuolika iš trisdešimt dviejų čia esančių antrinių indeksų egzistuoja būtent dėl to ir niekur neužfiksuoti.
Lentelė, sauganti pačius skaitiklius, 166 438 jų eilutes, yra viena iš penkiolikos be apibrėžties saugykloje.
Kas iš tiesų sugenda
Nedaug, iki vienos konkrečios akimirkos: kai duomenų bazė atkuriama iš išklotinės.
Išklotinė turi struktūrą, todėl paprastas atkūrimas tinkamas. Pavojus – kiekvienas kelias, kuris lentelę perkuria, o ne atkuria — persikėlimas į kitą kompiuterį, pasirinktų lentelių importas, vienos perkūrimas iš scenarijaus. Duomenys grįžta, o indeksai tyliai ne. Niekas nesugenda. Užklausos grąžina teisingus atsakymus. Jos tik trunka ilgiau, o priežastis nematoma, nes vienintelis įrašas, koks indeksas buvo, yra kompiuteris, kuris jo nebeturi.
Būtent tokį gedimą verta įvardyti: trūkstamas indeksas nesukelia klaidos, jis sukuria lėtesnį teisingą atsakymą. Tam nėra testo, nes testai sėkmingi.
Ką kol kas darome
Šiandien schemos saugykloje nėra – tai tikslus būsenos aprašymas. Esamos priemonės siauresnės už visą pataisymą ir apima tą atvejį, kuris iš tiesų kainuoja:
Išklotinė prieš bet ką destruktyvaus, laikoma už žiniatinklio šaknies ribų. Atkūrimas, bent kartą iš tiesų atliktas, o ne tik numanytas. Ir trumpas sąrašas indeksų, kurie, kaip žinoma, egzistuoja tik veikiančioje duomenų bazėje, tikrinamas po kiekvieno atkūrimo — nes kompiuterio galima paklausti, kokius indeksus jis turi, ir atsakymą palyginti su ankstesniu.
Bendroji versija taikoma ne tik duomenų bazėms. Jei sistemos dalis egzistuoja tik veikiančioje sistemoje, antros jos kopijos nėra. Apie bet kurią infrastruktūros dalį verta klausti ne ar ji turi atsarginę kopiją, o ko nepavyktų perkurti iš saugyklos dingus kompiuteriui. Čia atsakymas – penkiolika lentelių ir vienuolika indeksų; tai nustatyti truko popietę, ir dabar tai sąrašas, o ne nežinomybė.
Atnaujinta 2026 m. rugsėjį
Praėjus penkioms dienoms po šio įrašo, darbinis katalogas įtrauktas į pakeitimų istoriją: 26 failai ir 4 058 eilutės, tarp jų vienuolika migracijų scenarijų, parašytų nuo rugpjūčio 28 iki rugsėjo 1 d., kurie iki tol buvo tik veikiančiame kompiuteryje. Tai lengvoji pusė — kodas, kuris buvo parašytas, bet niekada neužfiksuotas.
Matavimas pakartotas 2026 m. rugsėjo 1 d. tuo pačiu būdu: veikianti duomenų bazė prieš viską, ką seka git.
| Lentelės | 46 | 30 turi CREATE TABLE saugykloje, 16 neturi |
| Antriniai indeksai | 43 | 32 sukuriami saugyklos kodu, 11 tik veikiančioje duomenų bazėje |
| Migracijų scenarijai | 109 | versijų valdyme |
Svarbusis skaičius nepasikeitė. Rugpjūčio 27 d. vienuolika antrinių indeksų egzistavo tik veikiančioje duomenų bazėje. Rugsėjo 1 d. jų vis dar vienuolika. Tarp tų datų pridėta dar vienuolika indeksų, ir kiekvienas atėjo su migracijos scenarijumi: įprotis pasikeitė, skola – ne.
Tie vienuolika yra penkiose lentelėse — skaitiklių, kalbų, nukreipiančių puslapių, neįtraukimo sąrašo ir įvykių žurnalo. Visos penkios senesnės už dabartinį kodą, todėl joms niekas niekada neužrašyta. Parašyti failą dabar reikštų iš veikiančio serverio atkurti tai, kas prieš daugelį metų įvesta komandų eilutėje.
Todėl rugpjūčio padėtis lieka. Schemos vis dar nėra saugykloje, o atkūrimas, perkurdamas lentelę, užuot ją atkūręs, vis dar tyliai prarastų vienuolika indeksų. Pakeitimas siauresnis: viskas, kas nuo tada pridėta, paliko failą.