Transactions amin'ny InterSystems IRIS globals

Transactions amin'ny InterSystems IRIS globalsNy InterSystems IRIS DBMS dia manohana rafitra mahaliana amin'ny fitehirizana angona - manerantany. Amin'ny ankapobeny, ireo dia fanalahidy marobe miaraka amin'ny zava-tsoa fanampiny isan-karazany amin'ny endrika fifampiraharahana, fiasa haingana amin'ny famakivakiana hazo data, hidin-trano ary ny fiteniny ObjectScript manokana.

Vakio bebe kokoa momba ny globals ao amin'ny andian-dahatsoratra "Globals dia sabatra harena ho an'ny fitahirizana data":

Hazo. Fizarana 1
Hazo. Fizarana 2
Laharana kely. Fizarana faha-3

Nanjary liana aho tamin'ny fomba fampiharana ny fifampiraharahana amin'ny tontolo, inona ny endri-javatra misy. Raha ny marina, ity dia rafitra hafa tanteraka amin'ny fitehirizana angon-drakitra noho ireo tabilao mahazatra. Ambaratonga ambany kokoa.

Araka ny fantatra avy amin'ny teoria momba ny angona fifandraisana, ny fampiharana tsara ny fifampiraharahana dia tsy maintsy mahafeno ny fepetra takiana asidra:

A - Atomika (atomika). Voarakitra an-tsoratra ny fiovana rehetra natao tamin'ny fifampiraharahana na tsy nisy mihitsy.

C - Fifanarahana. Rehefa vita ny fifampiraharahana, ny toetry ny lojika amin'ny angon-drakitra dia tsy maintsy mifanaraka amin'ny anatiny. Amin'ny lafiny maro io fepetra io dia mahakasika ny programmer, fa amin'ny trangan'ny angon-drakitra SQL dia mahakasika ny fanalahidy vahiny ihany koa.

I - Mitokana. Tsy tokony hisy fiatraikany ny fifampiraharahana mandeha mifanitsy.

D - Maharitra. Aorian'ny fahavitan'ny fifampiraharahana dia tsy tokony hisy fiantraikany amin'ny angon-drakitra novain'ny fifampiraharahana ny olana amin'ny ambaratonga ambany (tsy fahampian'ny herinaratra, ohatra).

Globals dia rafitra angona tsy mifandray. Izy ireo dia natao hihazakazaka haingana be amin'ny fitaovana tena voafetra. Andeha hojerentsika ny fampiharana ny fifampiraharahana amin'ny fampiasana manerantany sary ofisialy IRIS docker.

Mba hanohanana ny fifanakalozana amin'ny IRIS, ireto baiko manaraka ireto dia ampiasaina: TSTART, TCOMMIT, TROLLBACK.

1. Atomika

Ny fomba tsotra indrindra hanamarinana dia atomicity. Manamarina avy amin'ny console database izahay.

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

Avy eo isika dia manatsoaka hevitra hoe:

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

Mahazo izahay:

1 2 3

Tsara ny zava-drehetra. Voatazona ny atomika: voarakitra an-tsoratra ny fiovana rehetra.

Andao hanasarotra ny asa, hampiditra fahadisoana ary hijery ny fomba hamonjena ny fifampiraharahana, amin'ny ampahany na tsia.

Andeha hojerentsika indray ny atomicity:

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

Avy eo dia hampiato an-keriny ny kaontenera isika, handefa azy ary hijery.

docker kill my-iris

Ity baiko ity dia saika mitovy amin'ny fanakatonana an-keriny, satria mandefa famantarana SIGKILL hampiato ny dingana avy hatrany.

Angamba voavonjy amin'ny ampahany ny fifampiraharahana?

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

- Tsia, tsy tafavoaka izany.

Andao andramana ny baiko rollback:

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)

Tsy nisy na inona na inona velona koa.

2. Fifanarahana

Satria ao amin'ny angon-drakitra mifototra amin'ny globals, ny fanalahidy dia atao amin'ny globals (mamelà ahy hampahatsiahy anao fa ny global dia rafitra ambany kokoa amin'ny fitehirizana angon-drakitra noho ny tabilao relational), mba hamenoana ny fepetra takiana dia tsy maintsy ampidirina ny fanovana ny lakile. amin'ny fifampiraharahana mitovy amin'ny fiovan'ny eran-tany.

Ohatra, manana olona ^ maneran-tany isika, izay mitahiry ny maha-olona ary mampiasa ny TIN ho fanalahidy.

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

Mba hahazoana fikarohana haingana amin'ny anarana farany sy ny anarana voalohany dia nanao ny ^ index key.

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

Mba hampifanarahana ny angon-drakitra dia tsy maintsy ampiana ny persona toy izao:

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

Noho izany, rehefa mamafa dia tsy maintsy mampiasa transaction ihany koa isika:

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

Raha lazaina amin'ny teny hafa, ny fanatanterahana ny fepetra takiana dia miankina tanteraka amin'ny sorok'ilay mpandrindra. Fa raha ny globals no resahina dia mahazatra izany, noho ny toetrany ambany.

3. Fitokana-monina

Eto no manomboka ny bibidia. Mpampiasa maro no miara-miasa amin'ny angon-drakitra iray ihany, manova data mitovy.

Ny toe-javatra dia azo ampitahaina amin'ny mpampiasa maro miara-miasa amin'ny tahiry kaody mitovy ary manandrana manao fanovana amin'ny rakitra maro indray mandeha.

Ny angon-drakitra dia tokony handamina izany rehetra izany amin'ny fotoana tena izy. Raha jerena fa ao amin'ny orinasa matotra dia misy mihitsy aza ny olona manokana izay tompon'andraikitra amin'ny fanaraha-maso ny dikan-(amin'ny fampifangaroana sampana, famahana ny fifanolanana, sns.), Ary ny angon-drakitra dia tsy maintsy manao izany rehetra izany amin'ny fotoana tena izy, ny fahasarotan'ny asa sy ny fahamarinan'ny fandrafetana angon-drakitra sy code izay manompo azy.

Ny angon-drakitra dia tsy afaka mahazo ny dikan'ny hetsika ataon'ny mpampiasa mba hisorohana ny fifandirana raha toa ka miasa amin'ny data mitovy izy ireo. Izy io ihany no afaka manafoana ny fifampiraharahana izay mifanipaka amin'ny iray hafa, na manatanteraka azy ireo misesy.

Ny olana iray hafa dia ny hoe mandritra ny fanatanterahana ny fifampiraharahana (alohan'ny fanoloran-tena), ny toetry ny angon-drakitra dia mety tsy mifanaraka, noho izany dia irina ny tsy ahafahan'ny fifanakalozana hafa miditra amin'ny toe-javatra tsy mifanaraka amin'ny tahiry, izay tratra amin'ny angon-drakitra mifandraika. amin'ny fomba maro: mamorona snapshots, andalana multiversioning sns.

Rehefa manao fifampiraharahana mifanitsy aminay dia zava-dehibe ho antsika ny tsy hifanelingelenana. Izany no fananan'ny mitokantokana.

Ny SQL dia mamaritra ambaratonga 4 mitokana:

  • VAKIO TSY MITONDRA
  • VAKINY MANOLO-TENA
  • VAKINY AVERINA
  • SERIALIZABLE

Andeha hojerentsika tsirairay ny ambaratonga tsirairay. Ny fandaniana amin'ny fampiharana ny ambaratonga tsirairay dia mitombo saika mitombo.

VAKIO TSY MITONDRA - io no ambaratonga ambany indrindra amin'ny fitokana-monina, fa miaraka amin'izay koa ny haingana indrindra. Afaka mamaky ny fiovana nataon'ny tsirairay ny fifampiraharahana.

VAKINY MANOLO-TENA dia ny ambaratonga manaraka ny fitokanana, izay marimaritra iraisana. Ny fifampiraharahana dia tsy afaka mamaky ny fiovan'ny tsirairay alohan'ny commit, fa afaka mamaky izay fanovana natao taorian'ny commit.

Raha manana fifampiraharahana lava T1 isika, izay nitranga tamin'ny fifampiraharahana T2, T3 ... Tn, izay niasa tamin'ny angon-drakitra mitovy amin'ny T1, dia rehefa mangataka angona ao amin'ny T1 isika dia hahazo valiny hafa isaky ny mandeha. Ity tranga ity dia antsoina hoe famakiana tsy azo averina.

VAKINY AVERINA - Amin'ity ambaratonga mitoka-monina ity dia tsy misy trangan-javatra tsy azo averina amin'ny famakiana, noho ny zava-misy fa ho an'ny fangatahana tsirairay hamaky angon-drakitra dia misy sarin'ny angon-drakitra voaforona ary rehefa ampiasaina indray amin'ny fifanakalozana mitovy, ny angon-drakitra avy amin'ny snapshot dia ampiasaina. Na izany aza, azo atao ny mamaky angon-drakitra phantom amin'ity ambaratonga mitokana ity. Izany dia manondro ny famakiana andalana vaovao izay nampian'ny fifampiraharahana natao mirazotra.

SERIALIZABLE - ny haavon'ny insulation ambony indrindra. Izy io dia miavaka amin'ny hoe ny angon-drakitra ampiasaina amin'ny fomba rehetra amin'ny fifampiraharahana (mamaky na manova) dia tsy azo ampiasaina amin'ny fifampiraharahana hafa raha tsy aorian'ny fahavitan'ny fifampiraharahana voalohany.

Voalohany, andeha hojerentsika raha misy ny fitokanana ny asa amin'ny fifanakalozana amin'ny kofehy lehibe. Andao hanokatra varavarankely terminal 2.

Kill ^t

Write ^t(1)
2

TSTART
Set ^t(1)=2

Tsy misy mitoka-monina. Ny kofehy iray dia mahita ny ataon'ilay faharoa nanokatra ny fifampiraharahana.

Andeha hojerentsika raha mahita ny zava-mitranga ao anatiny ny fifampiraharahana amin'ny kofehy samihafa.

Andao hanokatra varavarankely terminal 2 ary sokafy ny fifanakalozana 2 mifanitsy.

kill ^t
TSTART
Write ^t(1)
3

TSTART
Set ^t(1)=3

Ny fifampiraharahana parallèle dia mifankahita ny angon-drakitra. Noho izany, nahazo ny tsotra indrindra, fa koa ny haavon'ny fitokanana haingana indrindra, READ UNCOMMITED.

Amin'ny ankapobeny dia azo antenaina ho an'ny eran-tany izany, izay laharam-pahamehana hatrany ny fampisehoana.

Ahoana raha mila fitokana-monina ambony kokoa isika amin'ny asa eran-tany?

Eto ianao dia mila mieritreritra hoe nahoana no ilaina ny haavon'ny fitokana-monina sy ny fomba fiasan'izy ireo.

Ny haavon'ny fitokanana ambony indrindra, SERIALIZE, dia midika fa ny vokatry ny fifampiraharahana atao mifanitsy dia mitovy amin'ny fanatanterahana azy misesy, izay miantoka ny tsy fisian'ny fifandonana.

Azontsika atao izany amin'ny alàlan'ny hidin-trano marani-tsaina ao amin'ny ObjectScript, izay manana fampiasa maro isan-karazany: azonao atao ny manao fanidiana tsy tapaka, incremental, maromaro miaraka amin'ny baiko. Lock.

Ny haavon'ny fitokana-monina ambany dia fifanakalozana natao hampitomboana ny hafainganam-pandehan'ny angona.

Andeha hojerentsika ny fomba ahafahantsika mahatratra ambaratonga samihafa amin'ny fitokana-monina amin'ny fampiasana hidin-trano.

Ity mpandraharaha ity dia mamela anao haka tsy hidin-trano manokana ilaina hanovana angon-drakitra, fa ilay antsoina hoe hidin-trano iombonana, izay afaka maka kofehy maromaro mifanandrify rehefa mila mamaky angon-drakitra izay tsy tokony hovain'ny dingana hafa mandritra ny dingan'ny famakiana.

Fanazavana fanampiny momba ny fomba fanakanana dingana roa amin'ny teny Rosiana sy Anglisy:

Fanakanana dingana roa
Fanidiana dingana roa

Ny fahasarotana dia ny hoe mandritra ny fifampiraharahana dia mety tsy mifanaraka ny toetry ny angon-drakitra, fa ity angona tsy mifanaraka ity dia hita amin'ny dingana hafa. Ahoana no hialana amin'izany?

Amin'ny fampiasana hidin-trano dia hamorona varavarankely hita maso izay hifanaraka amin'ny toetry ny angon-drakitra. Ary ny fidirana rehetra amin'ny varavarankelin'ny fahitana ny fanjakana nifanarahana dia hofehezin'ny hidin-trano.

Ny hidin-trano ifampizarana amin'ny angon-drakitra mitovy dia azo ampiasaina indray — dingana maromaro no afaka mitondra azy ireo. Ireo hidin-trano ireo dia manakana ny dingana hafa amin'ny fanovana data, i.e. izy ireo dia ampiasaina mba hamoronana varavarankely amin'ny toetry ny database tsy miovaova.

Ny hidy manokana dia ampiasaina amin'ny fanovana angon-drakitra - dingana iray ihany no afaka maka hidy toy izany. Ny hidy manokana dia azo alaina amin'ny:

  1. Ny dingana rehetra raha maimaim-poana ny angona
  2. Ny dingana izay manana hidy ifampizarana amin'ity angona ity ihany ary no voalohany nangataka hidy manokana.

Transactions amin'ny InterSystems IRIS globals

Arakaraky ny tery kokoa ny varavarankelin'ny fahitana, ny fizotry ny dingana hafa miandry azy, fa ny mety ho mifanaraka kokoa amin'ny toetry ny tahiry ao anatiny.

READ_COMMITTED - Ny votoatin'ity haavo ity dia ny tsy fahitana afa-tsy angona vita avy amin'ny kofehy hafa. Raha mbola tsy vita ny angon-drakitra amin'ny fifampiraharahana hafa, dia hitantsika ny dikan-teny taloha.

Izany dia ahafahantsika mampitovy ny asa fa tsy miandry ny hidin-trano hivoaka.

Raha tsy misy fika manokana dia tsy ho afaka hahita ny dikan-teny taloha amin'ny angon-drakitra ao amin'ny IRIS isika, noho izany dia tsy maintsy ataontsika ny hidin-trano.

Noho izany, tsy maintsy mampiasa hidin-trano iombonana isika mba hamela ny angona hovakiana amin'ny fotoana tsy miovaova.

Aleo atao hoe manana mpampiasa base ^olona mifamindra vola.

Fotoana famindrana avy amin'ny olona 123 mankany amin'ny olona 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)

Ny fotoana fangatahana vola amin'ny olona 123 alohan'ny handoavam-bola dia tsy maintsy miaraka amin'ny sakana manokana (amin'ny alàlan'ny default):

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

Ary raha mila mampiseho ny satan'ny kaonty ao amin'ny kaontinao manokana ianao, dia azonao atao ny mampiasa hidin-trano iombonana na tsy mampiasa azy mihitsy:

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

Na izany aza, raha mihevitra isika fa saika vita avy hatrany ny fampandehanana angon-drakitra (mamelà ahy hampahatsiahy anao fa ny globals dia rafitra ambany kokoa noho ny tabilao relational), dia mihena ny filana an'io ambaratonga io.

VAKINY AVERINA - Ity ambaratonga fitokanana ity dia ahafahana mamaky angon-drakitra marobe izay azo ovaina amin'ny fifampiraharahana miaraka.

Noho izany dia tsy maintsy mametraka hidin-trano iombonana isika amin'ny famakiana ny angon-drakitra ovainay ary hidin-trano manokana amin'ny angona ovainay.

Soa ihany fa ny mpandraharaha LOCK dia ahafahanao mitanisa amin'ny antsipiriany ny hidin-trano rehetra ilaina, izay mety ho betsaka, ao anaty fanambarana iray.

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

asa hafa (amin'izao fotoana izao ny kofehy mifanandrify dia manandrana manova ^olona(123, vola), saingy tsy afaka)

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

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

Rehefa mitanisa ny hidin-trano misaraka amin'ny faingo dia alaina misesy, fa raha manao izao ianao:

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

avy eo dia raisina atomika indray miaraka.

FANOMPOANA - tsy maintsy mametraka hidin-trano isika ka amin'ny farany ny fifampiraharahana rehetra izay manana angon-drakitra iraisana dia tanterahina misesy. Ho an'ity fomba ity, ny ankamaroan'ny hidin-trano dia tokony ho tokana ary horaisina amin'ny faritra kely indrindra manerantany ho an'ny fampisehoana.

Raha miresaka momba ny fandoavana vola amin'ny olona maneran-tany isika, dia ny haavon'ny fitokana-monina SERIALIZE ihany no azo ekena, satria ny vola dia tsy maintsy lanina amin'ny fomba hentitra, raha tsy izany dia azo atao ny mandany vola imbetsaka.

4. Faharetana

Nanao fitsapana aho tamin'ny fanapahana mafy ny kaontenera nampiasaiko

docker kill my-iris

Nandefitra azy ireo tsara ny fototra. Tsy nisy olana hita.

famaranana

Ho an'ny manerantany, InterSystems IRIS dia manana fanohanana ara-barotra. Tena atomika sy azo itokisana izy ireo. Mba hiantohana ny tsy fitoviana amin'ny angon-drakitra mifototra amin'ny globals, dia ilaina ny ezaka ataon'ny programmer sy ny fampiasana ny fifampiraharahana, satria tsy manana fananganana saro-pady toy ny fanalahidy vahiny.

Ny haavon'ny fitokanan'ny tontolo tsy mampiasa hidy dia READ UNCOMMITED, ary rehefa mampiasa hidy dia azo antoka hatrany amin'ny SERIALIZE.

Miankina betsaka amin'ny fahaizan'ny mpandrindra ny fahitsiana sy ny hafainganan'ny fifampiraharahana eo amin'ny tontolo eran-tany: arakaraka ny hidin-trano zaraina betsaka no ampiasaina rehefa mamaky, ny haavon'ny fitokana-monina, ary ny hidin-trano mitokana kokoa no raisina, no haingana kokoa ny fampisehoana.

Source: www.habr.com

Add a comment