డేటాబేస్‌లలో లావాదేవీల ఐసోలేషన్ స్థాయిని బలహీనపరచడం వల్ల ఏమి జరుగుతుంది?

అందరికి వందనాలు. వ్లాడిస్లావ్ రోడిన్ టచ్‌లో ఉన్నారు. నేను ప్రస్తుతం OTUSలో హై వర్క్‌లోడ్ ఆర్కిటెక్ట్ కోర్సుకు కోర్స్ లీడర్‌ని మరియు సాఫ్ట్‌వేర్ ఆర్కిటెక్చర్ కోర్సులను కూడా బోధిస్తున్నాను.

టీచింగ్‌తో పాటు, మీరు గమనించినట్లుగా, నేను హబ్రేలో OTUS బ్లాగ్ కోసం ఒరిజినల్ మెటీరియల్‌ని వ్రాస్తున్నాను మరియు కోర్సు ప్రారంభంతో సమానంగా నేటి కథనంతో సమానంగా ఉండాలనుకుంటున్నాను. "PostgreSQL", ఇది ప్రస్తుతం నమోదు కోసం తెరవబడింది.

డేటాబేస్‌లలో లావాదేవీల ఐసోలేషన్ స్థాయిని బలహీనపరచడం వల్ల ఏమి జరుగుతుంది?

పరిచయం

В చివరిసారి డేటాబేస్‌లలోని లావాదేవీలు రెండు సమస్యలను పరిష్కరించడానికి ఉపయోగపడతాయనే వాస్తవం గురించి మేము మాట్లాడాము: తప్పు సహనం మరియు పోటీ వాతావరణంలో డేటాకు ప్రాప్యత. ఈ పనులను పూర్తిగా నిర్వహించడానికి, లావాదేవీ తప్పనిసరిగా ACID లక్షణాలను కలిగి ఉండాలి. ఈ రోజు మనం లేఖ గురించి వివరంగా మాట్లాడుతాము నేను (ఐసోలేషన్) ఈ సంక్షిప్తీకరణలో.

ఇన్సులేషన్

ఐసోలేషన్ అనేది పోటీ వాతావరణంలో డేటాను యాక్సెస్ చేసే సమస్యను పరిష్కరిస్తుంది, ముఖ్యంగా జాతి పరిస్థితుల నుండి రక్షణను అందిస్తుంది. ఆదర్శవంతంగా, ఐసోలేషన్ అంటే సీరియలైజేషన్, ఇది లావాదేవీలను సమాంతరంగా అమలు చేయడం వల్ల వచ్చే ఫలితం అవి సీక్వెన్షియల్‌గా అమలు చేయబడినట్లుగా ఉండేలా చూసే ఆస్తి. ఈ ఆస్తితో ఉన్న ప్రధాన సమస్య ఏమిటంటే, సాంకేతికంగా అందించడం చాలా కష్టం మరియు ఫలితంగా, సిస్టమ్ పనితీరుపై గణనీయమైన ప్రభావం చూపుతుంది. అందుకే ఐసోలేషన్ తరచుగా బలహీనపడుతుంది, కొన్ని క్రమరాహిత్యాల ప్రమాదాలను అంగీకరిస్తుంది, ఇది క్రింద చర్చించబడుతుంది. కొన్ని క్రమరాహిత్యాలు సంభవించే అవకాశం లావాదేవీల ఐసోలేషన్ స్థాయిని ఖచ్చితంగా వర్ణిస్తుంది.

అత్యంత ప్రసిద్ధ క్రమరాహిత్యాలు: డర్టీ రీడ్, నాన్-రిపీటబుల్ రీడ్, ఫాంటమ్ రీడ్, అయితే వాస్తవానికి ఇంకా 5 ఉన్నాయి: డర్టీ రైట్, కర్సర్ లాస్ట్ అప్‌డేట్, లాస్ట్ అప్‌డేట్, రీడ్ స్కేవ్, రైట్ స్కే.

మురికిగా వ్రాయండి

క్రమరాహిత్యం యొక్క సారాంశం ఏమిటంటే, లావాదేవీలు కట్టుబడి లేని డేటాను ఓవర్‌రైట్ చేయగలవు.

డేటాబేస్‌లలో లావాదేవీల ఐసోలేషన్ స్థాయిని బలహీనపరచడం వల్ల ఏమి జరుగుతుంది?

ఈ క్రమరాహిత్యం ప్రమాదకరం ఎందుకంటే రెండు లావాదేవీలు (చిత్రంలో ఉన్నట్లు) చేసిన తర్వాత డేటా వివాదాస్పదమవుతుంది, కానీ పరమాణుత్వం ఉల్లంఘించినందున కూడా: మేము నిబద్ధత లేని డేటాను ఓవర్‌రైట్ చేయడానికి అనుమతిస్తాము కాబట్టి, ఒక లావాదేవీని మరొకదానిని ప్రభావితం చేయకుండా ఎలా వెనక్కి తీసుకోవాలో స్పష్టంగా తెలియదు. .

క్రమరాహిత్యాన్ని చాలా సరళంగా పరిగణించవచ్చు: రికార్డింగ్‌ను ప్రారంభించే ముందు మేము రికార్డ్‌కు లాక్‌ని అటాచ్ చేస్తాము, లాక్ తీసివేయబడే వరకు రికార్డ్‌ను మార్చకుండా ఇతర లావాదేవీలను నిషేధిస్తాము.

మురికిగా చదివారు

డర్టీ రీడ్ అంటే నిబద్ధత లేని డేటాను చదవడం.

డేటాబేస్‌లలో లావాదేవీల ఐసోలేషన్ స్థాయిని బలహీనపరచడం వల్ల ఏమి జరుగుతుంది?

నమూనా ఆధారంగా చర్యలు లేదా నిర్ణయాలు తీసుకోవలసి వచ్చినప్పుడు సమస్యలు తలెత్తుతాయి.

క్రమరాహిత్యాన్ని సరిచేయడానికి, మీరు రీడ్ లాక్‌ని జోడించవచ్చు, కానీ ఇది పనితీరును బాగా ప్రభావితం చేస్తుంది. లావాదేవీ యొక్క రోల్‌బ్యాక్ కోసం, డేటా యొక్క ప్రారంభ స్థితి (రికార్డింగ్ ప్రారంభానికి ముందు) సిస్టమ్‌లో తప్పనిసరిగా సేవ్ చేయబడాలని చెప్పడం చాలా సులభం. అక్కడి నుండి ఎందుకు చదవకూడదు? ఇది చాలా చవకైనది, చాలా డేటాబేస్‌లు డిఫాల్ట్‌గా డర్టీ రీడ్‌ను తొలగిస్తాయి.

అప్‌డేట్ కోల్పోయింది

లాస్ట్ అప్‌డేట్ అంటే కోల్పోయిన అప్‌డేట్‌లు, మరియు అనువాదం సమస్య యొక్క సారాన్ని చాలా ఖచ్చితంగా ప్రతిబింబిస్తుంది:

డేటాబేస్‌లలో లావాదేవీల ఐసోలేషన్ స్థాయిని బలహీనపరచడం వల్ల ఏమి జరుగుతుంది?

వాస్తవానికి, లావాదేవీ T2 ఫలితం రివర్స్ చేయబడింది. ఈ పరిస్థితిని స్పష్టమైన లేదా అవ్యక్త వ్రాత తాళాల ద్వారా సరిచేయవచ్చు. అంటే, మేము రికార్డ్‌ను అప్‌డేట్ చేస్తాము, ఆపై ఒక అవ్యక్త లాక్ ఏర్పడుతుంది లేదా మేము చేస్తాము నవీకరణ కోసం ఎంచుకోండి, రీడ్ అండ్ రైట్ లాక్ ఏర్పడేలా చేస్తుంది. అటువంటి ఆపరేషన్ చాలా ప్రమాదకరమని దయచేసి గమనించండి: మా "అమాయక" పఠనంతో, మేము ఇతర రీడింగులను బ్లాక్ చేస్తాము. కొన్ని డేటాబేస్‌లు మరింత సురక్షితమైనవి వాటా కోసం ఎంచుకోండి, డేటాను చదవడానికి అనుమతిస్తుంది కానీ సవరించబడదు.

కర్సర్ అప్‌డేట్ కోల్పోయింది

సూక్ష్మ నియంత్రణ కోసం, డేటాబేస్‌లు కర్సర్ వంటి ఇతర సాధనాలను అందించవచ్చు. కర్సర్ అనేది వరుసల సమితిని కలిగి ఉన్న ఒక నిర్మాణం మరియు వాటిపై మళ్ళించటానికి మిమ్మల్ని అనుమతిస్తుంది. సెలెక్ట్_స్టేట్‌మెంట్ కోసం కర్సర్_పేరును ప్రకటించండి. కర్సర్ యొక్క కంటెంట్‌లు ఎంపిక ద్వారా వివరించబడ్డాయి.

మీకు కర్సర్ ఎందుకు అవసరం? వాస్తవం ఏమిటంటే, కొన్ని డేటాబేస్‌లు సెలెక్ట్ (రీడ్ స్టెబిలిటీ) ద్వారా ఎంచుకున్న అన్ని రికార్డ్‌లకు లాక్‌ని అందిస్తాయి లేదా ప్రస్తుతం కర్సర్ ఉన్న రికార్డ్‌పై మాత్రమే (కర్సర్ స్థిరత్వం) అందిస్తాయి. కర్సర్ స్థిరత్వంతో, షార్ట్ లాక్ అమలు చేయబడుతుంది, ఇది మేము డేటా యొక్క పెద్ద నమూనాను మళ్ళిస్తే లాక్‌ల సంఖ్యను తగ్గించడానికి అనుమతిస్తుంది. కాబట్టి, కోల్పోయిన నవీకరణ క్రమరాహిత్యం కర్సర్ కోసం విడిగా వేరుచేయబడింది.

పునరావృతం కాని పఠనం

పునరావృతం కాని రీడ్ ఏమిటంటే, మా లావాదేవీని అమలు చేస్తున్నప్పుడు, ఒకే రికార్డ్‌ను వరుసగా 2 రీడ్‌లు వేర్వేరు ఫలితాలకు దారితీస్తాయి, ఎందుకంటే ఈ రెండు రీడ్‌ల మధ్య మరొక లావాదేవీ జోక్యం చేసుకుని, మా డేటాను మార్చింది మరియు కట్టుబడి ఉంది.

డేటాబేస్‌లలో లావాదేవీల ఐసోలేషన్ స్థాయిని బలహీనపరచడం వల్ల ఏమి జరుగుతుంది?

ఇది కూడా ఎందుకు సమస్య? 2 USD కంటే తక్కువ ధర ఉన్న అన్ని వస్తువులను ఎంచుకోవడం చిత్రంలో లావాదేవీ T150 యొక్క లక్ష్యం అని ఊహించండి. మరొకరు ధరను $200కి అప్‌డేట్ చేసారు. అందువలన, ఇన్స్టాల్ ఫిల్టర్ పని చేయలేదు.

రెండు-దశల ఇంటర్‌లాక్‌లు జోడించబడినప్పుడు లేదా MVCC మెకానిజం ఉపయోగించినప్పుడు ఈ క్రమరాహిత్యాలు జరగవు, నేను విడిగా చర్చించాలనుకుంటున్నాను.

ఫాంటమ్ చదివాడు

ఫాంటమ్ అనేది మరొక లావాదేవీ ద్వారా జోడించబడిన డేటా యొక్క రీడ్.

డేటాబేస్‌లలో లావాదేవీల ఐసోలేషన్ స్థాయిని బలహీనపరచడం వల్ల ఏమి జరుగుతుంది?

ఉదాహరణగా, ఈ క్రమరాహిత్యం సంభవించినప్పుడు చౌకైన ఉత్పత్తి యొక్క తప్పు ఎంపికను మనం గమనించవచ్చు.

ఫాంటమ్ రీడ్‌లను వదిలించుకోవడం ఇప్పటికే చాలా కష్టం. రెగ్యులర్ బ్లాకింగ్ సరిపోదు, ఎందుకంటే ఇంకా ఉనికిలో లేని దాన్ని మనం నిరోధించలేము. 2PL సిస్టమ్‌లు ప్రిడిక్టివ్ లాకింగ్‌ను ఉపయోగిస్తాయి, అయితే MVCC సిస్టమ్‌లు లావాదేవీల షెడ్యూలర్‌ను కలిగి ఉంటాయి, ఇది ఇన్‌సర్ట్ ద్వారా అంతరాయం కలిగించే లావాదేవీలను వెనక్కి తీసుకుంటుంది. మొదటి మరియు రెండవ యంత్రాంగాలు రెండూ చాలా భారీగా ఉంటాయి.

వక్రంగా చదవండి

మేము అనేక పట్టికలతో పని చేస్తున్నప్పుడు రీడ్ స్కే ఏర్పడుతుంది, వీటిలో కంటెంట్‌లు స్థిరంగా మారాలి.

పోస్ట్‌లు మరియు వాటి మెటా సమాచారాన్ని సూచించే పట్టికలు మా వద్ద ఉన్నాయని చెప్పండి:

డేటాబేస్‌లలో లావాదేవీల ఐసోలేషన్ స్థాయిని బలహీనపరచడం వల్ల ఏమి జరుగుతుంది?

ఒక లావాదేవీ పట్టికల నుండి చదవబడుతుంది, మరొకటి వాటిని సవరించింది:

డేటాబేస్‌లలో లావాదేవీల ఐసోలేషన్ స్థాయిని బలహీనపరచడం వల్ల ఏమి జరుగుతుంది?

లావాదేవీ T1 ఫలితంగా, పోస్ట్‌కు శీర్షిక = మంచిది మరియు నవీకరించబడిన_by = T2 ఉంది, ఇది ఒకరకమైన అస్థిరత.

వాస్తవానికి, ఇది పునరావృతం కాని రీడ్, కానీ అనేక పట్టికలలో భాగంగా.

దీన్ని పరిష్కరించడానికి, T1 అది చదివే అన్ని అడ్డు వరుసలకు తాళాలు వేయగలదు, ఇది T2 లావాదేవీని సమాచారాన్ని మార్చకుండా నిరోధిస్తుంది. MVCC విషయంలో, T2 లావాదేవీ రద్దు చేయబడుతుంది. మేము కర్సర్‌లను ఉపయోగిస్తే ఈ క్రమరాహిత్యం నుండి రక్షణ ముఖ్యమైనది కావచ్చు.

వక్రంగా వ్రాయండి

ఈ క్రమరాహిత్యాన్ని ఉదాహరణతో వివరించడం కూడా సులభం: మా సిస్టమ్‌లో కనీసం ఒక వైద్యుడు డ్యూటీలో ఉండాలని అనుకుందాం, అయితే ఇద్దరు వైద్యులు తమ విధిని రద్దు చేయాలని నిర్ణయించుకున్నారు:

డేటాబేస్‌లలో లావాదేవీల ఐసోలేషన్ స్థాయిని బలహీనపరచడం వల్ల ఏమి జరుగుతుంది?

డేటాబేస్‌లలో లావాదేవీల ఐసోలేషన్ స్థాయిని బలహీనపరచడం వల్ల ఏమి జరుగుతుంది?

వైద్యులెవరూ డ్యూటీలో ఉండని పరిస్థితి నెలకొంది. ఇలా ఎందుకు జరిగింది? లావాదేవీ మరొక లావాదేవీ ద్వారా ఉల్లంఘించగల షరతును తనిఖీ చేస్తున్నందున మరియు ఐసోలేషన్ కారణంగా మాకు ఈ మార్పు కనిపించలేదు.

ఇది అదే పునరావృతం కాని చదవడం. ప్రత్యామ్నాయంగా, ఎంపిక చేసినవి ఈ రికార్డులపై తాళాలు వేయగలవు.

రైట్ స్కే మరియు రీడ్ స్కే అనేది మునుపటి క్రమరాహిత్యాల కలయిక. మీరు రైట్ స్కేను పరిగణించవచ్చు, ఇది తప్పనిసరిగా ఫాంటమ్ రీడ్. ఉద్యోగుల పేర్లు, వారి జీతాలు మరియు వారు పని చేసే ప్రాజెక్ట్‌లను కలిగి ఉన్న పట్టికను పరిగణించండి:

డేటాబేస్‌లలో లావాదేవీల ఐసోలేషన్ స్థాయిని బలహీనపరచడం వల్ల ఏమి జరుగుతుంది?

డేటాబేస్‌లలో లావాదేవీల ఐసోలేషన్ స్థాయిని బలహీనపరచడం వల్ల ఏమి జరుగుతుంది?

ఫలితంగా, మేము ఈ క్రింది చిత్రాన్ని పొందుతాము: ప్రతి మేనేజర్ వారి మార్పు బడ్జెట్‌ను అధిగమించడానికి దారితీయదని భావించారు, కాబట్టి వారు సిబ్బంది మార్పులను చేసారు, అది కలిసి ఖర్చును అధిగమించడానికి దారితీసింది.

సమస్యకు కారణం ఫాంటమ్ రీడింగ్‌లో ఉన్నట్లే.

కనుగొన్న

డేటాబేస్‌లో లావాదేవీల ఐసోలేషన్ స్థాయిని సడలించడం అనేది భద్రత మరియు పనితీరు మధ్య లావాదేవీ; కొన్ని క్రమరాహిత్యాలు సంభవించినట్లయితే వ్యాపారానికి సంభావ్య ప్రమాదాల ఆధారంగా ఈ స్థాయి ఎంపికను సంప్రదించాలి.

కోర్సు గురించి మరింత తెలుసుకోండి.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి