Kev lag luam hauv InterSystems IRIS thoob ntiaj teb

Kev lag luam hauv InterSystems IRIS thoob ntiaj tebInterSystems IRIS DBMS txhawb nqa cov qauv nthuav dav rau kev khaws cov ntaub ntawv - thoob ntiaj teb. Qhov tseem ceeb, cov no yog cov yuam sij ntau qib nrog ntau yam khoom zoo ntxiv hauv daim ntawv ntawm kev lag luam, ua haujlwm nrawm rau kev hla cov ntaub ntawv ntoo, xauv thiab nws tus kheej ObjectScript lus.

Nyeem ntxiv txog lub ntiaj teb nyob rau hauv cov kab lus "Lub Ntiaj Teb yog cov khoom muaj nqis-nqaij rau khaws cov ntaub ntawv":

Ntoo. Ntu 1
Ntoo. Ntu 2
Sparse arrays. Ntu 3

Kuv tau xav txog yuav ua li cas kev lag luam raug siv hauv ntiaj teb, dab tsi nta muaj. Tom qab tag nrho, qhov no yog cov qauv sib txawv kiag li rau khaws cov ntaub ntawv ntau dua li cov lus paub. Qib qis dua.

Raws li paub los ntawm txoj kev xav ntawm kev sib raug zoo databases, kev ua haujlwm zoo ntawm kev lag luam yuav tsum ua kom tau raws li qhov yuav tsum tau ua acid:

A - Atomic (Atomicity). Tag nrho cov kev hloov pauv hauv kev hloov pauv lossis tsis muaj nyob rau hauv tag nrho raug kaw.

C - Kev sib raug zoo. Tom qab kev sib pauv ua tiav, lub laj thawj ntawm lub xeev ntawm cov ntaub ntawv yuav tsum ua kom zoo ib yam. Muaj ntau txoj hauv kev qhov kev xav tau no cuam tshuam rau tus programmer, tab sis nyob rau hauv cov ntaub ntawv ntawm SQL databases nws kuj cuam tshuam cov yuam sij txawv teb chaws.

Kuv - cais. Cov kev lag luam uas khiav hauv qhov sib npaug yuav tsum tsis txhob cuam tshuam rau ib leeg.

D - Durable. Tom qab ua tiav kev lag luam tiav, cov teeb meem ntawm qib qis (lub zog tsis ua haujlwm, piv txwv li) yuav tsum tsis txhob cuam tshuam cov ntaub ntawv hloov pauv los ntawm kev hloov pauv.

Ntiaj teb no yog cov ntaub ntawv tsis muaj kev sib raug zoo. Lawv tau tsim los khiav ceev heev ntawm cov khoom siv tsawg heev. Cia peb saib ntawm kev siv cov kev lag luam hauv ntiaj teb siv official IRIS docker duab.

Txhawm rau txhawb kev lag luam hauv IRIS, cov lus txib hauv qab no yog siv: TSTART, TCOMMIT, TROLLBACK.

1. Atomicity

Qhov yooj yim tshaj plaws los xyuas yog atomicity. Peb tshawb xyuas los ntawm database console.

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

Tom qab ntawd peb xaus:

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

Peb tau txais:

1 2 3

Txhua yam zoo. Atomicity yog khaws cia: txhua qhov kev hloov pauv tau sau tseg.

Cia peb ua haujlwm nyuaj, qhia txog qhov yuam kev thiab saib seb qhov kev hloov pauv tau txais kev cawmdim, ib nrab lossis tsis tag nrho.

Cia peb kuaj lub atomicity dua:

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

Tom qab ntawd peb yuav tsum nres lub thawv, tso nws thiab pom.

docker kill my-iris

Cov lus txib no yuav luag sib npaug rau lub zog kaw, raws li nws xa cov teeb liab SIGKILL kom nres cov txheej txheem tam sim ntawd.

Tej zaum qhov kev hloov pauv tau raug cawm ib nrab?

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

- Tsis yog, nws tsis tau muaj sia nyob.

Wb sim rollback hais kom ua:

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)

Tsis muaj dab tsi tseem ciaj sia.

2. Kev sib raug zoo

Txij li thaum nyob rau hauv databases raws li lub ntiaj teb no, cov yuam sij kuj tau ua nyob rau hauv lub ntiaj teb no (cia kuv ceeb toom rau koj tias lub ntiaj teb no yog ib tug qis-theem qauv rau khaws cia cov ntaub ntawv tshaj ib tug kev sib raug zoo lub rooj), kom tau raws li qhov yuav tsum tau ua, ib tug hloov nyob rau hauv tus yuam sij yuav tsum suav nrog. nyob rau hauv tib txoj kev pauv raws li kev hloov pauv hauv ntiaj teb.

Piv txwv li, peb muaj lub ntiaj teb ^ tus neeg, uas peb khaws tus kheej thiab peb siv TIN ua tus yuam sij.

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

Txhawm rau kom muaj kev tshawb nrhiav ceev los ntawm lub xeem thiab lub npe, peb tau ua tus yuam sij ^index.

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

Txhawm rau kom cov ntaub ntawv sib xws, peb yuav tsum ntxiv tus neeg zoo li no:

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

Raws li, thaum tshem tawm peb kuj yuav tsum siv kev sib pauv:

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

Hauv lwm lo lus, ua kom tiav qhov kev xav tau sib xws yog nyob ntawm tus programmer lub xub pwg nyom. Tab sis thaum nws los txog rau ntiaj teb no, qhov no yog qhov qub, vim lawv qhov qis qis.

3. Kev cais tawm

Nov yog qhov uas cov tsiaj qus pib. Ntau tus neeg siv ib txhij ua haujlwm ntawm tib lub database, hloov cov ntaub ntawv tib yam.

Qhov xwm txheej yog piv rau thaum muaj ntau tus neeg siv ib txhij ua haujlwm nrog tib lub chaw khaws ntaub ntawv thiab sim ua tib zoo hloov pauv rau ntau cov ntaub ntawv ib zaug.

Lub database yuav tsum txheeb nws tag nrho hauv lub sijhawm. Xav tias hauv cov tuam txhab loj muaj txawm tias ib tus neeg tshwj xeeb uas yog lub luag haujlwm rau kev tswj hwm version (rau kev sib koom ua ke, kev daws teeb meem tsis sib haum xeeb, thiab lwm yam), thiab cov ntaub ntawv yuav tsum ua txhua yam no hauv lub sijhawm tiag tiag, qhov nyuaj ntawm txoj haujlwm thiab qhov tseeb ntawm cov ntaub ntawv. database tsim thiab code uas ua hauj lwm rau nws.

Cov ntaub ntawv tsis tuaj yeem nkag siab lub ntsiab lus ntawm kev ua los ntawm cov neeg siv kom tsis txhob muaj kev tsis sib haum xeeb yog tias lawv ua haujlwm ntawm tib cov ntaub ntawv. Nws tsuas tuaj yeem thim rov qab ib qho kev lag luam uas tsis sib haum nrog lwm tus, lossis ua kom lawv ua ntu zus.

Lwm qhov teeb meem yog tias thaum lub sijhawm ua tiav ntawm kev lag luam (ua ntej kev cog lus), lub xeev ntawm cov ntaub ntawv yuav tsis sib haum, yog li nws yog qhov xav tau tias lwm cov kev lag luam tsis muaj kev nkag mus rau lub xeev tsis sib xws ntawm cov ntaub ntawv, uas tau ua tiav hauv cov ntaub ntawv sib txheeb. nyob rau hauv ntau txoj kev: tsim snapshots, multi-versioning kab thiab lwm yam.

Thaum ua tiav kev lag luam nyob rau hauv parallel, nws yog ib qho tseem ceeb rau peb tias lawv tsis cuam tshuam rau ib leeg. Qhov no yog cov cuab yeej ntawm kev sib cais.

SQL txhais 4 theem kev cais tawm:

  • NYEEM UNCOMMITTED
  • NYEEM COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE

Cia peb saib ntawm txhua qib sib cais. Tus nqi ntawm kev siv txhua qib yuav luag exponentially.

NYEEM UNCOMMITTED - qhov no yog theem qis tshaj ntawm kev sib cais, tab sis tib lub sijhawm ceev tshaj plaws. Kev ua lag luam tuaj yeem nyeem cov kev hloov pauv tau los ntawm ib leeg.

NYEEM COMMITTED yog theem tom ntej ntawm kev sib cais, uas yog kev sib haum xeeb. Kev lag luam tsis tuaj yeem nyeem ib leeg qhov kev hloov pauv ua ntej kev cog lus, tab sis lawv tuaj yeem nyeem cov kev hloov pauv tom qab cog lus.

Yog tias peb muaj kev hloov pauv ntev T1, thaum lub sijhawm kev cog lus tau tshwm sim hauv kev lag luam T2, T3 ... Tn, uas ua haujlwm nrog cov ntaub ntawv tib yam li T1, ces thaum thov cov ntaub ntawv hauv T1 peb yuav tau txais cov txiaj ntsig sib txawv txhua zaus. Qhov tshwm sim no yog hu ua kev nyeem tsis tau rov ua dua.

REPEATABLE READ - nyob rau hauv qhov kev rho tawm no peb tsis muaj qhov tshwm sim ntawm kev nyeem tsis rov ua dua, vim qhov tseeb tias rau txhua qhov kev thov los nyeem cov ntaub ntawv, ib daim duab ntawm cov ntaub ntawv tshwm sim yog tsim thiab thaum rov siv dua hauv tib qhov kev hloov pauv, cov ntaub ntawv los ntawm snapshot yog siv. Txawm li cas los xij, nws tuaj yeem nyeem cov ntaub ntawv phantom ntawm qhov kev cais tawm no. Qhov no yog hais txog kev nyeem cov kab tshiab uas tau ntxiv los ntawm kev ua lag luam sib luag.

SERIALIZABLE - qib siab tshaj ntawm rwb thaiv tsev. Nws yog tus cwj pwm los ntawm qhov tseeb tias cov ntaub ntawv siv nyob rau hauv txhua txoj kev hauv kev sib pauv (nyeem lossis hloov pauv) yuav muaj rau lwm yam kev lag luam tsuas yog tom qab ua tiav ntawm thawj qhov kev hloov pauv.

Ua ntej, cia peb txheeb xyuas seb puas muaj kev sib cais ntawm kev ua haujlwm hauv kev lag luam los ntawm cov xov tseem ceeb. Cia peb qhib 2 lub qhov rais terminal.

Kill ^t

Write ^t(1)
2

TSTART
Set ^t(1)=2

Tsis muaj kev sib cais. Ib txoj xov pom tias tus thib ob uas qhib qhov kev lag luam ua dab tsi.

Cia peb pom yog tias kev hloov pauv ntawm cov xov sib txawv pom tias muaj dab tsi tshwm sim hauv lawv.

Cia peb qhib 2 lub qhov rais davhlau ya nyob twg thiab qhib 2 kev lag luam ua ke.

kill ^t
TSTART
Write ^t(1)
3

TSTART
Set ^t(1)=3

Parallel muas pom ib leeg cov ntaub ntawv. Yog li, peb tau txais qhov yooj yim tshaj plaws, tab sis kuj yog qib kev sib cais ceev tshaj plaws, READ UNCOMMITED.

Hauv txoj ntsiab cai, qhov no tuaj yeem xav tau rau thoob ntiaj teb, uas qhov kev ua tau zoo ib txwm yog qhov tseem ceeb.

Yuav ua li cas yog tias peb xav tau kev sib cais siab dua hauv kev ua haujlwm hauv ntiaj teb?

Ntawm no koj yuav tsum xav txog vim li cas qhov kev sib cais yog xav tau ntawm txhua qhov thiab lawv ua haujlwm li cas.

Qhov kev sib cais siab tshaj plaws, SERIALIZE, txhais tau hais tias qhov tshwm sim ntawm kev ua lag luam ua tiav nyob rau hauv tib lub sijhawm yog sib npaug rau lawv qhov kev ua tiav, uas lav qhov tsis muaj kev sib tsoo.

Peb tuaj yeem ua qhov no siv cov xauv ntse hauv ObjectScript, uas muaj ntau yam kev siv sib txawv: koj tuaj yeem ua tsis tu ncua, nce ntxiv, ntau lub xauv nrog cov lus txib XAUV.

Kev cais tawm qis dua yog kev lag luam tawm tsim los ua kom cov ntaub ntawv ceev ceev.

Cia peb saib yuav ua li cas peb tuaj yeem ua tiav qib sib txawv ntawm kev sib cais siv cov xauv.

Tus neeg teb xov tooj no tso cai rau koj coj tsis tau tsuas yog cov xauv tshwj xeeb uas xav tau los hloov cov ntaub ntawv, tab sis hu ua cov xauv sib koom, uas tuaj yeem siv ob peb lub xov sib luag thaum lawv xav nyeem cov ntaub ntawv uas yuav tsum tsis txhob hloov pauv los ntawm lwm cov txheej txheem thaum nyeem ntawv.

Xav paub ntau ntxiv txog kev thaiv ob-theem hauv Lavxias thiab Askiv:

Ob-theem thaiv
Ob-theem xauv

Qhov nyuaj yog tias thaum lub sijhawm ua lag luam lub xeev ntawm cov ntaub ntawv yuav tsis sib haum, tab sis cov ntaub ntawv tsis sib haum no pom rau lwm cov txheej txheem. Yuav ua li cas zam qhov no?

Siv cov xauv, peb yuav tsim qhov pom kev pom qhov rais uas lub xeev ntawm cov ntaub ntawv yuav zoo ib yam. Thiab tag nrho cov kev nkag mus rau xws li qhov rais ntawm kev pom ntawm lub xeev pom zoo yuav raug tswj los ntawm cov xauv.

Kev sib koom xauv ntawm tib cov ntaub ntawv yog rov siv tau - ob peb txheej txheem tuaj yeem coj lawv. Cov xauv no tiv thaiv lwm cov txheej txheem los ntawm kev hloov cov ntaub ntawv, i.e. lawv tau siv los tsim cov qhov rais ntawm lub xeev database zoo ib yam.

Cov xauv tshwj xeeb yog siv rau cov ntaub ntawv hloov pauv - tsuas yog ib qho txheej txheem tuaj yeem siv qhov ntsuas phoo. Ib qho xauv tshwj xeeb tuaj yeem raug coj los ntawm:

  1. Txhua txheej txheem yog cov ntaub ntawv dawb
  2. Tsuas yog cov txheej txheem uas muaj kev sib koom xauv ntawm cov ntaub ntawv no thiab yog thawj zaug thov kom muaj qhov xauv tshwj xeeb.

Kev lag luam hauv InterSystems IRIS thoob ntiaj teb

Qhov nqaim ntawm qhov pom qhov rais, qhov ntev dua lwm cov txheej txheem yuav tsum tau tos rau nws, tab sis qhov zoo sib xws ntawm lub xeev ntawm cov ntaub ntawv hauv nws tuaj yeem ua tau.

READ_COMMITTED - lub ntsiab lus ntawm qib no yog tias peb pom tsuas yog cov ntaub ntawv cog lus los ntawm lwm cov xov. Yog tias cov ntaub ntawv hauv lwm qhov kev lag luam tseem tsis tau ua tiav, ces peb pom nws cov ntawv qub.

Qhov no tso cai rau peb mus rau parallelize txoj haujlwm es tsis txhob tos lub xauv kom tso tawm.

Yog tsis muaj kev dag tshwj xeeb, peb yuav tsis tuaj yeem pom cov ntawv qub ntawm cov ntaub ntawv hauv IRIS, yog li peb yuav tsum ua nrog cov xauv.

Raws li, peb yuav tau siv cov xauv sib koom kom tso cai rau cov ntaub ntawv nyeem tsuas yog thaum lub sijhawm sib xws.

Wb hais tias peb muaj tus neeg siv lub hauv paus ^ tus neeg xa nyiaj rau ib leeg.

Lub sijhawm hloov ntawm tus neeg 123 mus rau tus neeg 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)

Lub sijhawm thov cov nyiaj los ntawm tus neeg 123 ua ntej debiting yuav tsum tau nrog ib qho thaiv tshwj xeeb (los ntawm lub neej ntawd):

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

Thiab yog tias koj xav tau qhia cov xwm txheej hauv koj tus kheej tus account, koj tuaj yeem siv lub xauv sib koom lossis tsis siv nws tag nrho:

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

Txawm li cas los xij, yog tias peb xav tias kev ua haujlwm database tau ua tiav yuav luag tam sim (cia kuv nco ntsoov koj tias lub ntiaj teb yog cov qauv qis dua li cov lus sib txheeb), ces qhov kev xav tau ntawm qib no txo ​​qis.

REPEATABLE READ - Qhov kev cais tawm no tso cai rau ntau qhov kev nyeem cov ntaub ntawv uas tuaj yeem hloov kho los ntawm kev sib koom ua ke.

Raws li, peb yuav tsum tau muab lub xauv sib koom ntawm kev nyeem cov ntaub ntawv uas peb hloov pauv thiab tsuas yog xauv rau ntawm cov ntaub ntawv uas peb hloov.

Hmoov zoo, LOCK tus neeg teb xov tooj tso cai rau koj sau kom meej tag nrho cov xauv qhov tsim nyog, uas tuaj yeem muaj ntau, hauv ib nqe lus.

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

lwm yam kev khiav hauj lwm (lub sij hawm no parallel threads sim hloov ^ tus neeg (123, tus nqi), tab sis ua tsis tau)

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

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

Thaum sau cov xauv sib cais los ntawm commas, lawv raug coj los ua ntu zus, tab sis yog tias koj ua qhov no:

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

tom qab ntawd lawv tau txais atomically tag nrho ib zaug.

KEV PAB - Peb yuav tau teeb tsa lub xauv kom qhov kawg tag nrho cov kev lag luam uas muaj cov ntaub ntawv sib raug raug ua tiav. Rau txoj hauv kev no, feem ntau cov xauv yuav tsum yog tshwj xeeb thiab coj mus rau thaj chaw me me ntawm lub ntiaj teb rau kev ua haujlwm.

Yog hais tias peb tham txog debiting nyiaj nyob rau hauv lub ntiaj teb no ^ tus neeg, ces tsuas yog SERIALIZE kev rho tawm theem yog txais rau nws, vim hais tias cov nyiaj yuav tsum tau siv nruj me ntsis raws sij hawm, txwv tsis pub nws muaj peev xwm siv tib tus nqi ob peb zaug.

4. Durability

Kuv tau sim nrog kev txiav nyuaj ntawm lub thawv siv

docker kill my-iris

Lub hauv paus tolerated lawv zoo. Tsis muaj teeb meem raug txheeb xyuas.

xaus

Rau thoob ntiaj teb, InterSystems IRIS muaj kev txhawb nqa kev lag luam. Lawv yog cov atomic tiag tiag thiab txhim khu kev qha. Txhawm rau kom ntseeg tau qhov sib xws ntawm cov ntaub ntawv raws li thoob ntiaj teb, kev siv zog ntawm cov programmer thiab kev siv cov kev hloov pauv yuav tsum tau ua, vim nws tsis muaj cov txheej txheem tsim ua ke xws li cov yuam sij txawv teb chaws.

Kev cais tawm ntawm lub ntiaj teb yam tsis siv lub xauv yog NYEEM UNCOMMITED, thiab thaum siv cov xauv nws tuaj yeem ua kom ntseeg tau txog qib SERIALIZE.

Qhov tseeb thiab ceev ntawm kev lag luam hauv ntiaj teb no ntau heev nyob ntawm qhov kev txawj ntawm tus programmer: qhov sib koom ua ke ntawm cov xauv ntau dua yog siv thaum nyeem ntawv, qhov siab dua qhov kev sib cais, thiab qhov nqaim nqaim tshwj xeeb raug kaw, qhov kev ua tau zoo dua.

Tau qhov twg los: www.hab.com

Ntxiv ib saib