1.1 పరిచయం
మరియు ఇప్పుడు వినోదం ప్రారంభమవుతుంది - లావాదేవీలు ఎలా పని చేస్తాయనే సిద్ధాంతం. మీరు ఒకే డేటాను వేర్వేరు థ్రెడ్లలో మార్చినప్పుడు సిస్టమ్ను ఎలా పనిలో ఉంచుకోవాలి? లేదా మీరు ఒక లావాదేవీని మరొకదానిలో అమలు చేయాలనుకుంటున్నారా? లావాదేవీల ఐసోలేషన్ను అధ్యయనం చేయడం ద్వారా మేము ఈ ప్రశ్నలకు సమాధానాల కోసం వెతకడం ప్రారంభిస్తాము ...
లావాదేవీ ఐసోలేషన్ స్థాయి అనేది DBMSలో తార్కికంగా సమాంతర లావాదేవీల అమలు ఫలితంగా, అస్థిరమైన డేటా ఎంత వరకు అనుమతించబడుతుందో నిర్ణయించే షరతులతో కూడిన విలువ. లావాదేవీల ఐసోలేషన్ స్థాయిల స్కేల్ అత్యల్ప నుండి అత్యధికంగా ర్యాంక్ చేయబడిన అనేక విలువలను కలిగి ఉంటుంది; అధిక ఐసోలేషన్ స్థాయి మెరుగైన డేటా అనుగుణ్యతకు అనుగుణంగా ఉంటుంది, అయితే దీని ఉపయోగం భౌతికంగా సమాంతర లావాదేవీల సంఖ్యను తగ్గించవచ్చు.
దీనికి విరుద్ధంగా, తక్కువ ఐసోలేషన్ స్థాయి మరింత సమాంతర లావాదేవీలను అనుమతిస్తుంది, కానీ డేటా ఖచ్చితత్వాన్ని తగ్గిస్తుంది. అందువలన, ఉపయోగించిన లావాదేవీ ఐసోలేషన్ స్థాయిని ఎంచుకోవడం, సమాచార వ్యవస్థ యొక్క డెవలపర్, కొంత వరకు, పని వేగం మరియు సిస్టమ్ నుండి అందుకున్న డేటా యొక్క హామీ స్థిరత్వాన్ని నిర్ధారించడం మధ్య ఎంపికను అందిస్తుంది.
లావాదేవీలను ఉపయోగించి ఏకకాల యాక్సెస్ యొక్క సమస్యలు
లావాదేవీలు సమాంతరంగా అమలు చేయబడినప్పుడు, క్రింది సమస్యలు సాధ్యమే:
- కోల్పోయిన నవీకరణ - వేర్వేరు లావాదేవీల ద్వారా ఒక డేటా బ్లాక్ని ఏకకాలంలో మార్చినట్లయితే, చివరిది మినహా అన్ని మార్పులు పోతాయి;
- "డర్టీ" రీడింగ్ (eng. డర్టీ రీడ్) - ఒక లావాదేవీ ద్వారా జోడించబడిన లేదా మార్చబడిన రీడింగ్ డేటా, అది తదనంతరం నిర్ధారించబడదు (వెనక్కి మార్చబడింది);
- పునరావృతం కాని రీడ్ (eng. నాన్-రిపీటబుల్ రీడ్) - అదే లావాదేవీలో తిరిగి చదివేటప్పుడు, గతంలో చదివిన డేటా మార్చబడుతుంది;
- ఫాంటమ్ రీడ్లు - దాని అమలు సమయంలో ఒక లావాదేవీ అనేక సార్లు అదే ప్రమాణాల ప్రకారం అనేక వరుసలను ఎంపిక చేస్తుంది. ఈ పొందడం మధ్య మరొక లావాదేవీ మొదటి లావాదేవీ యొక్క పొందే ప్రమాణంలో ఉపయోగించిన కొన్ని అడ్డు వరుసల వరుసలను జోడించడం లేదా సవరించడం మరియు విజయవంతంగా ముగుస్తుంది. ఫలితంగా, మొదటి లావాదేవీలో ఒకే ఎంపికలు వేర్వేరు వరుసల సెట్లను ఇస్తాయని తేలింది.
ఈ సమస్యలు సంభవించే పరిస్థితులను పరిగణించండి.
1.2 నవీకరణను కోల్పోయింది
వివిధ లావాదేవీల ద్వారా ఒక డేటా బ్లాక్ని ఏకకాలంలో మార్చినప్పుడు, మార్పులలో ఒకటి పోయినప్పుడు పరిస్థితి.
ఒకే సమయంలో రెండు లావాదేవీలు నడుస్తున్నాయని అనుకుందాం:
లావాదేవీ 1 | లావాదేవీ 2 |
---|---|
అప్డేట్ tbl1 సెట్ f2=f2+20 ఎక్కడ f1=1; | అప్డేట్ tbl1 సెట్ f2=f2+25 ఎక్కడ f1=1; |
రెండు లావాదేవీలలో, f2 ఫీల్డ్ యొక్క విలువ మారుతుంది; పూర్తయిన తర్వాత, ఫీల్డ్ విలువ తప్పనిసరిగా 45 పెంచాలి. వాస్తవానికి, ఈ క్రింది చర్యల క్రమం సంభవించవచ్చు:
- రెండు లావాదేవీలు ఏకకాలంలో ఫీల్డ్ యొక్క ప్రస్తుత స్థితిని చదువుతాయి. ఇక్కడ ఖచ్చితమైన భౌతిక సమ్మతి అవసరం లేదు, మరొక లావాదేవీ దాని ఫలితాన్ని వ్రాసే ముందు క్రమంలో రెండవ రీడ్ ఆపరేషన్ పూర్తయితే సరిపోతుంది.
- రెండు లావాదేవీలు గతంలో చదివిన విలువకు వరుసగా 20 మరియు 25 జోడించడం ద్వారా కొత్త ఫీల్డ్ విలువను గణిస్తాయి.
- లావాదేవీలు గణన ఫలితాన్ని తిరిగి ఫీల్డ్ f2కి వ్రాయడానికి ప్రయత్నిస్తాయి. ఒకే సమయంలో రెండు వ్రాతలను నిర్వహించడం భౌతికంగా అసాధ్యం కాబట్టి, వాస్తవానికి వ్రాత ఆపరేషన్లలో ఒకటి ముందుగా, మరొకటి తర్వాత నిర్వహించబడుతుంది. రెండవ వ్రాత ఆపరేషన్ మొదటి దాని ఫలితాన్ని ఓవర్రైట్ చేస్తుంది.
ఫలితంగా, f2 ఫీల్డ్ యొక్క విలువ, రెండు లావాదేవీలు పూర్తయిన తర్వాత, 45 కాదు, 20 లేదా 25 వరకు పెరగవచ్చు, అంటే, డేటాను మార్చే లావాదేవీలలో ఒకటి "అదృశ్యమవుతుంది".
1.3 "డర్టీ" పఠనం
లావాదేవీ ద్వారా జోడించబడిన లేదా సవరించబడిన డేటాను చదవడం, అది తర్వాత విఫలమవుతుంది (రోల్బ్యాక్).
కింది SQL స్టేట్మెంట్లను అమలు చేసే వేర్వేరు అప్లికేషన్ల ద్వారా మనకు రెండు లావాదేవీలు తెరవబడిందని అనుకుందాం:
లావాదేవీ 1 | లావాదేవీ 2 |
---|---|
అప్డేట్ tbl1 సెట్ f2=f2+1 ఎక్కడ f1=1; | |
tbl1 నుండి f2ని ఎంచుకోండి ఎక్కడ f1=1; | |
ROLLBACK పని; |
లావాదేవీ 1లో, ఫీల్డ్ f2 విలువ మార్చబడింది, ఆపై లావాదేవీ 2లో, ఈ ఫీల్డ్ యొక్క విలువ ఎంచుకోబడుతుంది. ఆ తర్వాత, లావాదేవీ 1 వెనక్కి తీసుకోబడుతుంది. ఫలితంగా, రెండవ లావాదేవీ ద్వారా అందుకున్న విలువ డేటాబేస్లో నిల్వ చేయబడిన విలువకు భిన్నంగా ఉంటుంది.
1.4 పునరావృతం కాని పఠనం
అదే లావాదేవీలో తిరిగి చదివేటప్పుడు, గతంలో చదివిన డేటా మారినప్పుడు పరిస్థితి మారుతుంది.
కింది SQL స్టేట్మెంట్లను అమలు చేసే వేర్వేరు అప్లికేషన్ల ద్వారా మనకు రెండు లావాదేవీలు తెరవబడిందని అనుకుందాం:
లావాదేవీ 1 | లావాదేవీ 2 |
---|---|
tbl1 నుండి f2ని ఎంచుకోండి ఎక్కడ f1=1; | |
అప్డేట్ tbl1 సెట్ f2=f2+3 ఎక్కడ f1=1; | |
COMMIT; | |
tbl1 నుండి f2ని ఎంచుకోండి ఎక్కడ f1=1; |
లావాదేవీ 2లో, ఫీల్డ్ f2 యొక్క విలువ ఎంపిక చేయబడింది, తర్వాత లావాదేవీ 1లో, ఫీల్డ్ f2 విలువ మార్చబడుతుంది. మీరు లావాదేవీ 2లోని ఫీల్డ్ f2 నుండి విలువను ఎంచుకోవడానికి మళ్లీ ప్రయత్నిస్తే, వేరొక ఫలితం పొందబడుతుంది. డేటాను పాక్షికంగా సవరించడానికి మరియు డేటాబేస్కు తిరిగి వ్రాయడానికి చదవబడినప్పుడు ఈ పరిస్థితి ప్రత్యేకంగా ఆమోదయోగ్యం కాదు.
1.5 "ఫాంటమ్స్" చదవడం
ఒకే లావాదేవీలో పదేపదే చదివేటప్పుడు, అదే ఎంపిక వివిధ వరుసల సెట్లను అందించినప్పుడు పరిస్థితి.
కింది SQL స్టేట్మెంట్లను అమలు చేసే వివిధ అప్లికేషన్ల ద్వారా రెండు లావాదేవీలు తెరవబడి ఉన్నాయని అనుకుందాం:
లావాదేవీ 1 | లావాదేవీ 2 |
---|---|
tbl1 నుండి SUM(f2)ని ఎంచుకోండి; | |
tbl1 (f1,f2) విలువలు(15,20)లోకి చొప్పించండి; | |
COMMIT; | |
tbl1 నుండి SUM(f2)ని ఎంచుకోండి; |
లావాదేవీ 2 ఫీల్డ్ f2 యొక్క అన్ని విలువలను ఉపయోగించే SQL స్టేట్మెంట్ను అమలు చేస్తుంది. అప్పుడు లావాదేవీ 1లో కొత్త అడ్డు వరుస చొప్పించబడింది, దీని వలన లావాదేవీ 2లో SQL స్టేట్మెంట్ని మళ్లీ అమలు చేయడం వలన వేరే ఫలితం వస్తుంది. ఈ పరిస్థితిని ఫాంటమ్ రీడింగ్ (ఫాంటమ్ రీడింగ్) అంటారు. ఇది పునరావృతం కాని పఠనం నుండి భిన్నంగా ఉంటుంది, దీనిలో పదేపదే డేటా యాక్సెస్ యొక్క ఫలితం మారినది డేటా యొక్క మార్పు/తొలగింపు కారణంగా కాదు, కొత్త (ఫాంటమ్) డేటా కనిపించడం వల్ల.
GO TO FULL VERSION