Tranzaksyon nan InterSystems IRIS globals

Tranzaksyon nan InterSystems IRIS globalsInterSystems IRIS DBMS sipòte estrikti enteresan pou estoke done - globals. Esansyèlman, sa yo se kle milti-nivo ak divès kalite kado adisyonèl nan fòm tranzaksyon, fonksyon rapid pou travèse pye bwa done, kadna ak pwòp lang ObjectScript li yo.

Li plis sou global nan seri atik "Global yo se trezò-epe pou estoke done":

Pye bwa. Pati 1
Pye bwa. Pati 2
Etalaj ra. Pati 3

Mwen te vin enterese nan ki jan tranzaksyon yo aplike nan globals, ki karakteristik ki genyen. Apre yo tout, sa a se yon estrikti konplètman diferan pou estoke done pase tab abityèl yo. Nivo pi ba anpil.

Kòm li te ye nan teyori a nan baz done relasyon, yon bon aplikasyon nan tranzaksyon yo dwe satisfè kondisyon yo ASID:

A - Atomik (atomisite). Tout chanjman ki fèt nan tranzaksyon an oswa okenn chanjman yo anrejistre.

C - Konsistans. Apre yon tranzaksyon fini, eta lojik baz done a dwe konsistan anndan an. Nan plizyè fason egzijans sa a konsène pwogramè a, men nan ka baz done SQL li konsène tou kle etranje yo.

I - Izole. Tranzaksyon ki fèt an paralèl pa ta dwe afekte youn ak lòt.

D - dirab. Apre yon tranzaksyon fini avèk siksè, pwoblèm nan nivo pi ba yo (echèk kouran, pou egzanp) pa ta dwe afekte done yo chanje pa tranzaksyon an.

Global yo se estrikti done ki pa relasyon. Yo te fèt yo kouri super vit sou pyès ki nan konpitè trè limite. Ann gade nan aplikasyon tranzaksyon nan globals lè l sèvi avèk ofisyèl IRIS docker imaj.

Pou sipòte tranzaksyon nan IRIS, yo itilize kòmandman sa yo: KÒMANSE, TCOMMIT, TROLLBACK.

1. Atomisite

Fason ki pi fasil pou tcheke se atomite. Nou tcheke nan konsole baz done a.

Kill ^a
TSTART
Set ^a(1) = 1
Set ^a(2) = 2
Set ^a(3) = 3
TCOMMIT

Lè sa a, nou konkli:

Write ^a(1), “ ”, ^a(2), “ ”, ^a(3)

Nou jwenn:

1 2 3

Tout bagay anfòm. Atomisite konsève: tout chanjman yo anrejistre.

Ann konplike travay la, prezante yon erè ak wè ki jan tranzaksyon an sove, pasyèlman oswa pa ditou.

Ann tcheke atomite a ankò:

Kill ^A
TSTART
Set ^a(1) = 1
Set ^a(2) = 2
Set ^a(3) = 3

Lè sa a, nou pral fòse sispann veso a, lanse li epi wè.

docker kill my-iris

Kòmandman sa a prèske ekivalan a yon fòs fèmen, paske li voye yon siyal SIGKILL pou sispann pwosesis la imedyatman.

Petèt tranzaksyon an te pasyèlman sove?

WRITE ^a(1), ^a(2), ^a(3)
^
<UNDEFINED> ^a(1)

- Non, li pa te siviv.

Ann eseye lòd rollback la:

Kill ^A
TSTART
Set ^a(1) = 1
Set ^a(2) = 2
Set ^a(3) = 3
TROLLBACK

WRITE ^a(1), ^a(2), ^a(3)
^
<UNDEFINED> ^a(1)

Pa gen anyen ki te siviv tou.

2. Konsistans

Piske nan baz done ki baze sou global yo, kle yo fèt tou sou global (kite m 'fè w sonje ke yon global se yon estrikti ki pi ba pou estoke done pase yon tab relasyon), pou satisfè egzijans konsistans la, yon chanjman nan kle a dwe enkli. nan menm tranzaksyon an kòm yon chanjman nan mondyal la.

Pa egzanp, nou gen yon ^moun mondyal, kote nou sere pèsonalite epi nou itilize TIN la kòm yon kle.

^person(1234567, ‘firstname’) = ‘Sergey’
^person(1234567, ‘lastname’) = ‘Kamenev’
^person(1234567, ‘phone’) = ‘+74995555555
...

Pou gen yon rechèch rapid pa siyati ak non, nou te fè kle ^index la.

^index(‘Kamenev’, ‘Sergey’, 1234567) = 1

Pou baz done a dwe konsistan, nou dwe ajoute pèsonaj la tankou sa a:

TSTART
^person(1234567, ‘firstname’) = ‘Sergey’
^person(1234567, ‘lastname’) = ‘Kamenev’
^person(1234567, ‘phone’) = ‘+74995555555
^index(‘Kamenev’, ‘Sergey’, 1234567) = 1
TCOMMIT

An konsekans, lè efase nou dwe tou itilize yon tranzaksyon:

TSTART
Kill ^person(1234567)
ZKill ^index(‘Kamenev’, ‘Sergey’, 1234567)
TCOMMIT

Nan lòt mo, ranpli egzijans konsistans la chita antyèman sou zepòl pwogramè a. Men, lè li rive globals, sa a se nòmal, akòz nati ba nivo yo.

3. Izolasyon

Sa a se kote sovaj yo kòmanse. Anpil itilizatè yo travay ansanm sou menm baz done a, chanje menm done yo.

Sitiyasyon an konparab ak lè anpil itilizatè yo travay ansanm ak menm repozitwa kòd la epi eseye fè chanjman nan anpil fichye an menm tan.

Baz done a ta dwe regle tout bagay an tan reyèl. Lè ou konsidere ke nan konpayi ki grav gen menm yon moun espesyal ki responsab pou kontwòl vèsyon (pou fusion branch, rezoud konfli, elatriye), ak baz done a dwe fè tout bagay sa a an tan reyèl, konpleksite nan travay la ak kòrèkteman nan. konsepsyon baz done ak kòd ki sèvi li.

Baz done a pa ka konprann siyifikasyon aksyon itilizatè yo fè pou evite konfli si yo ap travay sou menm done yo. Li ka sèlman defèt yon tranzaksyon ki konfli ak yon lòt, oswa egzekite yo sekans.

Yon lòt pwoblèm se ke pandan ekzekisyon an nan yon tranzaksyon (anvan yon komèt), eta a nan baz done a ka enkonsistan, kidonk li se dezirab ke lòt tranzaksyon yo pa gen aksè a eta a konsistan nan baz done a, ki se reyalize nan baz done relasyon. nan plizyè fason: kreye snapshots, ranje milti-vèsyon ak elatriye.

Lè egzekite tranzaksyon an paralèl, li enpòtan pou nou ke yo pa entèfere youn ak lòt. Sa a se pwopriyete izolasyon.

SQL defini 4 nivo izolasyon:

  • LI PAKONTEN
  • LI KOMITE
  • LEKTI REPETE
  • SERIALIZABLE

Ann gade nan chak nivo separeman. Depans yo nan aplikasyon chak nivo grandi prèske eksponansyèlman.

LI PAKONTEN - sa a se nivo ki pi ba nan izolasyon, men an menm tan an pi rapid la. Tranzaksyon yo ka li chanjman youn lòt fè.

LI KOMITE se pwochen nivo izolasyon, ki se yon konpwomi. Tranzaksyon yo pa ka li chanjman youn lòt anvan komite a, men yo ka li nenpòt chanjman ki fèt apre komite a.

Si nou gen yon tranzaksyon T1 long, pandan ki komèt te fèt nan tranzaksyon T2, T3 ... Tn, ki te travay ak done yo menm ak T1, Lè sa a, lè w ap mande done nan T1 nou pral jwenn yon rezilta diferan chak fwa. Fenomèn sa a rele lekti ki pa repete.

LEKTI REPETE — nan nivo izolasyon sa a nou pa gen fenomèn nan lekti ki pa repete, akòz lefèt ke pou chak demann pou li done, yo kreye yon snapshot nan done rezilta yo epi lè yo itilize ankò nan menm tranzaksyon an, done ki soti nan snapshot la. se itilize. Sepandan, li posib pou li done fantom nan nivo izolasyon sa a. Sa refere a lekti nouvo ranje ki te ajoute pa tranzaksyon paralèl angaje yo.

SERIALIZABLE - nivo ki pi wo nan izolasyon. Li karakterize pa lefèt ke done yo itilize nan nenpòt fason nan yon tranzaksyon (lekti oswa chanje) vin disponib nan lòt tranzaksyon sèlman apre yo fin fini nan premye tranzaksyon an.

Premyèman, se pou nou konnen si gen izolasyon nan operasyon nan yon tranzaksyon soti nan fil prensipal la. Ann louvri 2 fennèt tèminal.

Kill ^t

Write ^t(1)
2

TSTART
Set ^t(1)=2

Pa gen izolasyon. Yon fil wè sa dezyèm moun ki te louvri tranzaksyon an ap fè.

Ann wè si tranzaksyon diferan fil wè sa k ap pase anndan yo.

Ann ouvri 2 fennèt tèminal epi ouvri 2 tranzaksyon an paralèl.

kill ^t
TSTART
Write ^t(1)
3

TSTART
Set ^t(1)=3

Tranzaksyon paralèl yo wè done youn ak lòt. Kidonk, nou te resevwa nivo izolasyon ki pi senp, men tou, ki pi rapid, READ UNCOMMITED.

Nan prensip, sa a ta ka espere pou mondyal yo, pou ki pèfòmans te toujou yon priyorite.

E si nou bezwen yon pi wo nivo izolasyon nan operasyon sou global?

Isit la ou bezwen reflechi sou poukisa nivo izolasyon yo bezwen nan tout ak ki jan yo travay.

Nivo izolasyon ki pi wo a, SERIALIZE, vle di ke rezilta tranzaksyon yo egzekite an paralèl ekivalan ak ekzekisyon sekans yo, ki garanti absans kolizyon yo.

Nou ka fè sa lè l sèvi avèk kadna entelijan nan ObjectScript, ki gen anpil itilizasyon diferan: ou ka fè regilye, incrémentielle, plizyè bloke ak lòd la. Fèmen.

Nivo izolasyon ki pi ba yo se konpwomi ki fèt pou ogmante vitès baz done a.

Ann wè ki jan nou ka reyalize diferan nivo izolasyon lè l sèvi avèk kadna.

Operatè sa a pèmèt ou pran pa sèlman kadna eksklizif ki nesesè pou chanje done, men sa yo rele kadna pataje, ki ka pran plizyè fil nan paralèl lè yo bezwen li done ki pa ta dwe chanje pa lòt pwosesis pandan pwosesis la lekti.

Plis enfòmasyon sou metòd bloke de-faz nan Ris ak angle:

De-faz bloke
De-faz bloke

Difikilte a se ke pandan yon tranzaksyon eta a nan baz done a ka konsistan, men done enkonsistan sa yo vizib nan lòt pwosesis. Ki jan pou fè pou evite sa a?

Sèvi ak kadna, nou pral kreye fenèt vizibilite kote eta a nan baz done a pral konsistan. Ak tout aksè nan fenèt sa yo nan vizibilite nan eta a te dakò yo pral kontwole pa kadna.

Kadna pataje sou menm done yo kapab itilize ankò-plizyè pwosesis ka pran yo. Kadna sa yo anpeche lòt pwosesis chanje done, i.e. yo itilize yo pou fòme fenèt eta baz done ki konsistan.

Kadna eksklizif yo itilize pou chanjman done - yon sèl pwosesis ka pran yon seri kadna konsa. Yon seri eksklizif ka pran pa:

  1. Nenpòt pwosesis si done yo gratis
  2. Se sèlman pwosesis la ki gen yon fèmen pataje sou done sa yo e li te premye moun ki mande yon seri eksklizif.

Tranzaksyon nan InterSystems IRIS globals

Plis fennèt vizibilite a pi etwat, se plis lòt pwosesis yo oblije rete tann li, men plis eta baz done a nan li ka konsistan.

READ_COMMITTED — sans nan nivo sa a se ke nou wè sèlman done komèt ki soti nan lòt fil. Si done yo nan yon lòt tranzaksyon poko komèt, Lè sa a, nou wè ansyen vèsyon li yo.

Sa a pèmèt nou paralelize travay la olye pou nou tann pou kadna a dwe lage.

San ke trik nouvèl espesyal, nou pa yo pral kapab wè vèsyon an ansyen nan done yo nan IRIS, kidonk nou pral gen fè fè ak kadna.

An konsekans, nou pral oblije itilize kadna pataje pou pèmèt done yo dwe li sèlman nan moman konsistans.

Ann di nou gen yon baz itilizatè ^moun ki transfere lajan youn bay lòt.

Moman transfè soti nan moun 123 a moun 242:

LOCK +^person(123), +^person(242)
Set ^person(123, amount) = ^person(123, amount) - amount
Set ^person(242, amount) = ^person(242, amount) + amount
LOCK -^person(123), -^person(242)

Moman an nan demann kantite lajan an nan men moun 123 anvan debite dwe akonpaye pa yon blòk eksklizif (pa default):

LOCK +^person(123)
Write ^person(123)

Men, si ou bezwen montre estati kont la nan kont pèsonèl ou, Lè sa a, ou ka itilize yon kadna pataje oswa pa itilize li ditou:

LOCK +^person(123)#”S”
Write ^person(123)

Sepandan, si nou sipoze ke operasyon baz done yo fèt prèske imedyatman (kite m 'fè ou sonje ke global yo se yon estrikti nan nivo pi ba anpil pase yon tab relasyon), Lè sa a, bezwen an pou nivo sa a diminye.

LEKTI REPETE - Nivo izolasyon sa a pèmèt pou plizyè lekti nan done ki ka modifye pa tranzaksyon konkouran.

An konsekans, nou pral oblije mete yon kadna pataje sou lekti done yo ke nou chanje ak kadna eksklizif sou done yo ke nou chanje.

Erezman, operatè a LOCK pèmèt ou lis an detay tout kadna ki nesesè yo, ki ka gen anpil, nan yon sèl deklarasyon.

LOCK +^person(123, amount)#”S”
чтение ^person(123, amount)

lòt operasyon (nan moman sa a fil paralèl eseye chanje ^ moun(123, kantite lajan), men li pa kapab)

LOCK +^person(123, amount)
изменение ^person(123, amount)
LOCK -^person(123, amount)

чтение ^person(123, amount)
LOCK -^person(123, amount)#”S”

Lè lis kadna separe pa vigil, yo pran yo an sekans, men si w fè sa:

LOCK +(^person(123),^person(242))

Lè sa a, yo pran atomik tout nan yon fwa.

SÈRYALIZE — nou pral oblije mete kadna pou finalman tout tranzaksyon ki gen done komen yo egzekite sekans. Pou apwòch sa a, pifò kadna yo ta dwe eksklizif ak pran sou zòn ki pi piti nan mondyal la pou pèfòmans.

Si nou pale de debi lajan nan ^moun mondyal la, Lè sa a, se sèlman nivo izolasyon SERIALIZE ki akseptab pou li, depi lajan yo dwe depanse entèdi sekans, otreman li posib pou depanse menm kantite lajan an plizyè fwa.

4. Durabilité

Mwen te fè tès ak koupe difisil nan veso a lè l sèvi avèk

docker kill my-iris

Baz la tolere yo byen. Pa gen pwoblèm yo te idantifye.

Konklizyon

Pou global, InterSystems IRIS gen sipò tranzaksyon. Yo vrèman atomik ak serye. Pou asire konsistans nan yon baz done ki baze sou global, efò pwogramè yo ak itilizasyon tranzaksyon yo obligatwa, paske li pa gen konplèks bati-an konstwi tankou kle etranje.

Nivo izolasyon global yo san yo pa sèvi ak kadna se LEKTI UNCOMMITED, epi lè w ap itilize kadna li ka asire jiska nivo SERIALIZE.

Correct ak vitès tranzaksyon yo sou global yo depann anpil sou konpetans pwogramè a: kadna yo pi lajman pataje yo itilize lè lekti, pi wo nivo izolasyon, ak kadna ki pi etwat eksklizif yo pran, se pi vit pèfòmans lan.

Sous: www.habr.com

Add nouvo kòmantè