{"id":30878,"date":"2019-10-31T21:37:56","date_gmt":"2019-10-31T18:37:56","guid":{"rendered":"https:\/\/prohoster.info\/blog\/tranzaktsii-i-mehanizmy-ih-kontrolya\/"},"modified":"2019-10-31T21:37:56","modified_gmt":"2019-10-31T18:37:56","slug":"tranzaktsii-i-mehanizmy-ih-kontrolya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/tranzaktsii-i-mehanizmy-ih-kontrolya","title":{"rendered":"Transaksionet dhe mekanizmat e tyre t\u00eb kontrollit","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h2>Transaksionet<\/h2>\n<p><\/p>\n<h4>Nj\u00eb transaksion quhet nj\u00eb sekuenc\u00eb operacionesh mbi t\u00eb dh\u00ebna q\u00eb ka nj\u00eb fillim dhe nj\u00eb fund.<\/h4>\n<p>\nTransaksioni \u00ebsht\u00eb ekzekutimi i renditur i operacioneve t\u00eb leximit dhe shkruarjes. P\u00ebrfundimi i transaksionit mund t\u00eb jet\u00eb ose ruajtja e ndryshimeve (komitimi, commit) ose anulimi i ndryshimeve (ripelodhja, rollback). N\u00eb lidhje me databazat, transaksioni p\u00ebrfshin disa k\u00ebrkesa, t\u00eb cilat interpretohen si nj\u00eb k\u00ebrkes\u00eb e vetme.<\/p>\n<h4>Transaksionet duhet t\u00eb p\u00ebrmbushin pronat ACID.<\/h4>\n<p>\nAtohem. Nj\u00eb transaksion ose kryhet plot\u00ebsisht ose nuk kryhet fare.<\/p>\n<p>Konsistenca. N\u00eb p\u00ebrfundim t\u00eb transaksionit, nuk duhet t\u00eb shkelet asnj\u00eb kufizim i vendosur mbi t\u00eb dh\u00ebnat (p.sh. constraints n\u00eb databaz\u00eb). Konsistenca do t\u00eb thot\u00eb q\u00eb sistemi do t\u00eb kaloj\u00eb nga nj\u00eb gjendje e sakt\u00eb n\u00eb nj\u00eb tjet\u00ebr gjendje t\u00eb sakt\u00eb.<\/p>\n<p>Izolimi. Transaksionet q\u00eb ekzekutohen paralelisht nuk duhet t\u00eb ndikojn\u00eb nj\u00ebra-tjetr\u00ebn, p.sh. t\u00eb ndryshojn\u00eb t\u00eb dh\u00ebnat q\u00eb p\u00ebrdor nj\u00eb tjet\u00ebr transaksion. Rezultati i ekzekutimit t\u00eb transaksioneve paralelisht duhet t\u00eb jet\u00eb nj\u00ebsoj si n\u00ebse transaksionet do t\u00eb ekzekutoheshin rend\u00ebsisht.<\/p>\n<p>Q\u00ebndrueshm\u00ebria. Pas komitimit, ndryshimet nuk duhet t\u00eb humben.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Ditaari i Transaksioneve.<\/h2>\n<p><\/p>\n<h4>Ditaari ruan ndryshimet e kryera nga transaksionet, siguron atomaritetin dhe q\u00ebndrueshm\u00ebrin\u00eb e t\u00eb dh\u00ebnave n\u00eb rast d\u00ebshtimi t\u00eb sistemit.<\/h4>\n<p>\nDitaari p\u00ebrmban vlerat q\u00eb t\u00eb dh\u00ebnat kishin para dhe pas ndryshimit nga transaksioni. Strategjia e shkall\u00ebzimit t\u00eb avancuar obligon shtimin e nj\u00eb regjistrimi n\u00eb ditar p\u00ebr vlerat e m\u00ebparshme p\u00ebrpara fillimit, dhe p\u00ebr ato p\u00ebrfundimtare pas p\u00ebrfundimit t\u00eb transaksionit. N\u00eb rast t\u00eb ndaljes s\u00eb papritur t\u00eb sistemit t\u00eb databaz\u00ebs, kjo lexon ditarin n\u00eb rend t\u00eb kund\u00ebrt dhe anullon ndryshimet e b\u00ebra nga transaksionet. Kur has nj\u00eb transaksion t\u00eb nd\u00ebrprer\u00eb, databaza e kryen at\u00eb dhe e regjistron ndryshimin n\u00eb ditar. Duke qen\u00eb n\u00eb gjendjen e momentit t\u00eb d\u00ebshtimit, databaza lexon ditarin n\u00eb rend t\u00eb drejtp\u00ebrdrejt\u00eb dhe rikthen ndryshimet e b\u00ebra nga transaksionet. K\u00ebshtu ruhet q\u00ebndrueshm\u00ebria e transaksioneve q\u00eb tashm\u00eb jan\u00eb komituar dhe atomariteti i transaksionit t\u00eb nd\u00ebrprer\u00eb.<\/p>\n<p>P\u00ebrs\u00ebritja e thjesht\u00eb e transaksioneve me gabime nuk \u00ebsht\u00eb e mjaftueshme p\u00ebr rikuperim. <\/p>\n<p><i>Shembull. N\u00eb llogarin\u00eb e p\u00ebrdoruesit ka 500$ dhe p\u00ebrdoruesi vendos t\u00eb t\u00ebrheq\u00eb ato p\u00ebrmes nj\u00eb bankomati. Kryhen dy transaksione. E para lexon vler\u00ebn e bilancit dhe n\u00ebse ka mjaft fonde, i jep parat\u00eb p\u00ebrdoruesit. E dyta heq nga bilanci shum\u00ebn e nevojshme. Supozoni se ndodhi nj\u00eb defekt i sistemit dhe operacioni i par\u00eb nuk u realizua, nd\u00ebrsa i dyti u realizua. N\u00eb k\u00ebt\u00eb rast, ne nuk mund ta japim p\u00ebrs\u00ebri parat\u00eb p\u00ebrdoruesit pa e kthyer sistemin n\u00eb gjendjen e tij fillestare me nj\u00eb bilanc pozitiv.<\/i><\/p>\n<h2>Niveli i izolimit<\/h2>\n<p><\/p>\n<h4>Leximi i t\u00eb dh\u00ebnave t\u00eb fikshuara (Read Committed)<\/h4>\n<p>\nProblemi i leximit t\u00eb ndotur (Dirty Read) q\u00ebndron n\u00eb faktin se nj\u00eb transaksion mund t\u00eb lexoj\u00eb rezultatin p\u00ebrkoh\u00ebsisht t\u00eb nj\u00eb transaksioni tjet\u00ebr.<\/p>\n<p><i>Shembull. Vlera fillestare e bilancit \u00ebsht\u00eb 0$. T1 shton 50$ n\u00eb bilanc. T2 lexon vler\u00ebn e bilancit (50$). T1 anulon ndryshimet dhe p\u00ebrfundon. T2 vazhdon me ekzekutimin duke poseduar t\u00eb dh\u00ebna t\u00eb pasakta p\u00ebr bilancin.<\/i><\/p>\n<p>Zgjidhja \u00ebsht\u00eb leximi i t\u00eb dh\u00ebnave t\u00eb fikshuara (Read Committed) q\u00eb ndalon leximin e t\u00eb dh\u00ebnave t\u00eb ndryshuara nga nj\u00eb transaksion. N\u00ebse transaksioni A ndryshon nj\u00eb grup t\u00eb dh\u00ebnash, at\u00ebher\u00eb transaksioni B kur k\u00ebrkon k\u00ebto t\u00eb dh\u00ebna \u00ebsht\u00eb i detyruar t\u00eb pres\u00eb p\u00ebr p\u00ebrfundimin e transaksionit A.<\/p>\n<h4>Leximi i p\u00ebrs\u00ebritur (Repeatable Read)<\/h4>\n<p>\nProblemi i ndryshimeve t\u00eb humbura (Lost Updates). T1 ruan ndryshimet mbi ndryshimet e T2.<\/p>\n<p><i>Shembull. Vlera fillestare e bilancit \u00ebsht\u00eb 0$ dhe dy transaksione e plot\u00ebsojn\u00eb bilancin nj\u00ebkoh\u00ebsisht. T1 dhe T2 lexojn\u00eb bilancin e barabart\u00eb me 0$. M\u00eb pas T2 shton 200$ n\u00eb 0$ dhe ruan rezultatin. T1 shton 100$ n\u00eb 0$ dhe ruan rezultatin. Rezultati p\u00ebrfundimtar \u00ebsht\u00eb 100$ n\u00eb vend t\u00eb 300$.<\/i><\/p>\n<p>Problemi i leximit t\u00eb pap\u00ebrs\u00ebritsh\u00ebm (Unrepeatable read). Leximi i nj\u00ebjtave t\u00eb dh\u00ebna p\u00ebrs\u00ebri kthen vlera t\u00eb ndryshme.<\/p>\n<p><i>Shembull. T1 lexon vler\u00ebn e bilancit q\u00eb \u00ebsht\u00eb 0$. M\u00eb pas T2 shton 50$ n\u00eb bilanc dhe p\u00ebrfundon. T1 lexon t\u00eb dh\u00ebnat p\u00ebrs\u00ebri dhe zbulon nj\u00eb mos p\u00ebrputhje me rezultatin e m\u00ebparsh\u00ebm.<\/i><\/p>\n<p>Leximi i p\u00ebrs\u00ebritur (Repeatable Read) garanton q\u00eb leximi p\u00ebrs\u00ebri do t\u00eb kthej\u00eb t\u00eb nj\u00ebjtin rezultat. T\u00eb dh\u00ebnat e lexuara nga nj\u00eb transaksion nuk lejohen t\u00eb ndryshohen nga t\u00eb tjera deri n\u00eb p\u00ebrfundimin e transaksionit. N\u00ebse transaksioni A lexon nj\u00eb grup t\u00eb dh\u00ebnash, at\u00ebher\u00eb transaksioni B kur i drejtohet k\u00ebtyre t\u00eb dh\u00ebnave \u00ebsht\u00eb i detyruar t\u00eb pres\u00eb p\u00ebr p\u00ebrfundimin e transaksionit A.<\/p>\n<h4>Leximi i renditur (Serializable)<\/h4>\n<p>\nProblemi i leximit fantazm\u00eb (Phantom Reads). Dy k\u00ebrkesa q\u00eb zgjedhin t\u00eb dh\u00ebna sipas nj\u00eb kushti \u00e7ojn\u00eb n\u00eb rezultate t\u00eb ndryshme.<\/p>\n<p><i>Shembulli. T1 k\u00ebrkon numrin e t\u00eb gjitha p\u00ebrdoruesve t\u00eb cil\u00ebt kan\u00eb nj\u00eb bilanc mbi 0$ por n\u00ebn 100$. T2 heq 1$ nga p\u00ebrdoruesi me nj\u00eb bilanc prej 101$. T1 ekzekuton p\u00ebrs\u00ebri k\u00ebrkes\u00ebn.<\/i><\/p>\n<p>Leximi i renditur (Serializable). Transaksionet ekzekutohen si plot\u00ebsisht t\u00eb renditura. Ndalohet p\u00ebrdit\u00ebsimi dhe shtimi i regjistrimeve q\u00eb bien n\u00ebn kushtet e k\u00ebrkes\u00ebs. N\u00ebse transaksioni A ka k\u00ebrkuar t\u00eb dh\u00ebnat e t\u00eb gjith\u00eb tabel\u00ebs, at\u00ebher\u00eb tabela e t\u00ebr\u00eb ngrihet p\u00ebr transaksionet e tjera deri n\u00eb p\u00ebrfundimin e transaksionit A.<\/p>\n<h2>Planifikuesi (Scheduler)<\/h2>\n<p><\/p>\n<h4>Vendos rendin n\u00eb t\u00eb cilin duhen ekzekutuar operacionet kur transaksionet ndodhin nj\u00ebkoh\u00ebsisht.<\/h4>\n<p>\nSiguron nivelin e caktuar t\u00eb izolimit. N\u00ebse rezultati i ekzekutimit t\u00eb operacioneve nuk varet nga rendi i tyre, at\u00ebher\u00eb k\u00ebto operacione jan\u00eb komutative (Permutable). Operacionet e leximit dhe operacionet mbi t\u00eb dh\u00ebna t\u00eb ndryshme jan\u00eb komutative. Operacionet e leximit-shkruaj dhe shkruaj-shkruaj nuk jan\u00eb komutative. Detyra e planifikuesit \u00ebsht\u00eb t\u00eb alternoj\u00eb operacionet e kryera nga transaksionet paralele, n\u00eb m\u00ebnyr\u00eb q\u00eb rezultati t\u00eb jet\u00eb ekuivalent me ekzekutimin e renditur t\u00eb transaksioneve.<\/p>\n<h2>Mekanizmat e kontrollit t\u00eb detyrave paralele (Concurrency Control)<\/h2>\n<p><\/p>\n<h4>Optimistike bazuar n\u00eb zbulimin dhe zgjidhjen e konflikteve, pesimiste n\u00eb parandalimin e shfaqjes s\u00eb konflikteve.<\/h4>\n<p>\nMe qasjen optimiste, disa p\u00ebrdorues marrin kopje t\u00eb t\u00eb dh\u00ebnave. I pari q\u00eb p\u00ebrfundon redaktimin ruan ndryshimet, nd\u00ebrsa t\u00eb tjer\u00ebt duhet t\u00eb realizojn\u00eb nj\u00eb bashkim t\u00eb ndryshimeve. Algoritmi optimist lejon q\u00eb konflikti t\u00eb ndodh\u00eb, por sistemi duhet t\u00eb rikuperohet pas konfliktit.<\/p>\n<p>Me qasjen pesimiste, p\u00ebrdoruesi i pari q\u00eb kap t\u00eb dh\u00ebnat pengon t\u00eb tjer\u00ebt nga marrja e t\u00eb dh\u00ebnave. N\u00ebse konfliktet jan\u00eb t\u00eb rralla, \u00ebsht\u00eb \u0440\u0430\u0437\u0443\u043c\u043d\u043e t\u00eb zgjidhni strategjin\u00eb optimiste, pasi ajo siguron nj\u00eb nivel m\u00eb t\u00eb lart\u00eb paralelizmi.<\/p>\n<h2>Bllokimi (Locking)<\/h2>\n<p><\/p>\n<h4>N\u00ebse nj\u00eb transaksion ka bllokuar t\u00eb dh\u00ebnat, at\u00ebher\u00eb transaksionet e tjera q\u00eb k\u00ebrkojn\u00eb qasje n\u00eb t\u00eb dh\u00ebnat duhet t\u00eb presin p\u00ebrshkall\u00ebzimin.<\/h4>\n<p>\nNj\u00eb bllok mund t\u00eb vendoset mbi nj\u00eb baz\u00eb t\u00eb dh\u00ebnash, nj\u00eb tabel\u00eb, nj\u00eb rresht ose nj\u00eb atribut. Bllokimi i p\u00ebrbashk\u00ebt (Shared Lock) mund t\u00eb vendoset mbi t\u00eb nj\u00ebjtat t\u00eb dh\u00ebna nga disa transaksione, duke lejuar t\u00eb gjitha transaksionet (p\u00ebrfshir\u00eb at\u00eb q\u00eb ka vendosur bllokimin) t\u00eb lexojn\u00eb, por ndalon ndryshimin dhe bllokimin monopol. Bllokimi monopol (Exclusive Lock) mund t\u00eb vendoset vet\u00ebm nga nj\u00eb transaksion, duke lejuar \u00e7do veprim t\u00eb transaksionit q\u00eb e ka vendosur at\u00eb, duke ndaluar \u00e7do veprim p\u00ebr t\u00eb tjer\u00ebt.<\/p>\n<h4>Nj\u00eb nd\u00ebrlikim i nd\u00ebrsjell\u00eb konsiderohet nj\u00eb situat\u00eb kur transaksionet jan\u00eb n\u00eb pritje, q\u00eb zgjat pafund\u00ebsisht.<\/h4>\n<p>\n<i>Shembulli. Transaksioni i par\u00eb pret \u00e7lirimin e t\u00eb dh\u00ebnave t\u00eb kapura nga i dyti, nd\u00ebrsa i dyti pret \u00e7lirimin e t\u00eb dh\u00ebnave t\u00eb kapura nga i pari.<\/i><\/p>\n<h4>Zgjidhja optimiste p\u00ebr problemin e nd\u00ebrlikimeve lejon q\u00eb nd\u00ebrlikimi t\u00eb ndodh\u00eb, por pastaj e rikthen sistemin duke rrokullisur nj\u00eb nga transaksionet q\u00eb p\u00ebrfshihen n\u00eb nd\u00ebrlikim.<\/h4>\n<p>\nMe nj\u00eb periudh\u00eb t\u00eb caktuar b\u00ebhet k\u00ebrkimi p\u00ebr nd\u00ebrlikime. Nj\u00eb nga m\u00ebnyrat e zb\u53d1\u73b0jes \u00ebsht\u00eb sipas koh\u00ebs, dmth t\u00eb mendohet se nd\u00ebrlikimi ka ndodhur n\u00ebse nj\u00eb transaksion \u00ebsht\u00eb duke u ekzekutuar shum\u00eb gjat\u00eb. Kur nd\u00ebrlikimi zbulohet, nj\u00eb nga transaksionet rikthehet, duke lejuar q\u00eb transaksionet e tjera q\u00eb marrin pjes\u00eb n\u00eb nd\u00ebrlikim t\u00eb p\u00ebrfundojn\u00eb. Zgjedhja e viktim\u00ebs mund t\u00eb bazohet n\u00eb koston e transaksioneve ose n\u00eb mosmarr\u00ebveshjen e tyre (Skemat Wait-Die dhe Wound-wait). <\/p>\n<p>\u00c7do transaksion <b>T<\/b> i jepet nj\u00eb mark\u00eb kohore <b>TS<\/b> e cila p\u00ebrmban koh\u00ebn e fillimit t\u00eb ekzekutimit t\u00eb transaksionit.<\/p>\n<p>Wait-Die. <\/p>\n<p><u>N\u00ebse <b>TS(Ti)<\/b> &lt; <b>TS(Tj)<\/b>, nuk \u00ebsht\u00eb e nevojshme, madje, ajo jep nj\u00eb gabim sintaksor <b>Ti<\/b> pret, p\u00ebrndryshe <b>Ti<\/b> rikthehet dhe fillon s\u00ebrish me t\u00eb nj\u00ebjt\u00ebn mark\u00eb kohore.<\/u><\/p>\n<p>N\u00ebse nj\u00eb transaksion m\u00eb i ri ka kapur nj\u00eb burim, dhe nj\u00eb m\u00eb i vjet\u00ebr k\u00ebrkon t\u00eb nj\u00ebjtin burim, at\u00ebher\u00eb transaksionit m\u00eb t\u00eb vjet\u00ebr i lejohet t\u00eb pret. N\u00ebse transaksioni m\u00eb i vjet\u00ebr ka kapur burimin, at\u00ebher\u00eb transaksioni m\u00eb i ri q\u00eb k\u00ebrkon k\u00ebt\u00eb burim do t\u00eb rikthehet.<\/p>\n<p>Wound-wait. <\/p>\n<p><u>N\u00ebse <b>TS(Ti)<\/b> &lt; <b>TS(Tj)<\/b>, nuk \u00ebsht\u00eb e nevojshme, madje, ajo jep nj\u00eb gabim sintaksor <b>Tj<\/b> rikthehet dhe fillon s\u00ebrish me t\u00eb nj\u00ebjt\u00ebn mark\u00eb kohore, p\u00ebrndryshe <b>Ti<\/b> pret.<\/u><\/p>\n<p>N\u00ebse nj\u00eb transaksion m\u00eb i ri ka kapur nj\u00eb burim, dhe nj\u00eb transaksion m\u00eb i vjet\u00ebr k\u00ebrkon t\u00eb nj\u00ebjtin burim, at\u00ebher\u00eb transaksioni m\u00eb i ri do t\u00eb anulohet. N\u00ebse nj\u00eb transaksion m\u00eb i vjet\u00ebr ka kapur nj\u00eb burim, at\u00ebher\u00eb transaksioni m\u00eb i ri, q\u00eb k\u00ebrkon k\u00ebt\u00eb burim, i lejohet t\u00eb pres\u00eb. Zgjedhja e viktim\u00ebs bazuar n\u00eb mosh\u00ebn parandalon shfaqjen e bllokimeve, por anullon transaksionet q\u00eb nuk jan\u00eb n\u00eb nj\u00eb gjendje bllokimi. Problemi \u00ebsht\u00eb se transaksionet mund t\u00eb anullohen shum\u00eb her\u00eb, pasi nj\u00eb transaksion m\u00eb i vjet\u00ebr mund t\u00eb mbaj\u00eb p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb burimin.<\/p>\n<h4>Zgjidhja pesimiste e problemit t\u00eb bllokimeve nuk lejon q\u00eb transaksioni t\u00eb filloj\u00eb ekzekutimin n\u00ebse ka rrezik t\u00eb shfaqjes s\u00eb bllokimit.<\/h4>\n<p>\nP\u00ebr t\u00eb zbuluar bllokimin, nd\u00ebrtohet nj\u00eb grafik (grafiku i pritjes, wait-for-graph), n\u00eb t\u00eb cilin kulmet jan\u00eb transaksionet, dhe skajet jan\u00eb t\u00eb drejtuara nga transaksionet q\u00eb presin t\u00eb lirojn\u00eb t\u00eb dh\u00ebnat te transaksioni q\u00eb ka kapur k\u00ebto t\u00eb dh\u00ebna. Kjo konsiderohet nj\u00eb bllokim t\u00eb ket\u00eb ndodhur, n\u00ebse grafiku ka cikle. Nd\u00ebrtimi i grafikut t\u00eb pritjes, ve\u00e7an\u00ebrisht n\u00eb DB t\u00eb shp\u00ebrndara, \u00ebsht\u00eb nj\u00eb procedur\u00eb e shtrenjt\u00eb.<\/p>\n<h4>Bllokimi dyfazor \u2014 parandalimi i bllokimeve p\u00ebrmes kapjes s\u00eb t\u00eb gjith\u00eb burimeve t\u00eb p\u00ebrdorura nga transaksioni n\u00eb fillim t\u00eb tij dhe lirohet n\u00eb fund.<\/h4>\n<p>\nT\u00eb gjitha operacionet q\u00eb bllokojn\u00eb duhet t\u00eb parandalojn\u00eb t\u00eb par\u00ebn q\u00eb lirohet. Ka dy faza \u2014 Faza e Rritjes, ku ndodh grumbullimi i kapjeve dhe Faza e Paksimit, ku ndodh lirimi i kapjeve. N\u00ebse kapja e nj\u00ebrit prej burimeve \u00ebsht\u00eb e pamundur, transaksioni fillon nga e para. Ka situata kur transaksioni nuk mund t\u00eb kap\u00eb burimet e nevojshme, p\u00ebr shembull, n\u00ebse disa transaksione po garojn\u00eb p\u00ebr t\u00eb nj\u00ebjtat burime.<\/p>\n<h4>Komiti dyfazor siguron p\u00ebrfundimin e komitit n\u00eb t\u00eb gjitha kopjet e DB.<\/h4>\n<p>\n\u00c7do DB regjistron informacionin mbi t\u00eb dh\u00ebnat q\u00eb do t\u00eb ndryshohen n\u00eb log dhe i p\u00ebrgjigjet koordinatorit me OK (Faza e Votimit). Pas q\u00eb t\u00eb gjith\u00eb kan\u00eb p\u00ebrgjigjur me OK, koordinatori d\u00ebrgon nj\u00eb sinjal q\u00eb detyron t\u00eb gjith\u00eb t\u00eb kryejn\u00eb komitin. Pas komitit, <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/sq\/server\/dts-los-angeles\/\"   title=\"\u0441\u0435\u0440\u0432\u0435\u0440\u0430\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"3482\">\u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/a> p\u00ebrgjigjen me OK; n\u00ebse ndonj\u00eb nuk p\u00ebrgjigjet me OK, at\u00ebher\u00eb koordinatori d\u00ebrgon nj\u00eb sinjal anullimi t\u00eb ndryshimeve p\u00ebr t\u00eb gjitha server\u00ebt (Faza e P\u00ebrfundimit).<\/p>\n<h2>Metoda e sh\u00ebnjave t\u00eb koh\u00ebs.<\/h2>\n<p><\/p>\n<h4>Nj\u00eb transaksion m\u00eb i vjet\u00ebr anullohet kur p\u00ebrpiqet t\u00eb aksesoj\u00eb t\u00eb dh\u00ebnat q\u00eb jan\u00eb angazhuar nga nj\u00eb transaksion m\u00eb i ri.<\/h4>\n<p>\n\u00c7do transaksioni i jepet nj\u00eb shenj\u00eb temporale <b>TS<\/b> p\u00ebrkat\u00ebse me koh\u00ebn e fillimit t\u00eb ekzekutimit. N\u00ebse <b>Ti<\/b> \u00ebsht\u00eb m\u00eb e vjet\u00ebr <b>Tj<\/b>, nuk \u00ebsht\u00eb e nevojshme, madje, ajo jep nj\u00eb gabim sintaksor <b>TS(Ti)<\/b> &lt; <b>TS(Tj)<\/b>.<\/p>\n<p>Kur transaksioni rikthehet, i jepet nj\u00eb shenj\u00eb temporale e re. \u00c7do objekt t\u00eb dh\u00ebnash <b>Q<\/b> i p\u00ebrfshir\u00eb n\u00eb transaksion etiketizohet me dy shenja. <b>W-TS(Q)<\/b> \u2014 shenja temporale e transaksionit m\u00eb t\u00eb ri, i cili ka kryer me sukses nj\u00eb shkruar <b>Q<\/b>. <b>R-TS(Q)<\/b> \u2014 shenja temporale e transaksionit m\u00eb t\u00eb ri, i cili ka kryer nj\u00eb lexues mbi <b>Q<\/b>.<\/p>\n<p>Kur transaksioni <b>T<\/b> k\u00ebrkon t\u00eb lexoj\u00eb t\u00eb dh\u00ebnat <b>Q<\/b> jan\u00eb dy mund\u00ebsi.<\/p>\n<p><u>N\u00ebse <b>TS(T)<\/b> &lt; <b>W-TS(Q)<\/b>, n\u00ebse t\u00eb dh\u00ebnat jan\u00eb azhurnuar nga nj\u00eb transaksion m\u00eb i ri, at\u00ebher\u00eb transaksioni <b>T<\/b> rikthehet.<\/u><\/p>\n<p><u>N\u00ebse <b>TS(T)<\/b> &gt;= <b>W-TS(Q)<\/b>, at\u00ebher\u00eb leximi kryhet dhe <b>R-TS(Q)<\/b> \u00ebsht\u00eb <b>MAX(R-TS(Q), TS(T))<\/b>.<\/u><\/p>\n<p>Kur transaksioni <b>T<\/b> k\u00ebrkon ndryshimin e t\u00eb dh\u00ebnave <b>Q<\/b> jan\u00eb dy mund\u00ebsi. <\/p>\n<p><u>N\u00ebse <b>TS(T)<\/b> &lt; <b>R-TS(Q)<\/b>, pra, t\u00eb dh\u00ebnat tashm\u00eb jan\u00eb lexuar nga nj\u00eb transaksion m\u00eb i ri dhe n\u00ebse b\u00ebhet ndryshimi, do t\u00eb ket\u00eb nj\u00eb konflikt. Transaksioni <b>T<\/b> rikthehet. <\/u><\/p>\n<p><u>N\u00ebse <b>TS(T)<\/b> &lt; <b>W-TS(Q)<\/b>, pra, transaksioni p\u00ebrpiqet t\u00eb rishkruaj\u00eb nj\u00eb vler\u00eb m\u00eb t\u00eb re, transaksioni T rikthehet. N\u00eb raste t\u00eb tjera, ndryshimi kryhet dhe <b>W-TS(Q)<\/b> b\u00ebhet e barabart\u00eb me <b>TS(T)<\/b>.<\/u><\/p>\n<p>Nuk k\u00ebrkohet nd\u00ebrtimi i shtrenjt\u00eb i nj\u00eb grafiku pritjeje. Transaksionet m\u00eb t\u00eb vjetra varen nga m\u00eb t\u00eb rinjt\u00eb, p\u00ebr rrjedhoj\u00eb n\u00eb grafikun e pritjeve nuk ka cikle. Nuk ka bllokime t\u00eb nd\u00ebrsjellta, pasi transaksionet nuk presin, por rikthehen menj\u00ebher\u00eb. Mund t\u00eb ndodhin rikthime kaskad\u00eb. N\u00ebse <b>Ti<\/b> u rikthye, dhe <b>Tj<\/b> lexoi t\u00eb dh\u00ebnat q\u00eb e ndryshoi <b>Ti<\/b>, nuk \u00ebsht\u00eb e nevojshme, madje, ajo jep nj\u00eb gabim sintaksor <b>Tj<\/b> duhet gjithashtu t\u00eb rikthehet. N\u00ebse gjat\u00eb k\u00ebsaj <b>Tj<\/b> \u00ebsht\u00eb b\u00ebr\u00eb commit, do t\u00eb ket\u00eb nj\u00eb shkelje t\u00eb parimit t\u00eb q\u00ebndrueshm\u00ebris\u00eb.<\/p>\n<p>Nj\u00eb nga zgjidhjet p\u00ebr rikthimet kaskad\u00eb. Transaksioni kryen t\u00eb gjitha operacionet e shkruar n\u00eb fund, duke obliguar transaksionet e tjera t\u00eb presin p\u00ebr p\u00ebrfundimin e k\u00ebsaj operacione. Transaksionet presin p\u00ebr commit p\u00ebrpara leximit.<\/p>\n<h4>Rregulli i shkrimit t\u00eb Thomas \u2014 nj\u00eb variacion i metod\u00ebs s\u00eb shenjave temporale n\u00eb t\u00eb cil\u00ebn t\u00eb dh\u00ebnat e azhurnuara nga nj\u00eb transaksion m\u00eb i ri ndalohen t\u00eb rishkruhen nga nj\u00eb m\u00eb t\u00eb vjet\u00ebr<\/h4>\n<p>\nTransaksioni <b>T<\/b> k\u00ebrkon ndryshimin e t\u00eb dh\u00ebnave <b>Q<\/b>. N\u00ebse <b>TS(T)<\/b> &lt; <b>W-TS(Q)<\/b>, pra, transaksioni p\u00ebrpiqet t\u00eb rishkruaj\u00eb nj\u00eb vler\u00eb m\u00eb t\u00eb re, transaksioni T nuk rikthehet si n\u00eb metod\u00ebn e shenjave temporale.<br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/446662\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0435\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430\u0434 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u043c\u0435\u044e\u0449\u0430\u044f \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043a\u043e\u043d\u0435\u0446 \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438. \u041e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435\u043c \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u0438\u0431\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 (\u0444\u0438\u043a\u0441\u0430\u0446\u0438\u044f, commit) \u043b\u0438\u0431\u043e \u043e\u0442\u043c\u0435\u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 (\u043e\u0442\u043a\u0430\u0442, rollback). \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a \u0411\u0414 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u044d\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0430\u043a\u0442\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441. \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c ACID \u0410\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0441\u0442\u044c. \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u043b\u0438\u0431\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30878","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0435\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430\u0434 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u043c\u0435\u044e\u0449\u0430\u044f \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043a\u043e\u043d\u0435\u0446 \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/tranzaktsii-i-mehanizmy-ih-kontrolya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0435\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430\u0434 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u043c\u0435\u044e\u0449\u0430\u044f \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043a\u043e\u043d\u0435\u0446 \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/tranzaktsii-i-mehanizmy-ih-kontrolya\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:37:56+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:37:56+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Transaksionet dhe mekanizmat e kontrollit t\u00eb tyre | ProHoster","description":"Transaksionet Nj\u00eb transaksion quhet nj\u00eb sekuenc\u00eb operacionesh mbi t\u00eb dh\u00ebna q\u00eb ka nj\u00eb fillim dhe nj\u00eb fund. Transaksioni \u00ebsht\u00eb nj\u00eb ekzekutim i radh\u00ebs i operacioneve t\u00eb leximit dhe shkruar.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/tranzaktsii-i-mehanizmy-ih-kontrolya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f | ProHoster","og:description":"\u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0438 \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0435\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430\u0434 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0438\u043c\u0435\u044e\u0449\u0430\u044f \u043d\u0430\u0447\u0430\u043b\u043e \u0438 \u043a\u043e\u043d\u0435\u0446 \u0422\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f \u044d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/tranzaktsii-i-mehanizmy-ih-kontrolya","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:37:56+00:00","article:modified_time":"2019-10-31T18:37:56+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30878","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-02-22 15:31:13","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:27:38","updated":"2026-02-22 15:31:13","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/30878","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=30878"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/30878\/revisions"}],"predecessor-version":[{"id":162008,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/30878\/revisions\/162008"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=30878"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=30878"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=30878"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}