Jump to content
php.lv forumi

Datubāzes versijkontroles risinājumi


Zefirs

Recommended Posts

Crude variants - dumpi un diff. Normālais variants - proxis starp db un klientu, kas reģistrē shēmas izmaiņas un veido drošas migrācijas ar datu rezerves kopēšanu. Sev pats rakstīju, jo analogu internetā neatradu. Šis un percona tools. Tādu offscale pirmo reizi dzirdu. Neuzticētu es tādam produkciju.

 

Also, neuzticētu db instrumentiem kas paši kaut ko dara savā nodabā. Es pirms produkcijas vienmēr pārbaudu katras izmaiņas db lai nenodropētu vajadzīgus datus.

 

Man drausmīgi kaitina pārsarežģītas lietas. Rakstīt kodā DB shēmu vai izmantot kaut kādu XML? Thanks, but no thanks. 

 

Iz pieredzes, bija mums te sistēma CMS kas salīdzināja db dumpus ar datubāzi un ieviesa shēmas izmaiņas (lasi - automātiskas migrācijas no shēmas dumpiem). Gadījās vienreiz noglabāts nedaudz vecāks dumps, kur lietotāju paroļu fieldi bija md5 char32. Produkcijā bija jau sen uzlikts crypt sha512. Attiecīgi ielādējot sistemu ar vecāku dumpu viss aizgāja pa pieskari un produkcijas paroles N tūkstošiem lietotāju tika nograizītas. Labi, ka pirms tam biju atcerējies uztaisīt backup un nobloķēt sistēmu lietotājiem. 

Link to comment
Share on other sites

Versiju kontrolē veidoju direktoriju MySql, kur saglabāju SQL skriptu failus, ar kuriem tiek veiktas jebkādas db izmaiņas. Failu nosaukums: YYYYMMDD_[nosaukums].sql.

Ja vienā reizē vairākas izmaiņas, taisu direktoriju, kurā numurēju sql failus pēc izpildes secības: 01_car_alter.sql, 02_invoice_add_index.sql.

 

Vēl DB varētu izveidot tabulu, kurā automātiski reģistrējas izpildītie SQL skripti.

Link to comment
Share on other sites

Manuprāt ļoti labs variants ir ģenerēt shēmas no konfigurāciju failiem vai modeļiem un pa tiešo db shēmām nepieķerties nekad.

Tādā veidā versiju kontrolē būs šie faili, no kuriem jebkurā bridī var uzģenerēt pareizi db shēmu.

Kā ar migrāciju no versijas 1.1 uz 1.2?

Link to comment
Share on other sites

Ja pareizi saprotu, ka runa ir par db objektu instalāciju, klasifikatoru un konfigurācijas datiem, tad veidojot jaunu db:

- db tabulas, indeksi, procedūras, jebkāds cits db objekts - create skripts

- dati - insert skripti

 

Taisot patchu: 

- db objekti - alter, drop, create

- dati - update, delete, insert

 

Manā iestādē mēs paralēli uzturam pilnu instalācijas komplektu, t.i., jebkurā brīdī var uztaisīt visu no jauna ar skriptiem, tai skaitā db objektus + sākotnējos kls un konfigurācijas datus.

Kopš iepriekšējās versijas izmaiņas kā aprakstīts taisot patchu.

 

Attiecīgi to visu var glabāt jebkurā versiju kontroles rīkā un salīdzināt, analizēt, ko nu katram vajag.

 

 

Link to comment
Share on other sites

Kā ar migrāciju no versijas 1.1 uz 1.2?

Atļaušos atbildēt. Ir vismaz 2 varianti:

1) Būt pietiekami disciplinētam un kodējot jebkurām shēmas izmaiņām uzreiz rakstīt ALTER skriptus, vai nu citu kas tur nepieciešams.

2) Ja tas kaut kādu iemeslu dēļ nav iespējams, tad var salīdzināt 2 shēmas un manuāli vai automātiski ģenerēt izmaiņu skriptu. Google iesitot compare schema mysql var dabūt optom variantus, sākot jau ar MySQL paša rīku mysqldbcompare. Protams, ka tas prasa uzturēt sākotnējo shēmu (piemēram, kā testa vidi), bet nu puslīdz normāla programmēšanas pieeja to prasa jebkurā gadījumā :)

Edited by Gints Plivna
Link to comment
Share on other sites

ORM netiek izmantots dēļ performance

Un cik tad tu bieži raksti large scale applications ? 

ORMs ļoti palīdz samazinat izstrādes laiku.

Ja aplikācija kļūst large scale (kas ne vienmēr notiek, pat ja klients uz to cer), ir iespēja to sākt optimizēt lielākajos bottleneck punktos.

Link to comment
Share on other sites

Var jau neizmantot to orm, bet rakstīt tajā datubāzes tabulu struktūru un tālāk jau laist plikus kverijus.

Jā par šo arī iedomājos. Tas darbojas, ja sistēma jāveido no 0, bet esošas sistēmas pārnest uz orm ir dažreiz neiespējami. Relācijas, atslēgu veidošana no foreign key utt., ir neiespējami realizēt uz dažādiem orm. Katram sava blusa ir.  Bet tā risinājums ideāls attiecīgajos gadījumos.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...