{"id":36650,"date":"2019-10-31T22:12:54","date_gmt":"2019-10-31T19:12:54","guid":{"rendered":"https:\/\/prohoster.info\/blog\/tranzaktsii-v-globalah-intersystems-iris\/"},"modified":"2019-10-31T22:12:54","modified_gmt":"2019-10-31T19:12:54","slug":"tranzaktsii-v-globalah-intersystems-iris","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/tranzaktsii-v-globalah-intersystems-iris","title":{"rendered":"Transaksionet n\u00eb globalet InterSystems IRIS","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Transaksionet n\u00eb globalet InterSystems IRIS\" src=\"\/wp-content\/uploads\/2019\/07\/ee4e58369616511dc213f94158b04e4f.jpg\" style=\"display:block;margin: 0 auto;\" \/>DB InterSystems IRIS mb\u00ebshtet struktura interesante p\u00ebr ruajtjen e t\u00eb dh\u00ebnave \u2014 globalet. N\u00eb thelb, k\u00ebto jan\u00eb \u00e7el\u00ebsa shum\u00eb-nivele me disa p\u00ebrfitime t\u00eb tjera si transaksionet, funksione t\u00eb shpejta p\u00ebr kalimin p\u00ebrmes pem\u00ebve t\u00eb t\u00eb dh\u00ebnave, bllokimet dhe gjuha e vet ObjectScript.<\/p>\n<p>M\u00eb shum\u00eb rreth global\u00ebve n\u00eb ciklin e artikujve \u00abGlobalet \u2014 shpata-kahena p\u00ebr ruajtjen e t\u00eb dh\u00ebnave\u00bb:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/263791\/\">Pem\u00ebt. Pjesa 1<\/a><\/noindex> <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/264173\/\">Pem\u00ebt. Pjesa 2<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/268465\/\">Matrica t\u00eb thinjura. Pjesa 3<\/a><\/noindex><\/p>\n<p>M\u00eb ka interesuar se si jan\u00eb realizuar transaksionet n\u00eb globalet, \u00e7far\u00eb ve\u00e7orish jan\u00eb aty. Sepse kjo \u00ebsht\u00eb nj\u00eb struktur\u00eb krejt\u00ebsisht tjet\u00ebr p\u00ebr ruajtjen e t\u00eb dh\u00ebnave, ndryshe nga tabelat e njohura. Shum\u00eb m\u00eb e nivelit t\u00eb ul\u00ebt.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nSi\u00e7 dihet nga teoria e bazave t\u00eb t\u00eb dh\u00ebnave relacional, nj\u00eb realizim i mir\u00eb i transaksioneve duhet t\u00eb p\u00ebrmbush\u00eb k\u00ebrkesat <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/ACID\">ACID<\/a><\/noindex>:<\/p>\n<p><b>A \u2014 Atomic (atomik).<\/b> T\u00eb gjitha ndryshimet e b\u00ebra n\u00eb transaksion duhet t\u00eb regjistrohen ose asnj\u00eb prej tyre.<\/p>\n<p><b>C \u2014 Consistency (koherenc\u00eb).<\/b> Pas p\u00ebrfundimit t\u00eb transaksionit, gjendja logjike e DB-s\u00eb duhet t\u00eb jet\u00eb e brendshme dhe e q\u00ebndrueshme. N\u00eb mas\u00eb t\u00eb madhe, kjo k\u00ebrkes\u00eb u takon programuesve, por n\u00eb rastin e databazave SQL, ajo gjithashtu ka t\u00eb b\u00ebj\u00eb me \u00e7el\u00ebsat e jasht\u00ebm.<\/p>\n<p><b>I \u2014 Isolate (izolim).<\/b> Transaksionet q\u00eb ekzekutohen paralelisht nuk duhet t\u00eb ndikojn\u00eb nj\u00ebra-tjetr\u00ebn.<\/p>\n<p><b>D \u2014 Durable (q\u00ebndrueshm\u00ebri).<\/b> Pas p\u00ebrfundimit t\u00eb suksessh\u00ebm t\u00eb transaksionit, problemet n\u00eb nivelet e poshtme (si\u00e7 \u00ebsht\u00eb nj\u00eb prishje e energjis\u00eb) nuk duhet t\u00eb ndikojn\u00eb n\u00eb t\u00eb dh\u00ebnat e ndryshuara nga transaksioni.<\/p>\n<p>Globalet jan\u00eb struktura t\u00eb dh\u00ebnash jo relacionale. Ato jan\u00eb krijuar p\u00ebr t\u00eb punuar shum\u00eb shpejt n\u00eb harduer shum\u00eb t\u00eb kufizuar. Le t\u00eb shqyrtojm\u00eb realizimin e transaksioneve n\u00eb globalet me ndihm\u00ebn e <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/_\/intersystems-iris-data-platform\/plans\/222f869e-567c-4928-b572-eb6a29706fbd?tab=instructions\">imazhit zyrtar docker t\u00eb IRIS<\/a><\/noindex>.<\/p>\n<p>P\u00ebr t\u00eb mb\u00ebshtetur transaksionet n\u00eb IRIS p\u00ebrdoren komandat: <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.intersystems.com\/irislatest\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_ctstart\">TSTART<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.intersystems.com\/irislatest\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_ctcommit\">TCOMMIT<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.intersystems.com\/irislatest\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_ctrollback\">TROLLBACK<\/a><\/noindex>.<\/p>\n<h2>1. Atomik\u00ebsia<\/h2>\n<p>\nM\u00eb leht\u00eb \u00ebsht\u00eb t\u00eb verifikohet atomik\u00ebsia. Verifikohet nga konsola e databaz\u00ebs.<\/p>\n<pre><code class=\"bash\">Kill ^a\nTSTART\nSet ^a(1) = 1\nSet ^a(2) = 2\nSet ^a(3) = 3\nTCOMMIT<\/code><\/pre>\n<p>\nPastaj arrijm\u00eb n\u00eb p\u00ebrfundimin:<\/p>\n<pre><code class=\"bash\">Write ^a(1), \u201c \u201d, ^a(2), \u201c \u201d, ^a(3)<\/code><\/pre>\n<p>\nDo t\u00eb marrim:<\/p>\n<pre><code class=\"bash\">1 2 3<\/code><\/pre>\n<p>\nE gjith\u00eb gjendja \u00ebsht\u00eb n\u00eb rregull. Atomik\u00ebsia \u00ebsht\u00eb ruajtur: t\u00eb gjitha ndryshimet jan\u00eb regjistruar.<\/p>\n<p>Le t\u00eb komplikojm\u00eb gj\u00ebn\u00eb, t\u00eb fusim nj\u00eb gabim dhe t\u00eb shohim si do t\u00eb ruaj\u00eb transaksioni, pjes\u00ebrisht ose aspak.<\/p>\n<p>Tjet\u00ebr her\u00eb do t\u00eb kontrollojm\u00eb atomik\u00ebsin\u00eb:<\/p>\n<pre><code class=\"bash\">Kill ^A\nTSTART\nSet ^a(1) = 1\nSet ^a(2) = 2\nSet ^a(3) = 3<\/code><\/pre>\n<p>\nPas k\u00ebsaj do t\u00eb ndalojm\u00eb me forc\u00eb kontejnerin, do ta aktivizojm\u00eb dhe do t\u00eb shohim. <\/p>\n<pre><code class=\"bash\">docker kill my-iris<\/code><\/pre>\n<p>\nKjo komand\u00eb \u00ebsht\u00eb praktikisht ekuivalente me ndalimin e detyruesh\u00ebm t\u00eb energjis\u00eb, pasi d\u00ebrgon sinjalin e ndalimit t\u00eb menj\u00ebhersh\u00ebm t\u00eb procesit SIGKILL.<\/p>\n<p>A mund t\u00eb ket\u00eb ruajtur transaksioni pjes\u00ebrisht?<\/p>\n<pre><code class=\"bash\">SHKRUAJ ^a(1), ^a(2), ^a(3)\n^\n ^a(1)<\/code><\/pre>\n<p>\n \u2014 Jo, nuk u ruajt.<\/p>\n<p>T\u00eb provojm\u00eb komand\u00ebn e rikthimit:<\/p>\n<pre><code class=\"bash\">Vrit ^A\nTSTART\nCakto ^a(1) = 1\nCakto ^a(2) = 2\nCakto ^a(3) = 3\nTROLLBACK\n\nSHKRUAJ ^a(1), ^a(2), ^a(3)\n^\n ^a(1)<\/code><\/pre>\n<p>\nAsgj\u00eb nuk u ruajt gjithashtu.<\/p>\n<h2>2. Koherenca<\/h2>\n<p>\nDuke pasur parasysh q\u00eb n\u00eb bazat mbi globale, \u00e7el\u00ebsat b\u00ebhen gjithashtu mbi globale (kujdesi q\u00eb globali \u00ebsht\u00eb nj\u00eb struktur\u00eb m\u00eb e ul\u00ebt p\u00ebr ruajtjen e t\u00eb dh\u00ebnave se tabela relacional), p\u00ebr t\u00eb p\u00ebrmbushur k\u00ebrkes\u00ebn e koherenc\u00ebs duhet t\u00eb p\u00ebrfshihet ndryshimi i \u00e7el\u00ebsit n\u00eb t\u00eb nj\u00ebjt\u00ebn transaksion me ndryshimin e globalit.<\/p>\n<p>P\u00ebr shembull, ne kemi globalin ^person, ku ruajm\u00eb persona dhe si \u00e7el\u00ebs p\u00ebrdorim INN.<\/p>\n<pre><code class=\"bash\">^person(1234567, \u2018firstname\u2019) = \u2018Sergey\u2019\n^person(1234567, \u2018lastname\u2019) = \u2018Kamenev\u2019\n^person(1234567, \u2018phone\u2019) = \u2018+74995555555\n...<\/code><\/pre>\n<p>\nP\u00ebr t\u00eb pasur nj\u00eb k\u00ebrkim t\u00eb shpejt\u00eb sipas mbiemrit dhe emrit kemi krijuar \u00e7el\u00ebsin ^index.<\/p>\n<pre><code class=\"bash\">^index(\u2018Kamenev\u2019, \u2018Sergey\u2019, 1234567) = 1<\/code><\/pre>\n<p>\nP\u00ebr t\u00eb pasur nj\u00eb baz\u00eb koherente, duhet t\u00eb shtojm\u00eb personin k\u00ebshtu:<\/p>\n<pre><code class=\"bash\">TSTART\n^person(1234567, \u2018firstname\u2019) = \u2018Sergey\u2019\n^person(1234567, \u2018lastname\u2019) = \u2018Kamenev\u2019\n^person(1234567, \u2018phone\u2019) = \u2018+74995555555\n^index(\u2018Kamenev\u2019, \u2018Sergey\u2019, 1234567) = 1\nTCOMMIT<\/code><\/pre>\n<p>\nP\u00ebr pasoj\u00eb, kur fshijm\u00eb gjithashtu duhet t\u00eb p\u00ebrdorim transaksionin:<\/p>\n<pre><code class=\"bash\">TSTART\nVrit ^person(1234567)\nZKill ^index(\u2018Kamenev\u2019, \u2018Sergey\u2019, 1234567)\nTCOMMIT<\/code><\/pre>\n<p>\nMe fjal\u00eb t\u00eb tjera, p\u00ebrmbushja e k\u00ebrkes\u00ebs s\u00eb koherenc\u00ebs \u00ebsht\u00eb plot\u00ebsisht mbi supet e programuesit. Por kur flitet p\u00ebr globale \u2014 kjo \u00ebsht\u00eb e natyrshme, p\u00ebr shkak t\u00eb natyr\u00ebs s\u00eb tyre t\u00eb ul\u00ebt.<\/p>\n<h2>3. Izolimi<\/h2>\n<p>\nK\u00ebtu fillojn\u00eb nd\u00ebrlikimet. Shum\u00eb p\u00ebrdorues punojn\u00eb nj\u00ebkoh\u00ebsisht mbi t\u00eb nj\u00ebjt\u00ebn baz\u00eb, ndryshojn\u00eb t\u00eb dh\u00ebna t\u00eb nj\u00ebjta.<\/p>\n<p>Situata \u00ebsht\u00eb e krahasueshme me at\u00eb kur shum\u00eb p\u00ebrdorues punojn\u00eb nj\u00ebkoh\u00ebsisht me t\u00eb nj\u00ebjtin repo t\u00eb kodit dhe p\u00ebrpiqen gjithashtu t\u00eb b\u00ebjn\u00eb commit t\u00eb ndryshimeve n\u00eb shum\u00eb skedar\u00eb nj\u00ebkoh\u00ebsisht.<\/p>\n<p>Baza e t\u00eb dh\u00ebnave duhet ta zgjidh\u00eb k\u00ebt\u00eb n\u00eb koh\u00eb reale. Duke marr\u00eb parasysh q\u00eb n\u00eb kompani serioze ka madje nj\u00eb person t\u00eb ve\u00e7ant\u00eb q\u00eb \u00ebsht\u00eb p\u00ebrgjegj\u00ebs p\u00ebr kontrollin e versioneve (p\u00ebr bashkimin e deg\u00ebve, zgjidhjen e konflikteve, etj.), dhe DB duhet t'i b\u00ebj\u00eb t\u00eb gjitha k\u00ebto n\u00eb koh\u00eb reale, at\u00ebher\u00eb b\u00ebhet e qart\u00eb kompleksiteti i detyr\u00ebs dhe sakt\u00ebsia e projektimit t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave dhe kodit q\u00eb e mb\u00ebshtet at\u00eb.<\/p>\n<p>Baza e t\u00eb dh\u00ebnave nuk mund t\u00eb kuptoj\u00eb kuptimin e veprimeve q\u00eb kryejn\u00eb p\u00ebrdoruesit, p\u00ebr t\u00eb parandaluar konflikte, n\u00ebse ata punojn\u00eb me t\u00eb nj\u00ebjtat t\u00eb dh\u00ebna. Ajo mund t\u00eb anuloj\u00eb vet\u00ebm nj\u00eb transaksion q\u00eb \u00ebsht\u00eb n\u00eb kund\u00ebrshtim me nj\u00eb tjet\u00ebr ose t'i ekzekutoj\u00eb ato n\u00eb m\u00ebnyr\u00eb sekondare.<\/p>\n<p>Nj\u00eb tjet\u00ebr problem \u00ebsht\u00eb se gjat\u00eb ekzekutimit t\u00eb nj\u00eb transaksioni (para angazhimit), gjendja e baz\u00ebs mund t\u00eb jet\u00eb e paq\u00ebndrueshme, prandaj \u00ebsht\u00eb e preferueshme q\u00eb transaksionet e tjera t\u00eb mos ken\u00eb akses n\u00eb gjendjen e paq\u00ebndrueshme t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave, \u00e7ka realizohet n\u00eb DB rrelacionale p\u00ebrmes shum\u00eb m\u00ebnyrave: krijimin e snapshot-eve, shum\u00ebversionalitetit t\u00eb rreshtave dhe t\u00eb tjer\u00eb.<\/p>\n<p>Gjat\u00eb ekzekutimit paralel t\u00eb transaksioneve, \u00ebsht\u00eb e r\u00ebnd\u00ebsishme q\u00eb ato t\u00eb mos pengojn\u00eb nj\u00ebra-tjetr\u00ebn. Kjo \u00ebsht\u00eb ajo q\u00eb njihet si pron\u00ebsia e izollimit.<\/p>\n<p>SQL p\u00ebrcakton 4 nivele izollimi:<\/p>\n<ul>\n<li>LEXO T\u00cb PAANGAZHUARA<\/li>\n<li>LEXO T\u00cb ANGAZHUARA<\/li>\n<li>LEXO RIPORTUESHME<\/li>\n<li>SERIALIZABLE<\/li>\n<\/ul>\n<p>\nT\u00eb shqyrtojm\u00eb \u00e7do nivel ve\u00e7mas. Kostot p\u00ebr implementimin e \u00e7do niveli rriten pothuajse eksponencialisht.<\/p>\n<p><b>LEXO T\u00cb PAANGAZHUARA<\/b> \u2014 ky \u00ebsht\u00eb niveli m\u00eb i ul\u00ebt i izollimit, por n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb m\u00eb i shpejti. Transaksionet mund t\u00eb lexojn\u00eb nd\u00ebrrimet e b\u00ebr\u00eb nga nj\u00ebra-tjetr\u00ebn.<\/p>\n<p><b>LEXO T\u00cb ANGAZHUARA<\/b> \u2014 ky \u00ebsht\u00eb niveli tjet\u00ebr i izollimit, i cili \u00ebsht\u00eb nj\u00eb kompromis. Transaksionet nuk mund t\u00eb lexojn\u00eb ndryshimet e b\u00ebra nga nj\u00ebra-tjetr\u00ebn deri n\u00eb angazhim, por mund t\u00eb lexojn\u00eb \u00e7do ndryshim t\u00eb b\u00ebr\u00eb pas angazhimit.<\/p>\n<p>N\u00ebse kemi nj\u00eb transaksion t\u00eb gjat\u00eb T1, gjat\u00eb t\u00eb cilit ka pasur angazhime n\u00eb transaksionet T2, T3 ... Tn, t\u00eb cilat punonin me t\u00eb nj\u00ebjtat t\u00eb dh\u00ebna si T1, at\u00ebher\u00eb gjat\u00eb k\u00ebrkes\u00ebs p\u00ebr t\u00eb dh\u00ebna n\u00eb T1 do t\u00eb marrim \u00e7do her\u00eb nj\u00eb rezultat t\u00eb ndrysh\u00ebm. Ky fenomen njihet si leximi i pakthyesh\u00ebm.<\/p>\n<p><b>LEXO RIPORTUESHME<\/b> \u2014 n\u00eb k\u00ebt\u00eb nivel izollimi nuk kemi fenomenin e leximit t\u00eb pakthyesh\u00ebm, p\u00ebr shkak se p\u00ebr \u00e7do k\u00ebrkes\u00eb p\u00ebr t\u00eb lexuar t\u00eb dh\u00ebna krijohet nj\u00eb snapshot i t\u00eb dh\u00ebnave si rezultat dhe kur p\u00ebrdoret p\u00ebrs\u00ebri n\u00eb k\u00ebt\u00eb transaksion, p\u00ebrdoren t\u00eb dh\u00ebnat nga snapshot-i. Megjithat\u00eb, n\u00eb k\u00ebt\u00eb nivel izollimi \u00ebsht\u00eb e mundur t\u00eb lexohen t\u00eb dh\u00ebna fantazm\u00eb. K\u00ebtu do t\u00eb thot\u00eb t\u00eb lexohen rreshta t\u00eb rinj q\u00eb jan\u00eb shtuar nga transaksionet paralel t\u00eb angazhuara.<\/p>\n<p><b>SERIALIZABLE<\/b> \u2014 niveli m\u00eb i lart\u00eb i izollimit. Ai karakterizohet nga fakti se t\u00eb dh\u00ebnat q\u00eb p\u00ebrdoren n\u00eb ndonj\u00eb m\u00ebnyr\u00eb n\u00eb transaksion (leximi ose ndryshimi) b\u00ebhen t\u00eb aksesueshme p\u00ebr transaksione t\u00eb tjera vet\u00ebm pas p\u00ebrfundimit t\u00eb transaksionit t\u00eb par\u00eb.<\/p>\n<p>Fillimi, le t\u00eb kuptojm\u00eb n\u00ebse ka izolim t\u00eb operacioneve n\u00eb transaksion nga rrjedha kryesore. Do t\u00eb hapim 2 dritare terminali.<\/p>\n<pre><code class=\"bash\">Vrit ^t\n\nShkruaj ^t(1)\n2<\/code><\/pre>\n<pre><code class=\"bash\">\nTSTART\nVendos ^t(1)=2<\/code><\/pre>\n<p>\nNuk ka izolim. Nj\u00eb rrjedh\u00eb sheh se \u00e7far\u00eb b\u00ebn tjetra q\u00eb ka hapur transaksionin.<\/p>\n<p>Le t\u00eb shohim n\u00ebse transaksionet e rrjedhave t\u00eb ndryshme shohin at\u00eb q\u00eb ndodh brenda tyre. <\/p>\n<p>Do t\u00eb hapim 2 dritare terminali dhe do t\u00eb hapim 2 transaksione paralelisht.<\/p>\n<pre><code class=\"bash\">vrit ^t\nTSTART\nShkruaj ^t(1)\n3<\/code><\/pre>\n<pre><code class=\"bash\">\nTSTART\nVendos ^t(1)=3\n<\/code><\/pre>\n<p>\nTransaksionet paralelisht shohin t\u00eb dh\u00ebnat e nj\u00ebra-tjetr\u00ebs. Pra, kemi marr\u00eb nivelin m\u00eb t\u00eb thjesht\u00eb, por edhe m\u00eb t\u00eb shpejt\u00eb t\u00eb izolimit READ UNCOMMITED.<\/p>\n<p>N\u00eb parim, kjo mund t\u00eb pritej p\u00ebr global\u00ebt, p\u00ebr t\u00eb cil\u00ebt performanca gjithmon\u00eb \u00ebsht\u00eb vendosur n\u00eb krye t\u00eb list\u00ebs. <\/p>\n<p>\u00c7far\u00eb t\u00eb b\u00ebjm\u00eb n\u00ebse na nevojitet nj\u00eb nivel m\u00eb i lart\u00eb izolimi n\u00eb operacionet mbi global\u00ebt?<\/p>\n<p>K\u00ebtu duhet t\u00eb mendojm\u00eb p\u00ebrse na nevojiten nivelet e izolimit dhe si funksionojn\u00eb ato.<\/p>\n<p>Niveli m\u00eb i lart\u00eb i izolimit SERIALIZE do t\u00eb thot\u00eb se rezultati i transaksioneve q\u00eb ekzekutohen paralelisht \u00ebsht\u00eb ekuivalent me ekzekutimin e tyre t\u00eb radhitur, q\u00eb garanton munges\u00ebn e kolizion\u00ebve.<\/p>\n<p>K\u00ebt\u00eb mund ta b\u00ebjm\u00eb me ndihm\u00ebn e bllokimeve t\u00eb men\u00e7ura n\u00eb ObjectScript, t\u00eb cilat kan\u00eb nj\u00eb num\u00ebr t\u00eb madh p\u00ebrdorimesh: mund t\u00eb krijojm\u00eb bllokim standard, inkremental, shum\u00ebfish me komand\u00ebn <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.intersystems.com\/latest\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_clock\">LOCK<\/a><\/noindex>.<\/p>\n<p>Niveli m\u00eb t\u00eb ul\u00ebta t\u00eb izolimit jan\u00eb kompromise q\u00eb synojn\u00eb t\u00eb rrisin shpejt\u00ebsin\u00eb e funksionimit t\u00eb baz\u00ebs s\u00eb t\u00eb dh\u00ebnave.<\/p>\n<p>Le t\u00eb shohim si mund t\u00eb arrijm\u00eb nivele t\u00eb ndryshme izolimi me ndihm\u00ebn e bllokimeve.<\/p>\n<p>Ky operacion lejon t\u00eb merret jo vet\u00ebm bllokimi ekskluziv, i nevojsh\u00ebm p\u00ebr ndryshimin e t\u00eb dh\u00ebnave, por gjithashtu t\u00eb ashtuquajturat shared, t\u00eb cilat mund t\u00eb merret paralelisht nga disa rrjedha, kur ata duhet t\u00eb lexojn\u00eb t\u00eb dh\u00ebna q\u00eb nuk duhet t\u00eb ndryshohen nga procese t\u00eb tjera gjat\u00eb leximit.<\/p>\n<p>M\u00eb shum\u00eb mbi metod\u00ebn e dy fazave t\u00eb bllokimeve n\u00eb gjuh\u00ebn ruse dhe angleze:<\/p>\n<p>\u2192 <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%94%D0%B2%D1%83%D1%85%D1%84%D0%B0%D0%B7%D0%BD%D0%B0%D1%8F_%D0%B1%D0%BB%D0%BE%D0%BA%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0\">Bllokimi me dy faza<\/a><\/noindex><br \/>\n\u2192 <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Two-phase_locking\">Two-phase locking<\/a><\/noindex><\/p>\n<p>V\u00ebshtir\u00ebsia q\u00ebndron n\u00eb faktin se gjat\u00eb transaksionit, gjendja e baz\u00ebs mund t\u00eb jet\u00eb jo konsistente, megjithat\u00eb k\u00ebto t\u00eb dh\u00ebna jo konsistente jan\u00eb t\u00eb dukshme p\u00ebr proceset e tjera. Si t\u00eb evitoni k\u00ebt\u00eb?<\/p>\n<p>Ne do ta b\u00ebjm\u00eb me ndihm\u00ebn e bllokimeve t\u00eb tilla dritare t\u00eb dukshm\u00ebris\u00eb, n\u00eb t\u00eb cilat gjendja e baz\u00ebs do t\u00eb jet\u00eb konsistente. Dhe t\u00eb gjitha k\u00ebrkesat p\u00ebr k\u00ebto dritare t\u00eb dukshm\u00ebris\u00eb me gjendje t\u00eb konsistent do t\u00eb kontrollohen nga bllokimet.<\/p>\n<p>Bllokimet e ndara p\u00ebr t\u00eb nj\u00ebjtat t\u00eb dh\u00ebna jan\u00eb shum\u00ebfish, - mund t'i marr\u00eb disa procese. K\u00ebto bllokime ndalojn\u00eb procese t\u00eb tjera t\u00eb modifikojn\u00eb t\u00eb dh\u00ebnat, dmth ato p\u00ebrdoren p\u00ebr formimin e dritareve t\u00eb nj\u00eb gjendjeje t\u00eb konsoliduar t\u00eb DB.<\/p>\n<p>Bllokimet ekskluzive p\u00ebrdoren p\u00ebr modifikimin e t\u00eb dh\u00ebnave - nj\u00eb bllokim t\u00eb till\u00eb mund ta marr\u00eb vet\u00ebm nj\u00eb proces. Nj\u00eb bllokim ekskluziv mund t\u00eb merret nga:<\/p>\n<ol>\n<li>\u00c7do proces, n\u00ebse t\u00eb dh\u00ebnat jan\u00eb t\u00eb lira<\/li>\n<li>Vet\u00ebm ai proces q\u00eb ka nj\u00eb bllokim shared mbi k\u00ebto t\u00eb dh\u00ebna dhe q\u00eb ka k\u00ebrkuar i pari nj\u00eb bllokim ekskluziv.<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Transaksionet n\u00eb globalet InterSystems IRIS\" src=\"\/wp-content\/uploads\/2019\/07\/bb91ed1268925bc1b9266763ab82646a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSa m\u00eb e ngusht\u00eb t\u00eb jet\u00eb dritarja e dukshm\u00ebris\u00eb, aq m\u00eb gjat\u00eb duhet t\u00eb presin proceset e tjera, por aq m\u00eb konsistente mund t\u00eb jet\u00eb gjendja e DB-s\u00eb brenda saj.<\/p>\n<p><b>READ_COMMITED<\/b> - thelbi i k\u00ebtij niveli \u00ebsht\u00eb q\u00eb ne shohim vet\u00ebm t\u00eb dh\u00ebnat e komituara nga rrjedhat e tjera. N\u00ebse t\u00eb dh\u00ebnat n\u00eb nj\u00eb transaksion tjet\u00ebr nuk jan\u00eb ende t\u00eb komituara, ne i shohim versionin e tyre t\u00eb vjet\u00ebr.<\/p>\n<p>Kjo na lejon t\u00eb realizojm\u00eb pun\u00ebn paralelisht n\u00eb vend q\u00eb t\u00eb presim lirimin e bllokimit.<\/p>\n<p>Pa p\u00ebrpjekje t\u00eb ve\u00e7anta ne nuk do t\u00eb mund t\u00eb shohim versionin e vjet\u00ebr t\u00eb t\u00eb dh\u00ebnave n\u00eb IRIS, k\u00ebshtu q\u00eb do t\u00eb duhet t\u00eb pregatisim bllokime.<\/p>\n<p>P\u00ebr pasoj\u00eb, do t\u00eb duhet t\u00eb lejojm\u00eb leximin e t\u00eb dh\u00ebnave vet\u00ebm n\u00eb momentet e konsolidimit duke p\u00ebrdorur bllokime shared.<\/p>\n<p>Supozoni se kemi nj\u00eb baz\u00eb p\u00ebrdoruesish ^person, q\u00eb transferojn\u00eb para nj\u00ebri-tjetrit.<\/p>\n<p>Momenti i transferimit nga persona 123 te persona 242:<\/p>\n<pre><code class=\"bash\">LOCK +^person(123), +^person(242)\nSet ^person(123, amount) = ^person(123, amount) - amount\nSet ^person(242, amount) = ^person(242, amount) + amount\nLOCK -^person(123), -^person(242)<\/code><\/pre>\n<p>\nMomenti i k\u00ebrkes\u00ebs p\u00ebr shum\u00ebn e parave te persona 123 para shkarkimit duhet t\u00eb shoq\u00ebrohet nga nj\u00eb bllokim ekskluziv (sip\u00ebrfaq\u00ebsisht):<\/p>\n<pre><code class=\"bash\">LOCK +^person(123)\nWrite ^person(123)<\/code><\/pre>\n<p>\nE n\u00ebse duam t\u00eb tregojm\u00eb gjendjen e llogaris\u00eb n\u00eb panelin personal, at\u00ebher\u00eb mund t\u00eb p\u00ebrdorim nj\u00eb bllokim shared ose madje ta l\u00ebm\u00eb pa t\u00eb:<\/p>\n<pre><code class=\"bash\">LOCK +^person(123)#\u201dS\u201d\nWrite ^person(123)<\/code><\/pre>\n<p>\nMegjithat\u00eb, n\u00ebse supozojm\u00eb se operacionet me DB-n\u00eb kryhen praktikisht menj\u00ebher\u00eb (t\u00eb kujtojm\u00eb, q\u00eb global\u00ebt jan\u00eb nj\u00eb struktur\u00eb shum\u00eb m\u00eb e ul\u00ebt se tabela relacionale), at\u00ebher\u00eb nevoja p\u00ebr k\u00ebt\u00eb nivel bie.<\/p>\n<p><b>LEXO RIPORTUESHME<\/b> - n\u00eb k\u00ebt\u00eb nivel izolimi lejohet q\u00eb mund t\u00eb jen\u00eb disa lexime t\u00eb dh\u00ebnash q\u00eb mund t\u00eb ndryshohen nga transaksione paralele. <\/p>\n<p>P\u00ebr pasoj\u00eb, do t\u00eb duhet t\u00eb vendosim nj\u00eb bllokim shared p\u00ebr t\u00eb lexuar t\u00eb dh\u00ebnat q\u00eb ne i ndryshojm\u00eb dhe bllokime ekskluzive p\u00ebr t\u00eb dh\u00ebnat q\u00eb po modifikojm\u00eb.<\/p>\n<p>Operatori LOCK lejon q\u00eb n\u00eb nj\u00eb operator t\u00eb vet\u00ebm t\u00eb enumerosh n\u00eb m\u00ebnyr\u00eb t\u00eb detajuar t\u00eb gjitha bllokimet e nevojshme, t\u00eb cilat mund t\u00eb jen\u00eb shum\u00eb.<\/p>\n<pre><code class=\"bash\">LOCK +^person(123, amount)#\u201dS\u201d\nleximi ^person(123, amount)<\/code><\/pre>\n<p>\noperacione t\u00eb tjera (n\u00eb k\u00ebt\u00eb koh\u00eb, rrjedhat paralele p\u00ebrpiqen t\u00eb ndryshojn\u00eb ^person(123, amount), por nuk mundin)<\/p>\n<pre><code class=\"bash\">LOCK +^person(123, amount)\nndryshimi ^person(123, amount)\nLOCK -^person(123, amount)\n\nleximi ^person(123, amount)\nLOCK -^person(123, amount)#\u201dS\u201d<\/code><\/pre>\n<p>\nKur enumerate bllokimet me nj\u00eb presje, ato merren nj\u00ebra pas tjetr\u00ebs, nd\u00ebrsa n\u00ebse e b\u00ebni k\u00ebshtu:<\/p>\n<pre><code class=\"bash\">LOCK +(^person(123),^person(242))<\/code><\/pre>\n<p>\nat\u00ebher\u00eb ato merren t\u00eb gjitha n\u00eb nj\u00eb m\u00ebnyr\u00eb atomike.<\/p>\n<p><b>SERIALIZE<\/b> \u2014 ne do t\u00eb duhet t\u00eb vendosim bllokime n\u00eb m\u00ebnyr\u00eb q\u00eb n\u00eb fund t\u00eb gjitha transaksionet q\u00eb kan\u00eb t\u00eb dh\u00ebna t\u00eb p\u00ebrbashk\u00ebta t\u00eb kryhen nj\u00ebri pas tjetrit. P\u00ebr k\u00ebt\u00eb qasje, shumica e bllokimeve duhet t\u00eb jen\u00eb ekskluzive dhe t\u00eb merren n\u00eb zonat m\u00eb t\u00eb vogla globale p\u00ebr performanc\u00eb.<\/p>\n<p>N\u00ebse flasim p\u00ebr t\u00ebrheqjen e fondeve n\u00eb globalin ^person, p\u00ebr t\u00eb \u00ebsht\u00eb e pranueshme vet\u00ebm niveli i izolimit SERIALIZE, pasi parat\u00eb duhet t\u00eb harxhohen rigorozisht nj\u00eb pas tjetr\u00ebs, p\u00ebrndryshe \u00ebsht\u00eb e mundur t\u00eb harxhohet e nj\u00ebjta shum\u00eb disa her\u00eb.<\/p>\n<h2>4. Q\u00ebndrueshm\u00ebria<\/h2>\n<p>\nKam kryer testime me fikjen e ashp\u00ebr t\u00eb kontejnerit p\u00ebrmes<\/p>\n<pre><code class=\"bash\">docker kill my-iris<\/code><\/pre>\n<p>\nBaza e tyre e mbante mir\u00eb. Nuk u zbulua ndonj\u00eb problem.<\/p>\n<h2>P\u00ebrfundim<\/h2>\n<p>\nP\u00ebr globalet n\u00eb InterSystems IRIS ka mb\u00ebshtetje p\u00ebr transaksionet. Ato jan\u00eb v\u00ebrtet atomike, t\u00eb besueshme. P\u00ebr t\u00eb siguruar q\u00ebndrueshm\u00ebrin\u00eb e DB n\u00eb globalet, k\u00ebrkohen p\u00ebrpjekje nga programuesi dhe p\u00ebrdorimi i transaksioneve, pasi n\u00eb t\u00eb nuk ka struktura t\u00eb nd\u00ebrlikuara t\u00eb nd\u00ebrtuara si\u00e7 jan\u00eb \u00e7el\u00ebsat e jasht\u00ebm.<\/p>\n<p>Niveli i izolimit n\u00eb globalet pa p\u00ebrdorimin e bllokimeve \u2014 \u00ebsht\u00eb READ UNCOMMITTED, dhe me p\u00ebrdorimin e bllokimeve mund t\u00eb sigurohet deri n\u00eb nivelin SERIALIZE.<\/p>\n<p>Sakt\u00ebsia dhe shpejt\u00ebsia e funksionimit t\u00eb transaksioneve n\u00eb globalet varen shum\u00eb nga mjesht\u00ebria e programuesit: sa m\u00eb gjer\u00ebsisht t\u00eb p\u00ebrdoren bllokimet ndar\u00ebse gjat\u00eb leximit, aq m\u00eb i lart\u00eb \u00ebsht\u00eb niveli i izolimit, dhe sa m\u00eb ngusht\u00ebsisht t\u00eb merren bllokimet ekskluzive, aq m\u00eb shum\u00eb performanc\u00eb.<br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/461753\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u0423\u0411\u0414 InterSystems IRIS \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u0433\u043b\u043e\u0431\u0430\u043b\u044b. \u041f\u043e \u0441\u0443\u0442\u0438 \u044d\u0442\u043e \u043c\u043d\u043e\u0433\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u043b\u044e\u0448\u043a\u0430\u043c\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439, \u0431\u044b\u0441\u0442\u0440\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u0434\u0430\u043d\u043d\u044b\u0445, \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a \u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u044f\u0437\u044b\u043a\u0430 ObjectScript. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0433\u043b\u043e\u0431\u0430\u043b\u0430\u0445 \u0432 \u0446\u0438\u043a\u043b\u0435 \u0441\u0442\u0430\u0442\u0435\u0439 \u00ab\u0413\u043b\u043e\u0431\u0430\u043b\u044b \u2014 \u043c\u0435\u0447\u0438-\u043a\u043b\u0430\u0434\u0435\u043d\u0446\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445\u00bb: \u0414\u0435\u0440\u0435\u0432\u044c\u044f. \u0427\u0430\u0441\u0442\u044c 1 \u0414\u0435\u0440\u0435\u0432\u044c\u044f. \u0427\u0430\u0441\u0442\u044c 2 \u0420\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b. \u0427\u0430\u0441\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27448,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36650","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u0423\u0411\u0414 InterSystems IRIS \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.\" \/>\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-v-globalah-intersystems-iris\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\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 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u0430\u0445 InterSystems IRIS | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u0423\u0411\u0414 InterSystems IRIS \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/tranzaktsii-v-globalah-intersystems-iris\" \/>\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-31T19:12:54+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:12:54+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 n\u00eb globalet InterSystems IRIS | ProHoster","description":"Baza e t\u00eb dh\u00ebnave InterSystems IRIS mb\u00ebshtet struktura interesante.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/tranzaktsii-v-globalah-intersystems-iris","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 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u0430\u0445 InterSystems IRIS | ProHoster","og:description":"\u0421\u0423\u0411\u0414 InterSystems IRIS \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/tranzaktsii-v-globalah-intersystems-iris","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-31T19:12:54+00:00","article:modified_time":"2019-10-31T19:12:54+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36650","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-01-22 04:17:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:41:52","updated":"2026-01-22 04:17:19","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\/36650","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=36650"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/36650\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/27448"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=36650"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=36650"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=36650"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}