Ìtẹ̀lé delta rẹ ń pàdánù àwọn commit tó pẹ́: kọ́ kọ́sọ̀ tó ṣeé gbẹ́kẹ̀lé
Ìlà kan dé pẹ̀lú àìpẹ́ nítorí pé àmì omi kì í ṣe ààlà commit. Tẹ̀lé ìkùnà náà, lẹ́yìn náà ṣàlàyé àgbègbè, ààlà, ìtọ́jú àti ìpadàbọ̀ àìléwu.
Èyí ni ìkùnà tí mo ti rí lẹ́ẹ̀mejì, nínú ẹ̀rọ méjì ọ̀tọ̀ọ̀tọ̀. Ìgbáwọlé kan ń ṣiṣẹ́ ní 10:00 ó sì ń gbasilẹ̀ àmì àkókò àtúnṣe ìkẹyìn tó ga jùlọ tí ó rí. Ìbáṣepọ̀ kan tó bẹ̀rẹ̀ ní 09:58 ṣì ṣí, ó ń commit ní 10:03 ó sì ń gbé àmì àkókò láti àkókò tí ó bẹ̀rẹ̀. Ìgbáwọlé tó kàn kò béèrè fún àwọn ìlà tuntun ju 10:00 lọ nìkan, kò sì rí i rárá. Ìwọ̀n ìgbéjáde dára gan-an, ṣùgbọ́n dátà náà kò tọ̀nà.
Tẹ̀lé ìgbáwọlé tó pàdánù ìlà kan
Tẹ̀lé ìtòlẹ́sẹẹsẹ ìṣẹ̀lẹ̀, kì í ṣe SQL. Ohun èlò náà ń kọ àkókò àtúnṣe ìlà nígbà tí ìbáṣepọ̀ bẹ̀rẹ̀, kì í ṣe nígbà tí ó commit. Olùgbéjáde ń ka àmì omi aago ògiri nígbà tí ìbáṣepọ̀ yẹn ṣì ṣí. Lẹ́yìn náà ìbáṣepọ̀ ń commit pẹ̀lú àkókò àtúnṣe tó dàgbà ju àmì omi tí a fipamọ́ lọ. Ẹ̀ka tó kàn ti olùmúlò bẹ̀rẹ̀ lẹ́yìn àmì omi, nítorí náà ìlà náà wà lẹ́yìn kọ́sọ̀, a kò sì ní yàn án mọ́.
Kò sí ohun tó ń gbasilẹ̀ àṣìṣe, nítorí kò sí ohun tó kùnà. Èyí ni ó ń jẹ́ kí irú àṣìṣe yìí wọ́n: ìtẹ̀lé delta yára, iye ìlà dàbí ẹni tó tọ́, ìlà tó sọnù sì ń farahàn ní ọ̀sẹ̀ mélòó kan lẹ́yìn náà gẹ́gẹ́ bí tikẹ́ẹ̀tì ìbámu tí kò sí ẹni tó lè tún ṣe.
Àwọn nọ́mbà ìtẹ̀lélé ní irú àbùkù kan náà fún ìdí mìíràn. ID aláìyẹ̀yẹ̀ sọ ìtòlẹ́sẹẹsẹ tí wọ́n fi àwọn iye sí, kì í ṣe ìtòlẹ́sẹẹsẹ tí àwọn ìbáṣepọ̀ commit. Ìbáṣepọ̀ tó gba nọ́mbà kékeré lè commit lẹ́yìn èyí tó gba nọ́mbà ńlá, nítorí náà kọ́sọ̀ tó dá lórí ìtòlẹ́sẹẹsẹ ìpínpín lè fi ihò sílẹ̀ pẹ̀lú.
Ìlérí márùn-ún tí ìtẹ̀lé gbọ́dọ̀ ṣe
Kí o tó yan ọ̀nà gbígbé, béèrè fún àdéhùn pẹ̀lú ìpín márùn-ún láti ọ̀dọ̀ ẹ̀rọ orísun. Bí ìpín kankan bá ṣe àìsí, ìwọ ní àfojúsùn, kì í ṣe ìtẹ̀lé àyípadà.
- Àgbègbè: ìfiwọlé, ìmúdójúìwọ̀n àti ìparẹ́, ọ̀kọ̀ọ̀kan pẹ̀lú kọ́kọ́rọ́ tó dúró ṣinṣin tí ó pọn dandan láti lò ó.
- Ààlà: kí ni iye kọ́sọ̀ túmọ̀ sí àti kí ni ẹ̀ka tó wà ní ìbámu ní.
- Ìbámu: bí wọ́n ṣe ń ka àwọn tábìlì tó ní ìsopọ̀ láì dàpọ̀ àwọn ipò orísun tí kò bámu.
- Ìtọ́jú: báwo ni olùmúlò tó já kuro ṣe lè tẹ̀síwájú láti ipò tó fipamọ́.
- Ìpadàbọ̀: àwòrán kíkún tí a ṣe àtìlẹ́yìn fún nígbà tí ipò yẹn kò bá tọ́ mọ́.
Ìlànà tí a ṣe àtìlẹ́yìn lè mú èrò márùn-ún náà ṣẹ. Ìwé SQL Server nípa mímójútó àyípadà jẹ́ àpẹẹrẹ kan tí a tẹ̀ jáde: ó ń ṣàlàyé ẹ̀yà tó kéré jùlọ tó wúlò, ó ń gbasilẹ̀ ìparẹ́ pẹ̀lú àwọn àyípadà, ó sì ń ṣàpèjúwe ìbáṣepọ̀ àwòrán tó ń bo ìjẹ́rìí, gbígba ẹ̀yà àti àwọn ìbéèrè àyípadà tó ní ìsopọ̀. Àpẹẹrẹ ni ti ohun tí o gbọdọ̀ béèrè lọ́wọ́ orísun, kì í ṣe ìkọ̀wé tí o lè fi mọ́ ẹ̀rọ mìíràn.
Ṣe àpẹẹrẹ ojú-ìwé àyẹ̀wò gẹ́gẹ́ bí apá kan pipeline
Ipò tí a fipamọ́ ti olùmúlò ni ẹ̀rọ ipò gidi, nítorí náà kọ ọ bẹ́ẹ̀. Kọ́sọ̀ lè tẹ̀síwájú nìkan nípasẹ̀ ìṣàn iṣẹ́ tó ti lo ẹ̀ka náà tí ó sì ti commit ìbáṣepọ̀ àfojúsùn.
cursor = durable_checkpoint() # last fully applied position
batch = extract(cursor, upper_bound) # one consistent batch
apply(batch) # idempotent at the target
commit()
checkpoint(batch.upper_bound) # only now
Bí ìfijíṣẹ́ bá kùnà ní àárín, ṣe ìbámu ẹ̀ka kan náà dípò kíkọ ipò orísun tuntun. Ìyọkúrò lẹ́ẹ̀kan sí i pẹ̀lú ààlà òkè tuntun ni ọ̀nà tí ìlò apá kan fi di àlàfo àìnípẹ̀kun. Òfin dígí kan náà wà ní ẹ̀gbẹ́ kejì pẹ̀lú: ìlò idempotent ní àfojúsùn ń dènà àwọn ẹ̀dà, kò sì ṣe ohunkóhun fún àyípadà tí ìyọkúrò kò rí rárá.
Àwọn ìparẹ́ nílò àkọsílẹ̀, kì í ṣe ìparí
Fífi àwọn ìlà tó ṣì wà wé kò lè sọ fún olùmúlò àwọn kọ́kọ́rọ́ tó sọnù. Orísun tí kò gbasilẹ̀ ìparẹ́ rárá ń fi àwọn àṣàyàn méjì tí kò pé sílẹ̀: fífi ìtàn kọ́kọ́rọ́ pamọ́ tó pẹ́ tó láti fi ṣe ìyàtọ̀, tàbí ṣíṣe ìbámu kíkún tó ṣe kedere ní àkókò tí a ṣètò. Méjèèjì ni ìpinnu àpẹẹrẹ tó ní iye owó, kò sì sí ọ̀kan nínú wọn bí kò bá sí ẹni tó ní í.
Ìtọ́jú jẹ́ irú ìpinnu kan náà. Gbogbo ìtẹ̀lé àyípadà tí a ṣe àtìlẹ́yìn ní fèrèsé kan; sọ ọ nínú àdéhùn kí o sì kìlọ̀ nígbà tí ojú-ìwé àyẹ̀wò olùmúlò bá súnmọ́ ọ. Olùmúlò tó jí lẹ́yìn ìdádúró ọ̀sẹ̀ méjì yẹ kí ó ka àṣìṣe tó ṣe kedere "ìpadàbọ̀ nílò" dípò gbígba ẹ̀ka apá kan ní ìdákẹ́jẹ́ẹ́.
Lẹ́yìn náà díwọ̀n bóyá delta yẹ́
Pípada sí fífi gbogbo kọ́kọ́rọ́ àti hash wé jẹ́ òtítọ́ nígbà mìíràn, ó sì yẹ kí o mọ iye owó rẹ̀. Ìwọ ṣì ń gbé ìsọfúnni nípa gbogbo ìlà jáde, hash kò fún ọ ní àwòrán tó wà ní ìbámu káàkiri àwọn tábìlì, ètò hash sì ń mú àwọn ìbéèrè tirẹ̀ wá nípa ìṣàpèjúwe àti ìkọlù. Báìtì tó kéré pẹ̀lú ààlà tí a lè ṣàyẹ̀wò ni àfojúsùn; báìtì tó kéré tí ń fi àyípadà tí a commit sílẹ̀ ní ìdákẹ́jẹ́ẹ́ kì í ṣe delta rárá.
Ọ̀wọ̀n àtúnṣe ìkẹyìn jẹ́ àmì. Kọ́sọ̀ tó ye commit pẹ́, ìparẹ́ àti ìdádúró gígùn kọjá ni àdéhùn.