Trafodion mewn byd-eang IRIS InterSystems

Trafodion mewn byd-eang IRIS InterSystemsMae'r InterSystems IRIS DBMS yn cefnogi strwythurau diddorol ar gyfer storio data - byd-eang. Yn y bôn, mae'r rhain yn allweddi aml-lefel gyda nwyddau ychwanegol amrywiol ar ffurf trafodion, swyddogaethau cyflym ar gyfer croesi coed data, cloeon a'i iaith ObjectScript ei hun.

Darllenwch fwy am fyd-eang yn y gyfres o erthyglau “Cleddyfau trysor ar gyfer storio data yw byd-eang”:

Coed. Rhan 1
Coed. Rhan 2
Araeau gwasgaredig. Rhan 3

Dechreuais ddiddordeb mewn sut mae trafodion yn cael eu gweithredu mewn byd-eang, pa nodweddion sydd. Wedi'r cyfan, mae hwn yn strwythur hollol wahanol ar gyfer storio data na'r tablau cyfarwydd. Lefel llawer is.

Fel y gwyddys o ddamcaniaeth cronfeydd data perthynol, rhaid i weithrediad da o drafodion fodloni'r gofynion ACID:

A - Atomig (atomicity). Mae'r holl newidiadau a wneir yn y trafodiad neu ddim o gwbl yn cael eu cofnodi.

C - Cysondeb. Ar ôl cwblhau trafodiad, rhaid i gyflwr rhesymegol y gronfa ddata fod yn gyson fewnol. Mewn sawl ffordd mae'r gofyniad hwn yn ymwneud â'r rhaglennydd, ond yn achos cronfeydd data SQL mae hefyd yn ymwneud ag allweddi tramor.

I - Ynysu. Ni ddylai trafodion sy'n rhedeg yn gyfochrog effeithio ar ei gilydd.

D - Gwydn. Ar ôl cwblhau trafodiad yn llwyddiannus, ni ddylai problemau ar lefelau is (methiant pŵer, er enghraifft) effeithio ar y data a newidiwyd gan y trafodiad.

Mae globals yn strwythurau data nad ydynt yn perthyn. Fe'u cynlluniwyd i redeg yn hynod gyflym ar galedwedd cyfyngedig iawn. Gadewch i ni edrych ar weithredu trafodion mewn byd-eang gan ddefnyddio delwedd swyddogol docwr IRIS.

I gefnogi trafodion yn IRIS, defnyddir y gorchmynion canlynol: T DECHRAU, TYWYLLWCH, TROL YN ÔL.

1. Atomity

Y ffordd hawsaf i wirio yw atomigedd. Rydym yn gwirio o'r consol cronfa ddata.

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

Yna rydym yn dod i'r casgliad:

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

Rydym yn cael:

1 2 3

Mae popeth yn iawn. Atomity yn cael ei gynnal: pob newid yn cael ei gofnodi.

Gadewch i ni gymhlethu'r dasg, cyflwyno gwall a gweld sut mae'r trafodiad yn cael ei arbed, yn rhannol neu ddim o gwbl.

Gadewch i ni wirio'r atomigedd eto:

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

Yna byddwn yn atal y cynhwysydd yn rymus, yn ei lansio a'i weld.

docker kill my-iris

Mae'r gorchymyn hwn bron yn cyfateb i ddiffodd grym, gan ei fod yn anfon signal SIGKILL i atal y broses ar unwaith.

Efallai y trafodiad ei arbed yn rhannol?

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

- Na, nid yw wedi goroesi.

Gadewch i ni roi cynnig ar y gorchymyn dychwelyd:

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)

Does dim byd wedi goroesi chwaith.

2. Cysondeb

Oherwydd mewn cronfeydd data sy'n seiliedig ar fyd-eang, gwneir allweddi hefyd ar fyd-eang (gadewch i mi eich atgoffa bod byd-eang yn strwythur lefel is ar gyfer storio data na thabl perthynol), er mwyn bodloni'r gofyniad cysondeb, rhaid cynnwys newid yn yr allwedd yn yr un trafodiad â newid yn y byd-eang.

Er enghraifft, mae gennym ni berson byd-eang, lle rydyn ni'n storio personoliaethau ac rydyn ni'n defnyddio'r TIN fel allwedd.

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

Er mwyn cael chwiliad cyflym yn ôl enw olaf ac enw cyntaf, gwnaethom yr allwedd ^index.

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

Er mwyn i'r gronfa ddata fod yn gyson, rhaid i ni ychwanegu'r persona fel hyn:

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

Yn unol â hynny, wrth ddileu rhaid i ni hefyd ddefnyddio trafodiad:

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

Mewn geiriau eraill, mae cyflawni'r gofyniad cysondeb yn dibynnu'n llwyr ar ysgwyddau'r rhaglennydd. Ond o ran byd-eang, mae hyn yn normal, oherwydd eu natur lefel isel.

3. Arwahanrwydd

Dyma lle mae'r gwyllt yn dechrau. Mae llawer o ddefnyddwyr ar yr un pryd yn gweithio ar yr un gronfa ddata, gan newid yr un data.

Mae'r sefyllfa yn debyg i pan fydd llawer o ddefnyddwyr ar yr un pryd yn gweithio gyda'r un ystorfa cod ac yn ceisio ymrwymo newidiadau i lawer o ffeiliau ar yr un pryd.

Dylai'r gronfa ddata ddatrys y cyfan mewn amser real. O ystyried bod hyd yn oed person arbennig mewn cwmnïau difrifol sy'n gyfrifol am reoli fersiynau (ar gyfer uno canghennau, datrys gwrthdaro, ac ati), a rhaid i'r gronfa ddata wneud hyn i gyd mewn amser real, cymhlethdod y dasg a chywirdeb y cynllun cronfa ddata a chod sy'n ei wasanaethu.

Ni all y gronfa ddata ddeall ystyr y gweithredoedd a gyflawnir gan ddefnyddwyr er mwyn atal gwrthdaro os ydynt yn gweithio ar yr un data. Dim ond un trafodiad sy'n gwrthdaro ag un arall y gall ei ddadwneud, neu ei weithredu'n ddilyniannol.

Problem arall yw y gall cyflwr y gronfa ddata fod yn anghyson wrth gyflawni trafodiad (cyn ymrwymo), felly mae'n ddymunol nad oes gan drafodion eraill fynediad i gyflwr anghyson y gronfa ddata, a gyflawnir mewn cronfeydd data perthynol. mewn sawl ffordd: creu cipluniau, rhesi aml-fersiwn ac ati.

Wrth gyflawni trafodion ochr yn ochr, mae'n bwysig i ni nad ydynt yn ymyrryd â'i gilydd. Eiddo unigedd yw hyn.

Mae SQL yn diffinio 4 lefel ynysu:

  • DARLLENWCH HEB YMRWYMIAD
  • DARLLEN YMRWYMEDIG
  • AILDDARLLENIAD
  • CYFRESOGOL

Edrychwn ar bob lefel ar wahân. Mae costau gweithredu pob lefel yn tyfu bron yn esbonyddol.

DARLLENWCH HEB YMRWYMIAD - dyma'r lefel isaf o ynysu, ond ar yr un pryd y cyflymaf. Gall trafodion ddarllen newidiadau a wneir gan ei gilydd.

DARLLEN YMRWYMEDIG yw’r lefel nesaf o ynysu, sy’n gyfaddawd. Ni all trafodion ddarllen newidiadau ei gilydd cyn y traddodi, ond gallant ddarllen unrhyw newidiadau a wnaed ar ôl y traddodi.

Os oes gennym drafodiad hir T1, yn ystod yr ymrwymiadau a ddigwyddodd mewn trafodion T2, T3 ... Tn, a oedd yn gweithio gyda'r un data â T1, yna wrth ofyn am ddata yn T1 byddwn yn cael canlyniad gwahanol bob tro. Gelwir y ffenomen hon yn ddarllen na ellir ei ailadrodd.

AILDDARLLENIAD — yn y lefel ynysu hon nid oes gennym y ffenomen o ddarllen na ellir ei ailadrodd, oherwydd y ffaith bod ciplun o'r data canlyniad yn cael ei greu ar gyfer pob cais i ddarllen data a phan gaiff ei ailddefnyddio yn yr un trafodiad, y data o'r ciplun yn cael ei ddefnyddio. Fodd bynnag, mae'n bosibl darllen data ffug ar y lefel ynysu hon. Mae hyn yn cyfeirio at ddarllen rhesi newydd a ychwanegwyd gan drafodion ymrwymedig cyfochrog.

CYFRESOGOL - y lefel uchaf o inswleiddio. Fe'i nodweddir gan y ffaith mai dim ond ar ôl cwblhau'r trafodiad cyntaf y daw data a ddefnyddir mewn unrhyw ffordd mewn trafodiad (darllen neu newid) ar gael i drafodion eraill.

Yn gyntaf, gadewch i ni ddarganfod a yw gweithrediadau mewn trafodiad yn cael eu hynysu oddi wrth y prif edefyn. Gadewch i ni agor 2 ffenestr derfynell.

Kill ^t

Write ^t(1)
2

TSTART
Set ^t(1)=2

Nid oes unrhyw ynysu. Mae un edefyn yn gweld beth mae'r ail un a agorodd y trafodiad yn ei wneud.

Gadewch i ni weld a yw trafodion o wahanol edafedd yn gweld beth sy'n digwydd y tu mewn iddynt.

Gadewch i ni agor 2 ffenestr derfynell ac agor 2 drafodyn ochr yn ochr.

kill ^t
TSTART
Write ^t(1)
3

TSTART
Set ^t(1)=3

Mae trafodion cyfochrog yn gweld data ei gilydd. Felly, cawsom y lefel ynysu symlaf, ond hefyd y cyflymaf, DARLLENWCH YN DDIOGELWCH.

Mewn egwyddor, gellid disgwyl hyn ar gyfer byd-eang, y mae perfformiad bob amser wedi bod yn flaenoriaeth iddynt.

Beth os oes angen lefel uwch o ynysu mewn gweithrediadau ar fyd-eang?

Yma mae angen i chi feddwl pam fod angen lefelau ynysu o gwbl a sut maen nhw'n gweithio.

Mae'r lefel ynysu uchaf, SERIALIZE, yn golygu bod canlyniad trafodion a gyflawnir yn gyfochrog yn cyfateb i'w gweithrediad dilyniannol, sy'n gwarantu absenoldeb gwrthdrawiadau.

Gallwn wneud hyn gan ddefnyddio cloeon smart yn ObjectScript, sydd â llawer o wahanol ddefnyddiau: gallwch chi wneud cloi rheolaidd, cynyddrannol, lluosog gyda'r gorchymyn CLOI.

Mae lefelau ynysu is yn gyfaddawdau sydd wedi'u cynllunio i gynyddu cyflymder cronfa ddata.

Gadewch i ni weld sut y gallwn gyflawni gwahanol lefelau o ynysu gan ddefnyddio cloeon.

Mae'r gweithredwr hwn yn caniatáu ichi gymryd nid yn unig cloeon unigryw sydd eu hangen i newid data, ond cloeon a rennir, fel y'u gelwir, a all gymryd sawl edefyn yn gyfochrog pan fydd angen iddynt ddarllen data na ddylid eu newid gan brosesau eraill yn ystod y broses ddarllen.

Mwy o wybodaeth am y dull blocio dau gam yn Rwsieg a Saesneg:

Blocio dau gam
Cloi dau gam

Yr anhawster yw y gall cyflwr y gronfa ddata fod yn anghyson yn ystod trafodiad, ond mae'r data anghyson hwn yn weladwy i brosesau eraill. Sut i osgoi hyn?

Gan ddefnyddio cloeon, byddwn yn creu ffenestri gwelededd lle bydd cyflwr y gronfa ddata yn gyson. A bydd yr holl fynediad i ffenestri o'r fath o welededd y cyflwr y cytunwyd arno yn cael ei reoli gan gloeon.

Gellir ailddefnyddio cloeon a rennir ar yr un data - gall sawl proses eu cymryd. Mae’r cloeon hyn yn atal prosesau eraill rhag newid data, h.y. fe'u defnyddir i ffurfio ffenestri o gyflwr cronfa ddata gyson.

Defnyddir cloeon unigryw ar gyfer newidiadau data - dim ond un broses all gymryd clo o'r fath. Gellir cymryd clo unigryw gan:

  1. Unrhyw broses os yw'r data yn rhad ac am ddim
  2. Dim ond y broses sydd â chlo a rennir ar y data hwn a hon oedd y cyntaf i ofyn am glo unigryw.

Trafodion mewn byd-eang IRIS InterSystems

Po gulach yw'r ffenestr welededd, po hiraf y mae'n rhaid i brosesau eraill aros amdani, ond y mwyaf cyson y gall cyflwr y gronfa ddata fod ynddi.

READ_COMMITTED — hanfod y lefel hon yw mai dim ond data ymrwymedig o edafedd eraill a welwn. Os nad yw'r data mewn trafodiad arall wedi'i ymrwymo eto, yna fe welwn ei hen fersiwn.

Mae hyn yn ein galluogi i gyfochrog â'r gwaith yn hytrach nag aros i'r clo gael ei ryddhau.

Heb driciau arbennig, ni fyddwn yn gallu gweld yr hen fersiwn o'r data yn IRIS, felly bydd yn rhaid inni ymwneud â chloeon.

Yn unol â hynny, bydd yn rhaid i ni ddefnyddio cloeon a rennir er mwyn caniatáu i ddata gael ei ddarllen ar adegau o gysondeb yn unig.

Gadewch i ni ddweud bod gennym ni sylfaen ddefnyddwyr ^person sy'n trosglwyddo arian i'w gilydd.

Moment trosglwyddo o berson 123 i berson 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)

Rhaid i'r eiliad o ofyn am swm yr arian gan berson 123 cyn debyd ddod gyda bloc unigryw (yn ddiofyn):

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

Ac os oes angen i chi ddangos statws y cyfrif yn eich cyfrif personol, yna gallwch ddefnyddio clo a rennir neu beidio â'i ddefnyddio o gwbl:

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

Fodd bynnag, os tybiwn fod gweithrediadau cronfa ddata yn cael eu perfformio bron yn syth (gadewch i mi eich atgoffa bod byd-eang yn strwythur lefel llawer is na thabl perthynol), yna mae'r angen am y lefel hon yn lleihau.

AILDDARLLENIAD - Mae'r lefel ynysu hon yn caniatáu darlleniadau lluosog o ddata y gellir eu haddasu gan drafodion cydamserol.

Yn unol â hynny, bydd yn rhaid inni roi clo a rennir ar ddarllen y data yr ydym yn ei newid a chloeon unigryw ar y data yr ydym yn ei newid.

Yn ffodus, mae gweithredwr LOCK yn caniatáu ichi restru'n fanwl yr holl gloeon angenrheidiol, a gall fod llawer ohonynt, mewn un datganiad.

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

gweithrediadau eraill (ar hyn o bryd mae edafedd cyfochrog yn ceisio newid ^ person (123, swm), ond ni allant)

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

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

Wrth restru cloeon sydd wedi’u gwahanu gan atalnodau, cânt eu cymryd yn olynol, ond os gwnewch hyn:

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

yna fe'u cymerir yn atomig i gyd ar unwaith.

CYFRESO — bydd yn rhaid i ni osod cloeon fel bod yr holl drafodion sydd â data cyffredin yn cael eu cyflawni yn ddilyniannol yn y pen draw. Ar gyfer y dull hwn, dylai'r rhan fwyaf o gloeon fod yn gyfyngedig ac yn cael eu cymryd ar y meysydd lleiaf o'r byd-eang ar gyfer perfformiad.

Os byddwn yn siarad am ddebydu arian yn y person byd-eang, yna dim ond y lefel ynysu SERIALIZE sy'n dderbyniol ar ei gyfer, gan fod yn rhaid gwario arian yn llym yn olynol, fel arall mae'n bosibl gwario'r un swm sawl gwaith.

4. gwydnwch

Cynhaliais brofion gyda thorri caled y cynhwysydd gan ddefnyddio

docker kill my-iris

Roedd y sylfaen yn eu goddef yn dda. Ni nodwyd unrhyw broblemau.

Casgliad

Ar gyfer byd-eang, mae gan InterSystems IRIS gefnogaeth trafodion. Maent yn wirioneddol atomig a dibynadwy. Er mwyn sicrhau cysondeb cronfa ddata sy'n seiliedig ar fyd-eang, mae angen ymdrechion rhaglenwyr a'r defnydd o drafodion, gan nad oes ganddi strwythurau adeiledig cymhleth megis allweddi tramor.

Mae lefel ynysu byd-eang heb ddefnyddio cloeon wedi'i DARLLENWCH YN DDIOGEL, ac wrth ddefnyddio cloeon gellir ei sicrhau hyd at y lefel SERIALIZE.

Mae cywirdeb a chyflymder trafodion ar fyd-eang yn dibynnu'n fawr ar sgil y rhaglennydd: po fwyaf y defnyddir cloeon a rennir yn ehangach wrth ddarllen, po uchaf yw lefel yr arwahanrwydd, a po fwyaf cyfyngedig o gloeon sy'n cael eu cymryd, y cyflymaf yw'r perfformiad.

Ffynhonnell: hab.com

Ychwanegu sylw