Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: rooobertek 26. 10. 2010, 20:19:01
-
Ahojte
Riešim čo ste určite riešili aj ďalší 1000x - verzovanie databáz.
Pracujem na dvoch projektoch klasika php+mysql. V prvom prípade máme jednu databázu a každý svoju working copy, pracujeme v jednej miestnosti. Druhý prípad je taký, že pracujeme v podstate po celom Slovensku, každý má svoju databázu a working copy. V oboch prípadoch používame subversion.
V prvom prípade db neverzujeme vôbec, v druhom prípade síce verzujeme, ale nemáme v tom žiadny systém. Je to totálny bordel. Aj tak sa musíme kontaktovať mailom a upozorniť na zmeny v db. Pravdupovediac, nenapadá mi, ako do toho systém zaviesť.
Ako to robíte vy?
-
V RoR jsou na tohleto migrace (http://guides.rubyonrails.org/migrations.html) plus exportované schema db ve stejném zápisu, které se nechá verzovat společně se zbytkem kódu. Pro PHP byste mohl najít něco podobného, nebo napsat vlastní.
-
pokial ide o kod, preco nepouzivate git? svn je uz vycerpany prezitok:)
-
V oboch prípadoch je svn hyperluxus :) Nabudúce určite skúsim niečo novšie.
Tie migrations vyzerajú výborne, ale v projekte, kde ešte len trochu zavádzam objekty do kódu písaného za raných čias php4 by to bolo už moc :) A hlavne je to robota navyše, ktorú kolegov nedonútim robiť.
-
svn je hyperluxus do tý doby, než např. přesuneš jeden adresář jinam (včetně debilního .svn podadresáře) apod - vrátit to pak do funkčního stavu je opruz.
Jinak, co se týče verzování, tak buďto dump databáze, nebo zmíněné migrace
(můžou bejt např. realizovaný i jednoduchym upgrade skriptem), nrbo sofistikovanější systém alá railsy.
Imho nejlepší přístup je mít databázi podobně jako třídy rozdělenou po tabulkách nebo alespoň (v postgres) po schématech a přistupovat k verzování úplně stejně jako se přistupuje k verzování zdrojáků.
-
Tie upgrade skripty ako by som tam mal ukladať? Dátum zmeny? Verzia? Nejaké poradové číslo? Teraz tam máme zmes súborov pomenovaných zhruba podľa popisu zmeny, ale zrejme niektorým kolegom dochádza predstavivosť, tak dopisujú do tých súborov a je z toho chaos.
2. bolo by teoreticky možné napísať skript, ktorý by z diffu dvoch dumpov vedel spoľahlivo robiť tie upgrady?
-
heh, svn ako hyperluxus:D vazne skus git, potom uvidis intergalaktickymegahyperluxus:D ale teraz vazne. spominal si aj kod, preto som ti na to odporucil tento nastroj. co sa db tyka, hm, no mozno aj tie dumpy by sli. s gitom potom trivialna vec. treba si len ozrejmit system a dodrziavat ho. pred skoncenim prace pushnut do repa a rano na zaciatku pullnut. vsetko veci na sekundy:) a mozno by sa to dalo aj zautomatizovat. ale urcite by som uvazoval nad gitom. jednoznacne:)
-
U nas ma kazdy dev svoj branch a svoju working copy... Avsak kazdu zmenu db layoutu musia dat do db_layout update sql suboru... S tym potom riesia svoj branch a ked maju svoje upravy dokoncene ziadaju o schvaldenie ich db layout uprav.
Samotna prod databaza obsahuje tabulky v ktorych su uvedene vsetky doteraz aplikovane upravy.
Nasli si proste nejaky system aj na db... Kod je v csv alebo gite ale zeby mali nieco podobne aj na db si nemyslim.
-
Tie upgrade skripty ako by som tam mal ukladať?
no je tisíc možností. Od nejhloupější varianty jednoho obrovskýho dumpu - kdy prostě provedeš merge dvou souborů a občas to budeš muset řešit rúčo, po systém, kdy je databáze rozdělená např. po tabulkách - málokdy se sejdou updaty stejnejch tabulek (imho nejčistší řešení), nebo kdy má každej vývojář "svoje" soubory (např. ve tvaru datum.vyvojar.sql) a skript je pak provede ve spravnym pořadí.
Klíčovej je IMHO pohled: "správný" je to, co je v souborech jako definice struktury, nikoli to, co je reálně v databázi (stejně jako člověk nepovažuje za správnej stav zkompilovanej zdroják).
-
Da sa pouzit javovsky opensource DbDeploy http://dbdeploy.com/ v kombinacii s Phingom.
-
Zrovna vo včerajšej Sklizni je popísaný Another PostgreSQL Diff Tool:
http://www.root.cz/clanky/softwarova-sklizen-27-10-2010/#apgdiff
-
apgdiff vyzerá fajne, ale som zvedavý, čo to spraví s mysql dumpom. Ak by sa mi moc chcelo, spravím fork :)
-
Samozrejme existuje nejeden diff pre mysql, stačí použiť google než vytiahneš ťažkú artilériu.