5.1 ఏకకాల సమస్య

కొంచెం సుదూర సిద్ధాంతంతో ప్రారంభిద్దాం.

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

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

కాబట్టి, మీరు ఇంటి చుట్టూ ఇంతకుముందు సేవ్ చేసిన పనుల జాబితాను లోడ్ చేయడానికి మిమ్మల్ని అనుమతించే మొబైల్ ఇంటర్‌ఫేస్‌తో ఒక అప్లికేషన్‌ను వ్రాశారని ఊహించుకుందాం - అంటే, డేటాబేస్ నుండి చదవండి మరియు దానిని కొత్త పనులతో భర్తీ చేయండి, అలాగే ప్రతి నిర్దిష్టానికి ప్రాధాన్యత ఇవ్వండి. పని - 1 (అత్యధిక) నుండి 3 (అత్యల్ప). మీ మొబైల్ అప్లికేషన్‌ని ఒకేసారి ఒకరు మాత్రమే ఉపయోగిస్తున్నారని అనుకుందాం. కానీ ఇప్పుడు మీరు మీ సృష్టి గురించి మీ తల్లికి చెప్పడానికి ధైర్యం చేసారు మరియు ఇప్పుడు ఆమె రెండవ సాధారణ వినియోగదారుగా మారింది. మీరు అదే సమయంలో, అదే మిల్లీసెకన్‌లో, కొంత పనిని - "కిటికీలను కడగడం" - వేరే స్థాయి ప్రాధాన్యతతో సెట్ చేయాలని నిర్ణయించుకుంటే ఏమి జరుగుతుంది?

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

కొన్ని ప్రక్రియలు డేటాబేస్కు అభ్యర్థన చేసినప్పుడు, అది ఒక నిర్దిష్ట స్థితిలో దాన్ని కనుగొంటుంది. స్టేట్‌ఫుల్ సిస్టమ్ అనేది మునుపటి సంఘటనలను గుర్తుంచుకునే మరియు కొంత సమాచారాన్ని నిల్వ చేసే వ్యవస్థ, దీనిని "స్టేట్" అంటారు. ఒక వేరియబుల్ integer0, 1, 2, లేదా 42 అని చెప్పవచ్చు. మ్యూటెక్స్ (మ్యూచువల్ ఎక్స్‌క్లూజన్) రెండు స్థితులను కలిగి ఉంటుంది: లాక్ లేదా అన్‌లాక్ చేయబడింది , బైనరీ సెమాఫోర్ ("అవసరం" vs. "విడుదల చేయబడింది") మరియు సాధారణంగా బైనరీ (బైనరీ) డేటా రకాలు మరియు వేరియబుల్స్ రెండు స్థితులను మాత్రమే కలిగి ఉంటాయి - 1 లేదా 0.

రాష్ట్రం అనే భావన ఆధారంగా, పరిమిత ఆటోమేటన్ వంటి అనేక గణిత మరియు ఇంజనీరింగ్ నిర్మాణాలు ఆధారపడి ఉంటాయి - ఒక ఇన్‌పుట్ మరియు ఒక అవుట్‌పుట్‌ను కలిగి ఉండే మోడల్ మరియు ప్రతి క్షణంలో పరిమితమైన రాష్ట్రాలలో ఒకటిగా ఉంటుంది - మరియు “స్టేట్ ” డిజైన్ నమూనా, దీనిలో ఒక వస్తువు అంతర్గత స్థితిని బట్టి ప్రవర్తనను మారుస్తుంది (ఉదాహరణకు, ఒకటి లేదా మరొక వేరియబుల్‌కు ఏ విలువ కేటాయించబడిందనే దానిపై ఆధారపడి ఉంటుంది).

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

ఒక స్థితి నుండి మరొక స్థితికి పరివర్తన ("పరివర్తన") - చెప్పండి, పురోగతిలో నుండి విఫలమైంది - ఒక ఆపరేషన్ అంటారు. బహుశా, అందరికీ CRUD కార్యకలాపాలు తెలుసు - , , , లేదా ఇలాంటి HTTP పద్ధతులు - , , , . కానీ ప్రోగ్రామర్లు తరచుగా వారి కోడ్‌లోని ఆపరేషన్‌లకు ఇతర పేర్లను ఇస్తారు, ఎందుకంటే ఆపరేషన్ డేటాబేస్ నుండి నిర్దిష్ట విలువను చదవడం కంటే చాలా క్లిష్టంగా ఉంటుంది - ఇది డేటాను కూడా తనిఖీ చేస్తుంది, ఆపై మా ఆపరేషన్, ఇది ఫంక్షన్ రూపంలో ఉంటుంది, పిలవబడుతుంది, ఉదాహరణకు, మరియు ఈ ఆపరేషన్లు-ఫంక్షన్లను ఎవరు నిర్వహిస్తారు? ప్రక్రియలు ఇప్పటికే వివరించబడ్డాయి.createreadupdatedeletePOSTGETPUTDELETEvalidate()

కొంచెం ఎక్కువ, మరియు నేను నిబంధనలను ఇంత వివరంగా ఎందుకు వివరించాను అని మీరు అర్థం చేసుకుంటారు!

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

మన చేయవలసిన పనుల జాబితా అప్లికేషన్‌ను ఊహించుకుందాం. లో మొబైల్ ఇంటర్‌ఫేస్ ద్వారా మీరు డేటాబేస్‌కి అభ్యర్థన చేస్తారు 14:00:00.014మరియు మీ తల్లి 13:59:59.678(అంటే 336 మిల్లీసెకన్ల ముందు) అదే ఇంటర్‌ఫేస్ ద్వారా చేయవలసిన పనుల జాబితాను అప్‌డేట్ చేసి, దానికి డిష్‌లను కడగడం ద్వారా అప్‌డేట్ చేసారు. నెట్‌వర్క్ ఆలస్యం మరియు మీ డేటాబేస్ కోసం సాధ్యమయ్యే పనుల క్యూను పరిగణనలోకి తీసుకుంటే, మీరు మరియు మీ తల్లితో పాటు, మీ తల్లి స్నేహితులందరూ కూడా మీ అప్లికేషన్‌ను ఉపయోగిస్తే, డేటాబేస్ మీది ప్రాసెస్ చేసిన తర్వాత తల్లి అభ్యర్థనను అమలు చేయగలదు. మరో మాటలో చెప్పాలంటే, మీ రెండు అభ్యర్థనలు, అలాగే మీ తల్లి స్నేహితురాళ్ల నుండి వచ్చిన అభ్యర్థనలు ఒకే సమయంలో (ఏకకాలంలో) ఒకే డేటాకు పంపబడే అవకాశం ఉంది.

కాబట్టి మేము డేటాబేస్‌లు మరియు పంపిణీ చేయబడిన అప్లికేషన్‌ల రంగంలో అత్యంత ముఖ్యమైన పదానికి వచ్చాము - కాన్‌కరెన్సీ. రెండు ఆపరేషన్ల ఏకకాలానికి సరిగ్గా అర్థం ఏమిటి? కొన్ని ఆపరేషన్ T1 మరియు కొన్ని ఆపరేషన్ T2 ఇచ్చినట్లయితే, అప్పుడు:

  • T1ని అమలు చేసే T2 ప్రారంభ సమయానికి ముందు ప్రారంభించవచ్చు మరియు T2 ప్రారంభ మరియు ముగింపు సమయానికి మధ్య ముగించవచ్చు
  • T2ని T1 ప్రారంభ సమయానికి ముందు ప్రారంభించవచ్చు మరియు T1 ప్రారంభం మరియు ముగింపు మధ్య ముగించవచ్చు
  • T1 అమలు యొక్క ప్రారంభ మరియు ముగింపు సమయాల మధ్య T1ని ప్రారంభించవచ్చు మరియు ముగించవచ్చు
  • మరియు T1 మరియు T2 కొన్ని సాధారణ అమలు సమయాన్ని కలిగి ఉన్న ఏదైనా ఇతర దృశ్యం

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

మరియు వాస్తవానికి, పూర్తిగా సిద్ధాంతపరంగా ఏమి తప్పు కావచ్చు?

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

5.2 లావాదేవీలు మమ్మల్ని రక్షించడానికి వచ్చాయి

అటువంటి సమస్యలను పరిష్కరించడానికి, లావాదేవీ యొక్క భావన కనిపించింది - డేటాబేస్తో సీక్వెన్షియల్ ఆపరేషన్ల (స్టేట్ మార్పులు) యొక్క నిర్దిష్ట సమూహం, ఇది తార్కికంగా ఒకే ఆపరేషన్. నేను మళ్ళీ బ్యాంకుతో ఒక ఉదాహరణ ఇస్తాను - మరియు అనుకోకుండా కాదు, ఎందుకంటే లావాదేవీ యొక్క భావన స్పష్టంగా, ఖచ్చితంగా డబ్బుతో పని చేసే సందర్భంలో కనిపించింది. లావాదేవీకి క్లాసిక్ ఉదాహరణ ఒక బ్యాంకు ఖాతా నుండి మరొక ఖాతాకు డబ్బు బదిలీ: మీరు మొదట సోర్స్ ఖాతా నుండి మొత్తాన్ని ఉపసంహరించుకోవాలి మరియు దానిని లక్ష్య ఖాతాలో జమ చేయాలి.

ఈ లావాదేవీని నిర్వహించడం కోసం, అప్లికేషన్ డేటాబేస్‌లో అనేక చర్యలను చేయవలసి ఉంటుంది: పంపినవారి బ్యాలెన్స్‌ని తనిఖీ చేయడం, పంపినవారి ఖాతాలోని మొత్తాన్ని బ్లాక్ చేయడం, గ్రహీత ఖాతాకు మొత్తాన్ని జోడించడం మరియు పంపినవారి నుండి మొత్తాన్ని తీసివేయడం. అటువంటి లావాదేవీకి అనేక అవసరాలు ఉంటాయి. ఉదాహరణకు, అప్లికేషన్ బ్యాలెన్స్ గురించి కాలం చెల్లిన లేదా తప్పు సమాచారాన్ని అందుకోలేదు - ఉదాహరణకు, అదే సమయంలో ఒక సమాంతర లావాదేవీ సగంలో లోపంతో ముగిసి, ఖాతా నుండి నిధులు డెబిట్ చేయబడకపోతే - మరియు మా దరఖాస్తు ఇప్పటికే సమాచారాన్ని స్వీకరించింది. నిధులు రాసుకున్నారని.

ఈ సమస్యను పరిష్కరించడానికి, "ఐసోలేషన్" వంటి లావాదేవీ యొక్క అటువంటి ఆస్తిని పిలవబడింది: అదే సమయంలో ఇతర లావాదేవీలు నిర్వహించబడనట్లుగా మా లావాదేవీ అమలు చేయబడుతుంది. మా డేటాబేస్ ఏకకాలిక కార్యకలాపాలను ఒకదాని తర్వాత మరొకటి అమలు చేస్తున్నట్లుగా నిర్వహిస్తుంది - వాస్తవానికి , అత్యధిక ఐసోలేషన్ స్థాయిని స్ట్రిక్ట్ సీరియలైజబుల్ అంటారు . అవును, అత్యధికం, అంటే అనేక స్థాయిలు ఉన్నాయి.

"ఆపు," మీరు అంటున్నారు. మీ గుర్రాలను పట్టుకోండి సార్.

ప్రతి ఆపరేషన్‌కి కాల్ సమయం మరియు అమలు సమయం ఉంటుందని నేను ఎలా వివరించాను అని గుర్తుంచుకోండి. సౌలభ్యం కోసం, మీరు కాల్ చేయడం మరియు అమలు చేయడం 2 చర్యలుగా పరిగణించవచ్చు. అప్పుడు అన్ని కాల్ మరియు అమలు చర్యల యొక్క క్రమబద్ధీకరించబడిన జాబితాను డేటాబేస్ చరిత్ర అని పిలుస్తారు. అప్పుడు లావాదేవీ ఐసోలేషన్ స్థాయి అనేది చరిత్రల సమితి. ఏ కథనాలు "మంచివి" అని గుర్తించడానికి మేము ఐసోలేషన్ స్థాయిలను ఉపయోగిస్తాము. కథ "సీరియలైజబిలిటీని విచ్ఛిన్నం చేస్తుంది" లేదా "సీరియలైజ్ చేయదగినది కాదు" అని మనం చెప్పినప్పుడు, కథ సీరియల్ కథల సెట్‌లో లేదని అర్థం.

మనం ఎలాంటి కథల గురించి మాట్లాడుతున్నామో స్పష్టంగా చెప్పడానికి, నేను ఉదాహరణలు ఇస్తాను. ఉదాహరణకు, అటువంటి రకమైన చరిత్ర ఉంది - ఇంటర్మీడియట్ చదవండి . నడుస్తున్న మరొక లావాదేవీ B ద్వారా సవరించబడిన మరియు ఇంకా కట్టుబడి ఉండని ("నిబద్ధత లేదు") నుండి డేటాను చదవడానికి లావాదేవీ A అనుమతించబడినప్పుడు ఇది సంభవిస్తుంది - అంటే, వాస్తవానికి, మార్పులు ఇంకా పూర్తి చేయబడలేదు లావాదేవీ B, మరియు అది ఎప్పుడైనా వాటిని రద్దు చేయవచ్చు. మరియు, ఉదాహరణకు, రద్దు చేయబడిన ఉపసంహరణ లావాదేవీకి మా ఉదాహరణ మాత్రమే రద్దు చేయబడింది

అనేక సాధ్యమైన క్రమరాహిత్యాలు ఉన్నాయి. అంటే, క్రమరాహిత్యాలు అనేది డేటాబేస్‌కు పోటీ యాక్సెస్ సమయంలో సంభవించే ఒక రకమైన అవాంఛనీయ డేటా స్థితి. మరియు నిర్దిష్ట అవాంఛిత స్థితులను నివారించడానికి, డేటాబేస్‌లు వేర్వేరు స్థాయిల ఐసోలేషన్‌ను ఉపయోగిస్తాయి - అంటే అవాంఛిత రాష్ట్రాల నుండి వివిధ స్థాయిల డేటా రక్షణ. ఈ స్థాయిలు (4 ముక్కలు) ANSI SQL-92 ప్రమాణంలో జాబితా చేయబడ్డాయి.

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

-- Database: MySQL

-- Setup before test
create table test (id int primary key, value int) engine=innodb;
insert into test (id, value) values (1, 10), (2, 20);

-- Test the "read uncommited" isolation level on the "Intermediate Reads" (G1b) anomaly
set session transaction isolation level read uncommitted; begin; -- T1
set session transaction isolation level read uncommitted; begin; -- T2
update test set value = 101 where id = 1; -- T1
select * from test; -- T2. Shows 1 => 101
update test set value = 11 where id = 1; -- T1
commit; -- T1
select * from test; -- T2. Now shows 1 => 11
commit; -- T2

-- Result: doesn't prevent G1b

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

5.3 "I" మరియు ACIDలోని ఇతర అక్షరాలు

ప్రజలు సాధారణంగా ACID గురించి మాట్లాడేటప్పుడు ఐసోలేషన్ అనేది ప్రాథమికంగా అర్థం. మరియు ఈ కారణంగానే నేను ఈ ఎక్రోనిం యొక్క విశ్లేషణను ఒంటరిగా ప్రారంభించాను మరియు ఈ భావనను వివరించడానికి ప్రయత్నించే వారు సాధారణంగా చేసే విధంగా క్రమంలో వెళ్ళలేదు. ఇప్పుడు మిగిలిన మూడు అక్షరాలను చూద్దాం.

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

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

ఈ హామీని "స్థిరత్వం" అని పిలుస్తారు మరియు CACIDలో ఒక లేఖ (పంపిణీ చేసిన అప్లికేషన్ల ప్రపంచం నుండి స్థిరత్వంతో గందరగోళం చెందకూడదు, దాని గురించి మేము తరువాత మాట్లాడుతాము). ACID అర్థంలో స్థిరత్వం కోసం నేను స్పష్టమైన ఉదాహరణ ఇస్తాను: ఆన్‌లైన్ స్టోర్ కోసం ఒక అప్లికేషన్ ordersటేబుల్‌కి అడ్డు వరుసను జోడించాలనుకుంటోంది మరియు పట్టికలోని IDproduct_id కాలమ్‌లో సూచించబడుతుంది - విలక్షణం .productsforeign key

ఉత్పత్తి, సే, కలగలుపు నుండి తీసివేయబడితే, మరియు, తదనుగుణంగా, డేటాబేస్ నుండి, అప్పుడు వరుస ఇన్సర్ట్ ఆపరేషన్ జరగకూడదు మరియు మేము ఒక దోషాన్ని పొందుతాము. ఈ హామీ, ఇతరులతో పోల్చితే, నా అభిప్రాయం ప్రకారం, నా అభిప్రాయం ప్రకారం - డేటాబేస్ నుండి పరిమితులను చురుకుగా ఉపయోగించడం అంటే డేటాకు బాధ్యతను మార్చడం (అలాగే వ్యాపార తర్కాన్ని పాక్షికంగా మార్చడం, మనం మాట్లాడుతున్నట్లయితే CHECK వంటి పరిమితి ) అప్లికేషన్ నుండి డేటాబేస్ వరకు, వారు ఇప్పుడు చెప్పినట్లు, కేవలం అలానే ఉంది.

చివరకు, అది మిగిలి ఉంది D- "నిరోధకత" (మన్నిక). సిస్టమ్ వైఫల్యం లేదా ఏదైనా ఇతర వైఫల్యం లావాదేవీ ఫలితాలు లేదా డేటాబేస్ కంటెంట్‌ను కోల్పోవడానికి దారితీయకూడదు. అంటే, లావాదేవీ విజయవంతమైందని డేటాబేస్ ప్రత్యుత్తరం ఇస్తే, డేటా అస్థిర మెమరీలో రికార్డ్ చేయబడిందని దీని అర్థం - ఉదాహరణకు, హార్డ్ డిస్క్‌లో. ఇది, మార్గం ద్వారా, మీరు వెంటనే తదుపరి రీడ్ అభ్యర్థనలో డేటాను చూస్తారని అర్థం కాదు.

మరుసటి రోజు, నేను AWS (Amazon Web Services) నుండి DynamoDBతో పని చేస్తున్నాను మరియు సేవ్ చేయడానికి కొంత డేటాను పంపాను మరియు సమాధానం HTTP 200(సరే) అందుకున్న తర్వాత లేదా అలాంటిదేదో, నేను దాన్ని తనిఖీ చేయాలని నిర్ణయించుకున్నాను - మరియు ఇది చూడలేదు. తదుపరి 10 సెకన్ల డేటాబేస్లో డేటా. అంటే, DynamoDB నా డేటాకు కట్టుబడి ఉంది, కానీ డేటా యొక్క తాజా కాపీని పొందడానికి అన్ని నోడ్‌లు తక్షణమే సమకాలీకరించబడవు (అది కాష్‌లో ఉన్నప్పటికీ). ఇక్కడ మేము మళ్ళీ పంపిణీ వ్యవస్థల సందర్భంలో స్థిరత్వం యొక్క భూభాగంలోకి ఎక్కాము, కానీ దాని గురించి మాట్లాడే సమయం ఇంకా రాలేదు.

కాబట్టి ఇప్పుడు మనకు ACID హామీలు ఏమిటో తెలుసు. మరియు అవి ఎందుకు ఉపయోగపడతాయో కూడా మనకు తెలుసు. అయితే ప్రతి అప్లికేషన్‌లో మనకు అవి నిజంగా అవసరమా? మరియు కాకపోతే, సరిగ్గా ఎప్పుడు? అన్ని DBలు ఈ హామీలను అందిస్తాయా మరియు కాకపోతే వాటికి బదులుగా ఏమి అందిస్తాయి?