Prvo, ja bi gledao da mi dizajn bude kako treba. To je osnovno. Baze podataka se dizajniraju u skladu sa normalnim formama. 3./BC minimum 4. izuzetno pozeljno. Denormalizacija se radi, ali, posto prvo uradis normalnu bazu. Po meni, tako treba poceti, znam da je agile reci samo YAGNI i ici sa ORM-om, ali, po meni, ako projekat ima ikakve sanse da naraste, tj. ako baza nije samo storage - treba odvojiti vreme.
Drugo, Bogdan mi je jednom ovo rekao, sto sam mnogo dobro zapamtio "Denormalizaciju radis kad si siguran i obavezno zapises STA si uradio i ZASTO jer ce ti trebati to za par godina"... parafraziram. :) Nadam se da ce on da se ukljuci, zna mnogo vise o bazi od mene. :)
Trece, kad su baze pocele da se koriste, nije bilo clustera. Zato su isle dinamicke forme, kao EAV model. Ti u EAV modelu, kad hoces da dodas cipele ne dodajes u tabelu "predmet" kolonu "broj cipela" alterom, ti samo dodas atribut "broj cipela" u tabelu atributa, "46" u tabelu vrednosi i srucis za cieple broj 46 par slogova u vezne tabele. Ova sema, osim sto smanjuje kolicinu date i normalizuje podatke ima i prednosta da omogucava dodavanje osobina bez altera.
Kad si sve sto mozes iscrpeo, a moras da imas alter, onda gledas resenja specificna za bazu. Ja cu sad preci na MySQL njega najvise koristim za ovakve stvari:
MySQL replikacija ima zgodnu foru da, ako uradis alter na slave-u, tako da alterom dodajes kolonu NA KRAJ tabele (obavezno vodis racuna kad pises alter) replikacija ce nastaviti da radi. U bilo kom slozenom sistemu, gde imas master i bar dva slave-a, ti mozes bez problema da napravis alter na slave-ovima, proglasiss jedan od njih za novi master, i onda uradis alter na preostaloj masini. Malo je igranka i radi se u krug, ali tako mozes da radis alter tabele i od 100GB bez da ista pukne ili lockuje. Sve dok ne pises nista u te kolone (a ne pises, jer ti je master na starom do poslednjeg trenutka), imaces neki mali downtime jedne od masina, imaces dosta posla - ali sama aplikacija ce videti konzistentnu bazu sve vreme.
Ovo je inace i jako dobra fora po pitanju index-a. Neki indexi ti ne trebaju na masteru, vec npr. samo na slave-u na koji pustas npr. upite za OLAP (obicno je ovo dedicated slave). Da bi ustedeo I/O, ti mozes da imas taj index samo na tom slave-u. Mozda ce on malo da kasni u replikaciji, ali ako imas up i down periode sajta mozes da obezbedis da nikad ne kasni previse - posebno za OLAP koji relano nikad nema problem dok su podaci tu do npr. jucerasnjih.
Ja jako volim devops metodologiju, zato se i bunim kad tako zovu radno mesto. Ovakve stvari su na primer nesto sto se tesko automatizuje i zahteva malo vise manuelnog rada. Proceduru je, sto ja najbitnije, moguce imati vrlo lepo definisanu, kao neki playbook (ne ansible, vec onaj starinski... dokument u nekom wikiju), ali neke stvari je jako tesko napraviti kroz kod.
Nisam pristalica toga da alter znaci da je baza lose projektovana, najcesce to vidjam kad klijent, posle 6 meseci, shvati da on zapravo ne zeli blog o angus govecetu, vec da to treba da bude prodavnica elektricnih trotineta, jer to je samo par izmena, vi cete sve to kompijuterski.... :D. Ono sto mislim je da relacione baze nisu sustinski pogodne za microservices model rada i nece biti dok se ne obezbedi kompletan decouple same baze na microservices, dok se persistent storage ne decouple-uje od api-ja, i dok storage ne postane, kao sto je za sve ostalo, beskonacno brz. (U praksi sve ispod 1ms je beskonacno brzo... ako trosim maximalno 10,000 IOPS-a u piku, meni je storage od 100,000 IOPS-a beskonacno brz... ).. Kako se to realno nece desiti, jer baza nikad nece biti stateless (ne moze, posao joj je da cuva state - zato je baza), plus ce data uvek biti mnogo, mislim da cemo jos dugo vremena ziveti sa relacionim bazama i njihovim osobinama.....
Naravno, imas uvek alternative, tipa prave big data sisteme, gde sve drzis u fajlovima, sve je schemaless, decoupled... ali ti sistemi imaju brdo svojih problema, jednostavno ne mozes da imas finansijske podatke u parquet formatu fajlova i da radis upite kroz HBase ili Hive - trebaju ti odgovori brzo, trebaju ti indexi, trebaju ti transakcije i lockovanje, to su sve stvari direktno vezane za state - i to je glavni razlog zasto ne mozes da imas sve "moderno".
Please do not feed the Trolls!
Blasphemy? How can I blaspheme? I'm a god!'