{"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;\" \/>InterSystems IRIS andmebaas toetab huvitavaid andmestruktuure \u2014 globaalid. Sisuliselt on need mitmeastmelised v\u00f5tmed koos erinevate lisafunktsioonidega, nagu tehingud, kiired funktsioonid andmepuude l\u00e4bimiseks, lukustamine ja oma ObjectScript'i keel.<\/p>\n<p>Rohkem globaalidest artiklisarjas \u00abGlobaalid \u2014 andmete salvestamise m\u00f5\u00f5gakoolid\u00bb:<\/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\/\">H\u00f5redad masstid. Osa 3<\/a><\/noindex><\/p>\n<p>Mind huvitab, kuidas tehingud globaalides on rakendatud, millised on seal omadused. L\u00f5ppude l\u00f5puks on see t\u00e4iesti erinev andmesalvestamisstruktuur, v\u00f5rreldes tuttavate tabelitega. Oluliselt madalama tasandi.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nKuna on teada, et relatsiooniliste andmebaaside teooria kohaselt peab hea tehingute teostus vastama n\u00f5uetele <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/ACID\">ACID<\/a><\/noindex>:<\/p>\n<p><b>A \u2014 Atomite (aatomsus).<\/b> K\u00f5ik tehingus tehtud muutused salvestatakse v\u00f5i mitte \u00fchtegi.<\/p>\n<p><b>C \u2014 Consistency (koosk\u00f5la).<\/b> P\u00e4rast tehingu l\u00f5petamist peab andmebaasi loogiline seisund olema sisemiselt j\u00e4rjekindel. Suurel m\u00e4\u00e4ral puudutab see n\u00f5ue programmeerijat, kuid SQL-andmebaaside puhul puudutab see ka v\u00e4liseid v\u00f5tmeid.<\/p>\n<p><b>I \u2014 Isolate (isoleeritus).<\/b> Samas k\u00e4ivitatud tehingud ei tohiks \u00fcksteisele m\u00f5ju avaldada.<\/p>\n<p><b>D \u2014 Durable (p\u00fcsivus).<\/b> P\u00e4rast tehingu edukat l\u00f5petamist ei tohiks madalama taseme probleemid (n\u00e4iteks toitekaotused) m\u00f5jutada tehingu k\u00e4igus muudetud andmeid.<\/p>\n<p>Globaalid on mittesuhtelised andmestruktuurid. Need on loodud \u00fcliv\u00f5imsateks toiminguteks v\u00e4ga piiratud riistvaral. Uurime, kuidas tehingud globaalides t\u00f6\u00f6tavad, kasutades <noindex><a rel=\"nofollow\" href=\"https:\/\/hub.docker.com\/_\/intersystems-iris-data-platform\/plans\/222f869e-567c-4928-b572-eb6a29706fbd?tab=instructions\">ametlikku docker-pilti IRIS<\/a><\/noindex>.<\/p>\n<p>Tehingute toetamiseks IRIS-is kasutatakse j\u00e4rgmisi k\u00e4sklusi: <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. Aatomilisus<\/h2>\n<p>\nAatomilisuse kontrollimine on k\u00f5ige lihtsam. Kontrollime andmebaasi kontolt.<\/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. Aatomilisus on tagatud: k\u00f5ik muudatused on salvestatud.<\/p>\n<p>Vaatame \u00fclesannet keerulisemaks, sisestame vea ja vaatame, kuidas tehing s\u00e4ilib, osaliselt v\u00f5i \u00fcldse mitte.<\/p>\n<p>Kontrollime aatomilisust veel kord:<\/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>\nSeej\u00e4rel peatame konteineri sundimisega, k\u00e4ivitame selle ja vaatame. <\/p>\n<pre><code class=\"bash\">docker kill my-iris<\/code><\/pre>\n<p>\nSee k\u00e4sk on praktiliselt samav\u00e4\u00e4rne j\u00f5ulise toitev\u00e4ljal\u00fclitamisega, kuna saadab SIGKILL protsessi kohese l\u00f5petamise signaali.<\/p>\n<p>Kas v\u00f5ib juhtuda, et tehing on 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, see ei ole salvestatud.<\/p>\n<p>Katsume 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>\nKa see ei ole salvestatud.<\/p>\n<h2>2. Sidusus<\/h2>\n<p>\nKuna globaalsetes andmebaasides luuakse v\u00f5tmed samuti globaalsetele (meeldetuletuseks, et globaal on madalama taseme struktuur andmete salvestamiseks kui relatsiooniline tabel), peab sidususe n\u00f5ude t\u00e4itmiseks v\u00f5tme muutmine olema sama tehingu osaks kui globaali muutmine.<\/p>\n<p>N\u00e4iteks on meil globaalsed ^person, kuhu salvestame isikuandmed ja v\u00f5tmena kasutame INN-i.<\/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 soovime kiiret otsingut perekonnanime 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>\nEt andmebaas oleks sidus, peame isikuandmed 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 puhul 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, n\u00f5uete j\u00e4rjepidevuse t\u00e4itmine lasub t\u00e4ielikult arendaja \u00f5lgadel. Kuid kui tegemist on globaalidega \u2014 on see normaalne, arvestades nende madalama taseme iseloomu.<\/p>\n<h2>3. Isolatsioon<\/h2>\n<p>\nSiinkohal algavad p\u00f5hjalikud probleemid. Paljud kasutajad t\u00f6\u00f6tavad sama andmebaasi kallal, muutes samu andmeid.<\/p>\n<p>See olukord on sarnane olukorraga, kus mitmed kasutajad t\u00f6\u00f6tavad sama koodirepositooriumi kallal ja \u00fcritavad samal ajal teha muudatusi paljudes failides.<\/p>\n<p>Andmebaas peab seda k\u00f5ike reaalajas haldama. Arvestades, et t\u00f5sistes ettev\u00f5tetes on isegi eraldi inimene, kes vastutab versioonihalduse (harude sulandumine, konfliktide lahendamine jne) eest, ja andmebaasi peaks seda tegema reaalajas, siis on \u00fclesande keerukus ja andmebaasi ning selle halduskoodi korrektne projekteerimine ilmne.<\/p>\n<p>Andmebaas ei saa m\u00f5ista kasutajate teoste t\u00e4hendust, et v\u00e4ltida konflikte, kui nad t\u00f6\u00f6tavad sama andmete kallal. Ta suudab vaid t\u00fchistada \u00fche tehingu, mis on vastuolus teisega, v\u00f5i t\u00e4ita need j\u00e4rjestikku.<\/p>\n<p>Veel \u00fcks probleem on see, et tehingu t\u00e4itmise ajal (enne kinnitust) v\u00f5ib andmebaas olla \u00fchtlustamata olekus, seet\u00f5ttu on soovitatav, et teistel tehingutel ei oleks juurdep\u00e4\u00e4su \u00fchtlustamata andmebaasi olekule, mida saavutatakse relatsioonilistes andmebaasides paljusid viise kaudu: l\u00f5ikepunktide loomine, mitme versiooni ridade kasutamine jne.<\/p>\n<p>Paralleelse tehingute t\u00e4itmise puhul on meil oluline, et nad ei segaks \u00fcksteist. See ongi isoleerimise omadus.<\/p>\n<p>SQL m\u00e4\u00e4ratleb 4 isoleerimistaset:<\/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>\nVaatame iga taset eraldi. Iga taseme rakendamise kulud kasvavad peaaegu eksponentsiaalselt.<\/p>\n<p><b>READ UNCOMMITTED<\/b> \u2014 see on madalaim isoleerimistaseme tase, kuid samas ka k\u00f5ige kiirem. Tehingud saavad lugeda \u00fcksteise tekitatud muudatusi.<\/p>\n<p><b>READ COMMITTED<\/b> \u2014 see on j\u00e4rgmine isoleerimistaseme tase, mis on kompromiss. Tehingud ei saa lugeda \u00fcksteise tekitatud muudatusi enne kinnitamist, kuid saavad lugeda p\u00e4rast kinnitamist tehtud muudatusi.<\/p>\n<p>Kui meil on pikk tehing T1, mille jooksul toimuvad kinnitused tehingutes T2, T3 ... Tn, mis t\u00f6\u00f6tasid sama andmete kallal nagu T1, siis T1-s andmeid k\u00fcsides saame me alati erinevaid tulemusi. Seda n\u00e4htust nimetatakse mittet\u00e4ielikuks lugemiseks.<\/p>\n<p><b>REPEATABLE READ<\/b> \u2014 selle isolatsioonitaseme juures ei esine korduvat lugemist, kuna iga andmelugemise p\u00e4ringu jaoks luuakse andmessnapshot ja sama tehingu jooksul kasutatakse seda snapshot'i andmeid. Kuid selle isolatsiooni taseme puhul on v\u00f5imalik lugeda fantoomandmeid. See t\u00e4hendab, et on v\u00f5imalik lugeda uusi ridu, mis on lisatud paralleelsete kinnitatud tehingute kaudu.<\/p>\n<p><b>SERIALIZABLE<\/b> \u2014 k\u00f5rgeim isolatsioonitase. Selle tunnuseks on see, et tehingus kasutatavad andmed (kas lugemine v\u00f5i muutmine) on teistele tehingutele k\u00e4ttesaadavad alles p\u00e4rast esimeses tehingus l\u00f5petamist.<\/p>\n<p>K\u00e4ime esmalt l\u00e4bi, kas tehingus toimingud on peastreamist isoleeritud. Avame kaks terminaliakent.<\/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 pole. \u00dcks l\u00f5im n\u00e4eb, mida teeb teine, kes avas tehingu.<\/p>\n<p>Vaadakem, kas erinevate l\u00f5imude tehingud n\u00e4evad, mis toimub nende sees. <\/p>\n<p>Avame kaks terminaliakent ja avame samal ajal kaks tehingut.<\/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. Nii saime k\u00f5ige lihtsama, aga ka k\u00f5ige kiirema isoleerimise taseme READ UNCOMMITED.<\/p>\n<p>P\u00f5him\u00f5tteliselt sai seda oodata globaalide jaoks, mille puhul on j\u00f5udlus alati peamine prioriteet. <\/p>\n<p>Kuidas siis tegelikult toimida, kui meil on vaja k\u00f5rgemat isoleerimise taset globaalide operatsioonides?<\/p>\n<p>Siin tuleb m\u00f5elda, miks isoleerimistaset \u00fcldse vaja on ja kuidas need toimivad.<\/p>\n<p>K\u00f5rgeim isoleerimise tase SERIALIZE t\u00e4hendab, et paralleelselt t\u00e4idetud tehingute tulemus on v\u00f5rreldav nende j\u00e4rjestikuse t\u00e4itmisega, mis garanteerib konfliktide puudumise.<\/p>\n<p>Seda saame teha \u00f5igete lukustustega ObjectScriptis, mis pakuvad palju erinevaid rakendusi: saame teha tavalisi, j\u00e4rjestikuseid ja mitmeosalisi lukustusi 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 isoleerimise tasemed on kompromissid, mille eesm\u00e4rk on suurendada andmebaasi t\u00f6\u00f6kiirust.<\/p>\n<p>Vaatame, kuidas me saame lukustuste abil saavutada erinevaid isoleerimise tasemeid.<\/p>\n<p>See operaator v\u00f5imaldab mitte ainult eksklusiivsete lukustuste rakendamist, mis on vajalikud andmete muutmiseks, vaid ka nn jagatud lukustusi, mida saavad korraga kasutada mitmed niidid, kui nad peavad lugema andmeid, mida ei tohiks teiste protsesside poolt lugemise ajal muuta.<\/p>\n<p>Lisateave kahefaasilise lukustamismeetodi 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 lukustamine<\/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 olek olla koosk\u00f5lmatu, kuid need koosk\u00f5lmatud andmed on n\u00e4htavad teistele protsessidele. Kuidas seda v\u00e4ltida?<\/p>\n<p>Loome lukustuste abil sellised n\u00e4htavuse aknad, kus andmebaasi olek on koosk\u00f5las. Ja k\u00f5ik juurdep\u00e4\u00e4sud sellistele koosk\u00f5lastatud oleva n\u00e4htavuse akendele kontrollitakse lukustuste kaudu.<\/p>\n<p>Jagatud lukustused samadele andmetele on korduvkasutatavad \u2014 nendele saavad juurdep\u00e4\u00e4su mitmed protsessid. Need lukustused keelavad muudele protsessidele andmete muutmise, st neid kasutatakse andmebaasi koosk\u00f5lastatud oleku akende vormimiseks.<\/p>\n<p>Eksklusiivsed lukud kasutatakse andmete muutmiseks \u2014 sellist lukku saab v\u00f5tta ainult \u00fcks protsess. Eksklusiivset lukku saab v\u00f5tta:<\/p>\n<ol>\n<li>Iga protsess, kui andmed on vabad<\/li>\n<li>Ainult see protsess, millel on nende andmete suhtes jagatud lukustus ja kes esimene k\u00fcsis 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\u00e4htavusakna, seda kauem peavad teised protsessid ootama, kuid sellel v\u00f5ib olla \u00fchtlasem andmebaasi olek.<\/p>\n<p><b>READ_COMMITED<\/b> \u2014 selle taseme peamine m\u00f5te on see, et me n\u00e4eme ainult erinevates voogudes kinnitatud andmeid. Kui andmed teises tehingus pole veel kinnitatud, siis n\u00e4eme nende vana versiooni.<\/p>\n<p>See v\u00f5imaldab meil t\u00f6\u00f6d paralleelselt k\u00e4ia, selle asemel et oodata lukkude vabastamist.<\/p>\n<p>Ilma eriliste trikkideta ei suuda me IRISes n\u00e4ha vana andmeversiooni, seega peame loobuma lukustustest.<\/p>\n<p>Seega peame jagatud lukustuste abil lubama andmete lugemist ainult koosk\u00f5la hetkedel.<\/p>\n<p>Oletame, et meil on kasutajate andmebaas ^person, kes kannavad raha \u00fcksteisele.<\/p>\n<p>Raha\u00fclekande hetk isikute 123 ja 242 vahel:<\/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>\nIsiku 123 rahasumma k\u00fcsimine enne mahaarvamist peab olema seotud eksklusiivse lukustamisega (vaikimisi):<\/p>\n<pre><code class=\"bash\">LOCK +^person(123)\nWrite ^person(123)<\/code><\/pre>\n<p>\nKui tuleb n\u00e4idata konto seisu isiklikus kabinetis, v\u00f5ib kasutada jagatud lukustust v\u00f5i j\u00e4tta see kasutamata:<\/p>\n<pre><code class=\"bash\">LOCK +^person(123)#\u201dS\u201d\nWrite ^person(123)<\/code><\/pre>\n<p>\nKuid kui eeldada, et andmebaasi tehingud toimuvad praktiliselt koheselt (meenutame, et globaalid on palju madalama taseme struktuur kui relatiivne tabel), siis on selle taseme vajadus v\u00e4henenud.<\/p>\n<p><b>REPEATABLE READ<\/b> \u2014 selle isolatsiooni taseme juures lubatakse, et andmeid v\u00f5idakse lugeda mitmeid kordi, mida v\u00f5ivad muuta paralleelsed tehingud. <\/p>\n<p>Seet\u00f5ttu peame seadma jagatud lukustuse neile andmetele, mida me muudame, ja eksklusiivsed lukustused andmetele, mida me muudame.<\/p>\n<p>Hea on see, et LOCK operaator v\u00f5imaldab \u00fches k\u00e4skluses detailsemalt loetleda k\u00f5ik vajalikud lukustused, mida v\u00f5ib olla v\u00e4ga palju.<\/p>\n<pre><code class=\"bash\">LOCK +^person(123, amount)#\u201dS\u201d\nLugemine ^person(123, amount)<\/code><\/pre>\n<p>\nteised toimingud (selle ajal \u00fcheaegselt katsetab voog ^person(123, amount), kuid ei \u00f5nnestu)<\/p>\n<pre><code class=\"bash\">LOCK +^person(123, amount)\nmuutmine ^person(123, amount)\nLOCK -^person(123, amount)\n\nlugemine ^person(123, amount)\nLOCK -^person(123, amount)#\u201dS\u201d<\/code><\/pre>\n<p>\nKui loetleda lukustusi komaga, siis need v\u00f5etakse j\u00e4rjestikku, kuid kui teha nii:<\/p>\n<pre><code class=\"bash\">LOCK +(^person(123),^person(242))<\/code><\/pre>\n<p>\nsiis need v\u00f5etakse atomaarsemalt k\u00f5ik korraga.<\/p>\n<p><b>SERIALIZE<\/b> \u2014 peame lukustusi seadma nii, et l\u00f5puks k\u00f5ik tehingud, mis omavad \u00fchiseid andmeid, toimuksid j\u00e4rjestikku. Selle l\u00e4henemise jaoks peaksid enamik lukustusi olema eksklusiivsed ja katma v\u00e4ikseimaid ala globaalses s\u00fcsteemis, et saavutada paremat j\u00f5udlust.<\/p>\n<p>Kui r\u00e4\u00e4kida rahade mahakandmist globaalsetes ^person, siis selle jaoks on sobiv ainult SERIALIZE eraldusv\u00f5ime, kuna raha peab kulutama rangelt j\u00e4rjestikku, vastasel juhul v\u00f5ib sama summat kulutada mitu korda.<\/p>\n<h2>4. P\u00fcsivus<\/h2>\n<p>\nMa tegin katseid konteineri j\u00e4rsu v\u00e4ljal\u00fclitamisega l\u00e4bi<\/p>\n<pre><code class=\"bash\">docker kill my-iris<\/code><\/pre>\n<p>\nAndmebaas talus seda h\u00e4sti. Probleeme ei tuvastatud.<\/p>\n<h2>Kokkuv\u00f5te<\/h2>\n<p>\nInterSystems IRIS'is on globaalsed tehingute tugi. Need on t\u00f5eliselt atomaarset ja usaldusv\u00e4\u00e4rset. Andmebaasi j\u00e4rjepidevuse tagamiseks globaalses keskkonnas on arendaja pingutused ning tehingute kasutamine vajalik, kuna keerulised sisseehitatud konstruktsioonid, nagu v\u00e4lised v\u00f5tmed, puuduvad.<\/p>\n<p>Globaalide eraldusaste ilma lukustusteta on READ UNCOMMITTED, ja lukustuste kasutamise korral saab tagada isegi SERIALIZE taseme.<\/p>\n<p>Globaalide tehingute \u00f5igsus ja kiirus s\u00f5ltuvad v\u00e4ga palju arendaja oskustest: mida laiemalt kasutatakse jagatud lukustusi lugemisel, seda k\u00f5rgem on eraldatusetunne, ja mida kitsamad on eksklusiivsed lukustused, seda suurem on 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.0.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 \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\" \/>\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.0.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 \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\" \/>\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\udd47InterSystems IRISi globaaltehingud | ProHoster","description":"InterSystems IRIS andmebaasis\u00fcsteem toetab huvitavaid andmestruktuure \u2014 gloobuseid. Need on p\u00f5him\u00f5tteliselt mitmetasandilised v\u00f5tmed erinevate t\u00e4iendavate omadustega nagu tehingud, kiirete funktsioonide v\u00f5imalused andmepuude l\u00e4bimiseks, lukustused ja oma ObjectScript keel. Rohkem globaalsest c\u00fcklidest artiklite sarjas 'Globaalid \u2014 andmete ladustamise m\u00f5\u00f5gakotid': Puud. Osa 1 Puud. Osa 2 Haruldased massiivid. Osa","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 \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","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}]}}