Kus andmebaasi skeem tegelikult asub
Sisust ja selle ülevaatamisest
Selles artiklis
Kõik, mida see teenus teeb, on versioonihalduses. Vähemalt kood on. Andmebaas, mille peal see töötab, koosneb 32 tabelist ja 15 tabelil pole repositooriumis kusagil definitsiooni — pole CREATE TABLEega skeemifaili ega midagi. Tõmmis taastab kõik 32 struktuuriga terviklikuna; repositooriumis ei ole selle struktuuri teist, sõltumatut koopiat.
Need arvud tulevad töötava andmebaasi võrdlemisest 736 faili ja 5 671 710 tähemärgiga repositooriumist. Need ei ole hinnang.
Kuidas pool skeemi kaob
See ei ole hooletus ja just seetõttu tasub see üles kirjutada. Iga üksik samm oli mõistlik.
Tabeleid, mis loodi enne praeguse koodibaasi olemasolu, ei kirjutatud kunagi üles, sest sel ajal olid need lihtsalt olemas. Sestpeale lisatud tabelid tulid migratsiooniskriptidega ja need skriptid on repositooriumis — sealt tulevadki need 17 definitsiooni. Hiljem lisatud veerud lisati ühe realise ALTER TABLE käsuga, mis trükiti käsureale, sest trükkimine oli kiirem kui skripti kirjutamine muudatuse jaoks, mis võttis sekundi.
Indeksid on halvim juhtum. Indeks lisatakse siis, kui miski on aeglane, hetkel, kui see on aeglane, ja see parandab probleemi kohe. Järele ei jää artefakti, midagi ülevaatamiseks, midagi, mis ebaõnnestub, kui see unustatakse. Üksteist kolmekümne kahest sekundaarsest indeksist on siin täpselt sel põhjusel ja neid ei ole kusagil salvestatud.
Tabel, mis hoiab loendureid endid, 166 438 rida, on nende viieteistkümne seas, millel pole repositooriumis definitsiooni.
Mis tegelikult katki läheb
Mitte palju, kuni ühe konkreetse hetkeni: kui andmebaas taastatakse tõmmisest.
Tõmmis kannab struktuuri, nii et otsene taastamine on korras. Oht on mis tahes tee, mis taastamise asemel ehitab tabeli uuesti — teisele masinale kolimine, valitud tabelite importimine, ühe taasloomine skriptist. Andmed tulevad tagasi ja indeksid vaikselt mitte. Miski ei ebaõnnestu. Päringud annavad õigeid vastuseid. Need võtavad lihtsalt kauem aega ja põhjus on nähtamatu, sest ainus kirje selle kohta, mis indeks oli, on masin, mida enam pole.
See on rikkerežiim, mida tasub nimetada: puuduv indeks ei põhjusta viga, vaid aeglasema õige vastuse. Selle jaoks ei ole testi, sest testid läbivad.
Mida me vahepeal teeme
Skeemi ei ole täna repositooriumis ja see on oleku täpne kirjeldus. Paigas on kitsam kui täielik parandus ja see katab juhtumi, mis tegelikult maksab:
Tõmmis enne kõike hävitavat, hoitud veebijuurest väljas. Taastamine, mis on vähemalt korra tegelikult tehtud, mitte eeldatud. Ja lühike loend, mida kontrollitakse pärast iga taastamist, indeksitest, mis teadaolevalt eksisteerivad ainult töötavas andmebaasis — sest masinalt saab küsida, millised indeksid tal on, ja vastust saab võrrelda viimase korraga, kui küsiti.
Üldine versioon kehtib enamale kui andmebaasidele. Kui osa süsteemist eksisteerib ainult töötavas süsteemis, pole sellel teist koopiat. Küsimus, mida tasub esitada mis tahes infrastruktuuri kohta, ei ole, kas see on varundatud, vaid mida ei saaks repositooriumist uuesti ehitada, kui masin kaoks. Siin on vastus viisteist tabelit ja üksteist indeksit, selle väljaselgitamine võttis pärastlõuna ja see on loend, mitte teadmata.
Uuendus, september 2026
Viis päeva pärast selle postituse ilmumist kommiti töökataloog: 26 faili ja 4 058 rida, nende hulgas üksteist migratsiooniskripti, mis kirjutati 28. augusti ja 1. septembri vahel ja mis olid seni olemas ainult töötaval masinal. See oli lihtsam pool — kood, mis oli kirjutatud, aga mitte kunagi salvestatud.
Mõõtmist korrati 1. septembril 2026 samamoodi: töötav andmebaas kõige vastu, mida git jälgib.
| Tabelid | 46 | 30 tabelil on CREATE TABLE repositooriumis, 16 tabelil pole |
| Sekundaarsed indeksid | 43 | 32 loodud repositooriumi koodiga, 11 ainult töötavas andmebaasis |
| Migratsiooniskriptid | 109 | versioonihalduses |
Arv, mis loeb, ei liikunud. 27. augustil eksisteeris üksteist sekundaarset indeksit ainult töötavas andmebaasis. 1. septembril on neid ikka üksteist. Vahepeal lisati veel üksteist indeksit ja iga ühega kaasnes migratsiooniskript: harjumus muutus, võlg mitte.
Need üksteist asuvad viiel tabelil — loendurid, keeled, viitajad, välistusnimekiri ja sündmuslogi. Kõik viis on vanemad kui praegune koodibaas, mistõttu polegi nende kohta kunagi midagi üles kirjutatud. Faili kirjutamine praegu tähendaks töötavast serverist rekonstrueerimist seda, mis aastaid tagasi käsureale trükiti.
Nii et augusti seis kehtib. Skeem ei ole ikka repositooriumis ja taastamine, mis ehitab tabeli uuesti selle asemel, et seda taastada, kaotaks ikka üksteist indeksit sõnagi lausumata. Muutunud on kitsam: kõik, mis on sestpeale lisatud, on jätnud faili maha.