{"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\/et\/blog\/administrirovanie\/tranzaktsii-v-globalah-intersystems-iris","title":{"rendered":"Tehingud InterSystems IRIS globaalides","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Tehingud InterSystems IRIS globaalides\" src=\"\/wp-content\/uploads\/2019\/07\/ee4e58369616511dc213f94158b04e4f.jpg\" style=\"display:block;margin: 0 auto;\" \/>Andmebaasi InterSystems IRIS toetab huvitavaid andmestruktuure - globaalid. Tegelikult on need mitmetasandilised v\u00f5tmed, millel on erinevad lisafunktsioonid, nagu tehingud, kiire funktsionaalsus andmepuude l\u00e4bimiseks, lukustused ja oma keele ObjectScript.<\/p>\n<p>Rohkem globaalsest s\u00fcgiseks artiklite ts\u00fcklis \u201eGlobaalid - andmete salvestamise m\u00f5\u00f5gad\u201d:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/263791\/\">Puud. Osa 1<\/a><\/noindex> <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/264173\/\">Puud. Osa 2<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/268465\/\">Sparssed massiivid. Osa 3<\/a><\/noindex><\/p>\n<p>Mind huvitab, kuidas tehingud globaalides on ellu viidud, millised omadused seal on. See on ju t\u00e4iesti erinev andmestruktuur v\u00f5rreldes traditsiooniliste tabelitega. Oluliselt madalamal tasemel.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nKuna on teada, et relatsiooniliste andmebaaside teooriast peaks hea tehingu teostus vastama n\u00f5uetele <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/ACID\">ACID<\/a><\/noindex>:<\/p>\n<p><b>A - Atoomilisus.<\/b> Kogu tehingu jooksul tehtud muudatused peavad olema kas t\u00e4iesti salvestatud v\u00f5i mitte midagi.<\/p>\n<p><b>C - Konsistentsus.<\/b> Tehingu l\u00f5puks peab andmebaasi loogiline seisund olema omavahel koosk\u00f5las. Suur osa sellest n\u00f5udest puudutab programmeerijat, kuid SQL-andmebaaside puhul kehtib see ka v\u00e4liste v\u00f5tmete kohta.<\/p>\n<p><b>I - Isolatsioon.<\/b> Samal ajal toimuvad tehingud ei tohiks \u00fcksteist m\u00f5jutada.<\/p>\n<p><b>D - Vastupidavus.<\/b> P\u00e4rast tehingu edukat l\u00f5petamist ei tohiks madalama taseme probleemid (nt voolukatkestus) m\u00f5jutada tehingu k\u00e4igus muudetud andmeid.<\/p>\n<p>Globaalid on relatsioonilised andmestruktuurid. Need loodi \u00fclikiireks t\u00f6\u00f6ks v\u00e4ga piiratud riistvaral. Uurime, kuidas tehingud globaalides on ellu viidud <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/_\/intersystems-iris-data-platform\/plans\/222f869e-567c-4928-b572-eb6a29706fbd?tab=instructions\">ametliku docker-pildi IRIS abil<\/a><\/noindex>.<\/p>\n<p>Tehingute toetamiseks IRIS-is kasutatakse j\u00e4rgmisi k\u00e4ske: <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. Atoomilisus<\/h2>\n<p>\nAtoomilisust on k\u00f5ige lihtsam kontrollida. Kontrollime andmebaasi konsoolist.<\/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>\nSeej\u00e4rel teeme j\u00e4relduse:<\/p>\n<pre><code class=\"bash\">Write ^a(1), \u201c \u201d, ^a(2), \u201c \u201d, ^a(3)<\/code><\/pre>\n<p>\nSaame:<\/p>\n<pre><code class=\"bash\">1 2 3<\/code><\/pre>\n<p>\nK\u00f5ik on korras. Atoomilisus on tagatud: k\u00f5ik muudatused on salvestatud.<\/p>\n<p>V\u00f5tame \u00fclesande keerulisemaks, sisse viies vea, ja vaatame, kuidas tehing s\u00e4ilib, osaliselt v\u00f5i \u00fcldse mitte.<\/p>\n<p>Kordame atooblisuse kontrolli:<\/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>\nP\u00e4rast seda peatame konteineri sunniviisil, k\u00e4ivitame selle uuesti ja vaatame. <\/p>\n<pre><code class=\"bash\">docker kill my-iris<\/code><\/pre>\n<p>\nSee k\u00e4sk on praktiliselt ekvivalentne j\u00e4rsu voolu katkestamisega, kuna see saadab protsessile SIGKILL kohese peatumise signaali.<\/p>\n<p>Kas tehing v\u00f5ib olla osaliselt salvestatud?<\/p>\n<pre><code class=\"bash\">WRITE ^a(1), ^a(2), ^a(3)\n^\n ^a(1)<\/code><\/pre>\n<p>\n \u2014 Ei, ei salvestunud.<\/p>\n<p>Proovime tagasip\u00f6\u00f6rdumise k\u00e4sku:<\/p>\n<pre><code class=\"bash\">Kill ^A\nTSTART\nSet ^a(1) = 1\nSet ^a(2) = 2\nSet ^a(3) = 3\nTROLLBACK\n\nWRITE ^a(1), ^a(2), ^a(3)\n^\n ^a(1)<\/code><\/pre>\n<p>\nSamuti ei salvestunud midagi.<\/p>\n<h2>2. \u00dchtsus<\/h2>\n<p>\nKuna globaalides luuakse v\u00f5tmed samuti globaalide j\u00e4rgi (tuletan meelde, et gloobaal on madalama taseme struktuur andmete salvestamiseks kui relatsiooniline tabel), peab \u00fchtsuse n\u00f5ude t\u00e4itmiseks v\u00f5tme muutmine olema sama tehingu sees nagu gloobala muutmine.<\/p>\n<p>N\u00e4iteks meil on gloobaal ^person, kus salvestame isikute andmeid ja v\u00f5tmena kasutame isikukoodi.<\/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>\nKuna kiireks otsinguks perekonna nime ja eesnime j\u00e4rgi, l\u00f5ime v\u00f5tme ^index.<\/p>\n<pre><code class=\"bash\">^index(\u2018Kamenev\u2019, \u2018Sergey\u2019, 1234567) = 1<\/code><\/pre>\n<p>\nSelleks, et andmebaas oleks \u00fchtne, peame isikuandmeid lisama j\u00e4rgmiselt:<\/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>\nSeega, kustutamise korral peame samuti kasutama tehingut:<\/p>\n<pre><code class=\"bash\">TSTART\nKill ^person(1234567)\nZKill ^index(\u2018Kamenev\u2019, \u2018Sergey\u2019, 1234567)\nTCOMMIT<\/code><\/pre>\n<p>\nTeisis\u00f5nu, \u00fchtsuse n\u00f5uete t\u00e4itmine lasub t\u00e4ielikult programmeerija \u00f5lul. Kuid kui me r\u00e4\u00e4gime globaalidest, on see normaalne, kuna nende madalama taseme loomus.<\/p>\n<h2>3. Isolatsioon<\/h2>\n<p>\nSiin hakkavad keerulised asjad pihta. Paljud kasutajad t\u00f6\u00f6tavad sama andmebaasi kallal samal ajal, muutes samu andmeid.<\/p>\n<p>Situatsioon on v\u00f5rreldav sellega, kui palju kasutajaid \u00fcritab samaaegselt t\u00f6\u00f6tada \u00fche ja sama koodi hoidla kallal ning \u00fcritavad korraga teha komiteeringuid paljude failide osas.<\/p>\n<p>Andmebaas peab seda k\u00f5ike lahendama reaalajas. Arvestades, et t\u00f5sistes ettev\u00f5tetes on isegi spetsiaalne isik, kes vastutab versioonihalduse eest (harude \u00fchinemine, konfliktide lahendamine jne), ja andmebaas peab seda k\u00f5ike tegema reaalajas, siis tekib selge \u00fclesande keerukus ning andmebaasi ja sellele teenindava koodi \u00f5ige projekteerimise vajadus.<\/p>\n<p>Andmebaas ei saa m\u00f5ista, mida kasutajad teevad, et v\u00e4ltida konflikte, kui nad t\u00f6\u00f6tavad sama teabega. See suudab ainult t\u00fchistada \u00fche tehingu, mis on vastur\u00e4\u00e4kiv teisele, v\u00f5i t\u00e4ita need j\u00e4rjestikku.<\/p>\n<p>Veel \u00fcks probleem on see, et tehingu t\u00e4itmise ajal (enne kinnitamist) v\u00f5ib andmebaasi seisund olla \u00fchitamatu, seet\u00f5ttu on soovitav, et teised tehingud ei p\u00e4\u00e4seks \u00fchitamata andmebaasi olekusse. Rikkalikud andmebaasid saavutavad selle mitmel viisil: l\u00f5ike loomise, versioonide haldamise jne kaudu.<\/p>\n<p>Tehingute paralleelsel t\u00e4itmisel on oluline, et need ei segaks \u00fcksteist. See on isoleerituse omadus.<\/p>\n<p>SQL m\u00e4\u00e4ratleb 4 isoleerituse taset:<\/p>\n<ul>\n<li>READ UNCOMMITTED<\/li>\n<li>READ COMMITTED<\/li>\n<li>REPEATABLE READ<\/li>\n<li>SERIALIZABLE<\/li>\n<\/ul>\n<p>\nVaadakem iga taset eraldi. Iga taseme rakendamise kulud kasvavad peaaegu eksponentsiaalselt.<\/p>\n<p><b>READ UNCOMMITTED<\/b> \u2014 see on madalaim isoleerituse tase, kuid samal ajal ka kiireim. Tehingud saavad lugeda \u00fcksteise tehtud muudatusi.<\/p>\n<p><b>READ COMMITTED<\/b> \u2014 see on j\u00e4rgmine isoleerituse tase, mis on kompromiss. Tehingud ei saa lugeda \u00fcksteise tehtud muudatusi enne kinnitamist, kuid saavad lugeda k\u00f5iki muudatusi, mis on tehtud p\u00e4rast kinnitamist.<\/p>\n<p>Kui meil on pikk tehing T1, mille jooksul on toimunud kinnitamised tehingutes T2, T3 \u2026 Tn, mis t\u00f6\u00f6tasid sama teabega nagu T1, siis T1-s andmeid k\u00fcsides saame iga kord erineva tulemuse. Seda n\u00e4htust nimetatakse mitteuuesti lugemiseks.<\/p>\n<p><b>REPEATABLE READ<\/b> \u2014 selle isoleerituse tasemega ei ole meil mitteuuesti lugemise n\u00e4htust, kuna iga kord, kui andmeid loetakse, luuakse andmete tulemi l\u00f5ige, ja selles sama tehingus kasutatakse andmeid l\u00f5igetest. Kuid selle isoleerituse taseme korral on v\u00f5imalik lugeda fantoomandmeid, mille alla kuuluvad uute ridade lugemine, mis on lisatud paralleelsete kinnitatud tehingute poolt.<\/p>\n<p><b>SERIALIZABLE<\/b> \u2014 k\u00f5rgeim isoleerituse tase. Sellel on see omadus, et tehingus kasutatavad andmed (lugemiseks v\u00f5i muutmiseks) muutuvad teistele tehingutele k\u00e4ttesaadavaks alles p\u00e4rast esimest tehingu l\u00f5petamist.<\/p>\n<p>Alustame sellest, kas tehingutes on toimingute isolatsioon peavoolust. Avame 2 terminali aken.<\/p>\n<pre><code class=\"bash\">Kill ^t\n\nWrite ^t(1)\n2<\/code><\/pre>\n<pre><code class=\"bash\">\nTSTART\nSet ^t(1)=2<\/code><\/pre>\n<p>\nIsolatsiooni ei ole. \u00dcks voog n\u00e4eb, mida teeb teine, kes avas tehingu.<\/p>\n<p>Vaadakem, kas erinevate voogude tehingud n\u00e4evad, mis toimub nende sees. <\/p>\n<p>Avame 2 terminali akent ja avame 2 tehingut paralleelselt.<\/p>\n<pre><code class=\"bash\">kill ^t\nTSTART\nWrite ^t(1)\n3<\/code><\/pre>\n<pre><code class=\"bash\">\nTSTART\nSet ^t(1)=3\n<\/code><\/pre>\n<p>\nParalleelsed tehingud n\u00e4evad \u00fcksteise andmeid. Niisiis saime k\u00f5ige lihtsama, kuid ka k\u00f5ige kiirema isolatsioonitase READ UNCOMMITED.<\/p>\n<p>P\u00f5him\u00f5tteliselt oli seda oodata globaalselt, kus t\u00f5husus oli alati esmat\u00e4htis. <\/p>\n<p>Kuidas toimida, kui me vajame globaalsetes toimingutes k\u00f5rgemat isolatsioonitaset?<\/p>\n<p>Siin tasub m\u00f5elda, miks \u00fcldse on vajalikud isolatsioonitasemed ja kuidas need toimivad.<\/p>\n<p>K\u00f5rgeim isolatsioonitase SERIALIZE t\u00e4hendab, et paralleelselt teostatavate tehingute tulemus on ekvivalentne nende j\u00e4rjestikusele teostamisele, mis tagab konflikti puudumise.<\/p>\n<p>Seda saame teha, kasutades h\u00e4sti planeeritud lukustusi ObjectScriptis, mis pakuvad mitmeid rakendusi: v\u00f5ime teha tavalise, inkrementaalse, mitmeotstarbelise lukustamise k\u00e4suga <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>Madalamad isolatsioonitasemed on kompromissid, mille eesm\u00e4rk on suurendada andmebaasi t\u00f6\u00f6kiirus.<\/p>\n<p>Vaadakem, kuidas saame lukustuste abil saavutada erinevaid isolatsioonitasemeid.<\/p>\n<p>See k\u00e4sk v\u00f5imaldab v\u00f5tta mitte ainult eksklusiivseid lukustusi, mis on vajalikud andmete muutmiseks, vaid ka nn jagatud lukustusi, mida saavad korraga mitu voogu, kui nad peavad lugema andmeid, mida ei tohi teiste protsesside poolt lugemise ajal muuta.<\/p>\n<p>Rohkem teavet kahefaasilise lukustamise meetodi kohta vene ja inglise keeles:<\/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\">Kahefaasiline lukustus<\/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>Raskus seisneb selles, et tehingu ajal v\u00f5ib andmebaasi seisund olla konsolideerimata, kuid need konsolideerimata andmed on teistele protsessidele n\u00e4htavad. Kuidas seda v\u00e4ltida?<\/p>\n<p>Loome lukustuste abil sellised vaateaknad, kus andmebaasi seisund on konsolideeritud. Ja k\u00f5ik sellistele konsolideeritud seisundi vaateakendele tehtavad p\u00e4ringud kontrollitakse lukustuste abil.<\/p>\n<p>Jagatud lukud samaaegsetele andmetele on korduvkasutatavad - need v\u00f5ivad omada mitu protsessi. Need lukud keelavad teistel protsessidel andmete muutmist, st neid kasutatakse andmebaasi konsolideeritud oleku akende moodustamiseks.<\/p>\n<p>Eksklusiivsed lukud on kasutusel andmete muutmiseks - sellist lukku saab omada ainult \u00fcks protsess. Eksklusiivset lukku saab v\u00f5tta:<\/p>\n<ol>\n<li>Iga protsess, kui andmed on vabastatud<\/li>\n<li>Ainult see protsess, millel on nende andmete jagatud lukud ja kes esimesena soovis eksklusiivset lukku.<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Tehingud InterSystems IRIS globaalides\" src=\"\/wp-content\/uploads\/2019\/07\/bb91ed1268925bc1b9266763ab82646a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMida kitsam on n\u00e4htavusaken, seda kauem peavad teised protsessid ootama, kuid seda \u00fchtlasem v\u00f5ib andmebaasi olek selles olla.<\/p>\n<p><b>READ_COMMITTED<\/b> \u2014 selle taseme sisu on, et n\u00e4eme ainult teistest voogudest kinnitatud andmeid. Kui andmed teises tehingus ei ole veel kinnitatud, siis n\u00e4eme nende vana versiooni.<\/p>\n<p>See v\u00f5imaldab meil t\u00f6\u00f6d paralleliseerida, selle asemel et oodata luku vabastamist.<\/p>\n<p>Ilma spetsiaalsete n\u00f5tkusteta ei n\u00e4e me vana andmeversiooni IRISes, seet\u00f5ttu peame rahulduma lukudega.<\/p>\n<p>Seega peame jagatud lukudega lubama andmete lugemise ainult koosk\u00f5lastusmomentide ajal.<\/p>\n<p>Oletame, et meil on kasutajate andmebaas ^person, kes kannavad \u00fcksteisele raha.<\/p>\n<p>Raha\u00fclekande hetk isikult 123 isikule 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>\nRaha summa k\u00fcsimise hetk isikult 123 enne arveldamist peab olema kaasas eksklusiivne lukustamine (vaikimisi):<\/p>\n<pre><code class=\"bash\">LOCK +^person(123)\nWrite ^person(123)<\/code><\/pre>\n<p>\nKui peab n\u00e4itama konto seisu isiklikus kabinetis, siis saab kasutada jagatud lukku v\u00f5i \u00fcldse mitte kasutada:<\/p>\n<pre><code class=\"bash\">LOCK +^person(123)#\u201dS\u201d\nWrite ^person(123)<\/code><\/pre>\n<p>\nKuid kui eeldada, et andmebaasi muudatuste teostamine toimub peaaegu koheselt (meenutan, et globaalid on palju madalamal tasemel struktuur kui suhteline tabel), siis on selle taseme vajadus v\u00e4henenud.<\/p>\n<p><b>REPEATABLE READ<\/b> \u2014 selle isolatsiooni tasemel on lubatud, et andmete lugemised, mida v\u00f5ivad muuta paralleelsed tehingud, v\u00f5ivad olla mitu. <\/p>\n<p>Seega peame jagatud lukku panema andmete lugemiseks, mida me muudame ja eksklusiivsed lukud andmete jaoks, mida me muudame.<\/p>\n<p>LOCK operaator v\u00f5imaldab \u00fches operaatoris detailselt loetleda k\u00f5ik vajalikud lukustused, mida v\u00f5ib olla v\u00e4ga palju.<\/p>\n<pre><code class=\"bash\">LOCK +^person(123, amount)#\u201dS\u201d\nloe ^person(123, amount)<\/code><\/pre>\n<p>\nmuid operatsioone (sel ajal \u00fcritavad paralleelsed vood ^person(123, amount) muuta, kuid ei saa)<\/p>\n<pre><code class=\"bash\">LOCK +^person(123, amount)\nmuuda ^person(123, amount)\nLOCK -^person(123, amount)\n\nloe ^person(123, amount)\nLOCK -^person(123, amount)#\u201dS\u201d<\/code><\/pre>\n<p>\nLukustuste loetlemisel koma kaudu v\u00f5etakse neid j\u00e4rjestikku, aga kui teha nii:<\/p>\n<pre><code class=\"bash\">LOCK +(^person(123),^person(242))<\/code><\/pre>\n<p>\nsiis v\u00f5etakse need atomaarsetena korraga.<\/p>\n<p><b>SERIALIZE<\/b> \u2014 me peame seadma lukustused nii, et l\u00f5puks k\u00f5ik tehingud, mis omavad \u00fchiseid andmeid, teostatakse j\u00e4rjestikku. Selle l\u00e4henemise jaoks peavad enamik lukustustest olema eksklusiivsed ja v\u00f5etud k\u00f5ige v\u00e4iksematel globaalsetel aladel, et tagada tulemuslikkus.<\/p>\n<p>Kui r\u00e4\u00e4kida vahendite v\u00e4ljav\u00f5tmisest globaalsetes ^person, siis on selle jaoks vastuv\u00f5etav vaid SERIALIZE isolatsioonitase, kuna raha tuleb kulutada rangelt j\u00e4rjestikku, vastasel juhul on v\u00f5imalik kulutada sama summa mitu korda.<\/p>\n<h2>4. Kestus<\/h2>\n<p>\nOlen teinud katseid konteineri j\u00e4rsu v\u00e4ljal\u00fclitamisega<\/p>\n<pre><code class=\"bash\">docker kill my-iris<\/code><\/pre>\n<p>\nAndmebaas talus seda h\u00e4sti. Probleeme ei olnud.<\/p>\n<h2>Kokkuv\u00f5te<\/h2>\n<p>\nGlobaalide jaoks InterSystems IRIS-is on tehingute tugi. Need on t\u00f5eliselt atomaarsetes ja usaldusv\u00e4\u00e4rsetes. Andmebaasi j\u00e4rjepidevuse tagamiseks globaalides on vajalik programmeerija pingutus ja tehingute kasutamine, kuna seal ei ole keerulisi sisseehitatud struktuure, nagu v\u00e4lised v\u00f5tmed.<\/p>\n<p>Globaalide isolatsioonitase lukustuste kasutamata on READ UNCOMMITTED, aga lukustuste kasutamise korral v\u00f5ib selle tagada kuni SERIALIZE tasemeni.<\/p>\n<p>Tehingute korrektne ja kiire toimimine globaalides s\u00f5ltub v\u00e4ga palju programmeerija oskustest: mida rohkem kasutatakse jagatud lukustusi lugemisel, seda k\u00f5rgem on isolatsioonitase, ja mida kitsamalt v\u00f5etakse eksklusiivseid lukustusi, seda rohkem suureneb j\u00f5udlus.<br \/>\n<br \/>Allikas: <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.1.1 - 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\/et\/blog\/administrirovanie\/tranzaktsii-v-globalah-intersystems-iris\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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\udd47Tehingud globaalides InterSystems IRIS | ProHoster","description":"Andmebaasis InterSystems IRIS on huvitavad struktuurid.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/tranzaktsii-v-globalah-intersystems-iris","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/36650","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=36650"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/36650\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/27448"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=36650"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=36650"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=36650"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}