தரவுத்தளங்களில் பரிவர்த்தனை தனிமை நிலை பலவீனமடைவதால் என்ன விளையலாம்?

அனைவருக்கும் வணக்கம். விளாடிஸ்லாவ் ரோடின் தொடர்பில் உள்ளார். நான் தற்போது OTUS இல் உயர் பணிச்சுமை கட்டிடக் கலைஞர் பாடநெறிக்கான பாடத் தலைவராக உள்ளேன், மேலும் மென்பொருள் கட்டிடக்கலை படிப்புகளையும் கற்பிக்கிறேன்.

கற்பித்தலைத் தவிர, நீங்கள் கவனித்தபடி, ஹப்ரேயில் OTUS வலைப்பதிவுக்கான அசல் உள்ளடக்கத்தை நான் எழுதுகிறேன், மேலும் பாடத்திட்டத்தின் தொடக்கத்துடன் ஒத்துப்போக இன்றைய கட்டுரையுடன் ஒத்துப்போக விரும்புகிறேன். "PostgreSQL", இது இப்போது சேர்க்கைக்கு திறக்கப்பட்டுள்ளது.

தரவுத்தளங்களில் பரிவர்த்தனை தனிமை நிலை பலவீனமடைவதால் என்ன விளையலாம்?

அறிமுகம்

В கடந்த முறை தரவுத்தளங்களில் பரிவர்த்தனைகள் இரண்டு சிக்கல்களைத் தீர்க்க உதவுகின்றன என்ற உண்மையைப் பற்றி நாங்கள் பேசினோம்: தவறு சகிப்புத்தன்மையை உறுதி செய்தல் மற்றும் போட்டி சூழலில் தரவை அணுகுதல். இந்தப் பணிகளை முழுமையாகச் செய்ய, பரிவர்த்தனை ACID பண்புகளைக் கொண்டிருக்க வேண்டும். இன்று நாம் கடிதத்தைப் பற்றி விரிவாகப் பேசுவோம் நான் (தனிமைப்படுத்தல்) இந்த சுருக்கத்தில்.

காப்பு

தனிமைப்படுத்தல் ஒரு போட்டி சூழலில் தரவை அணுகுவதில் உள்ள சிக்கலை தீர்க்கிறது, அடிப்படையில் இன நிலைமைகளிலிருந்து பாதுகாப்பை வழங்குகிறது. வெறுமனே, தனிமைப்படுத்தல் என்பது வரிசைப்படுத்தல் என்று பொருள்படும், இது பரிவர்த்தனைகளை இணையாகச் செய்வதன் விளைவு, அவை தொடர்ச்சியாகச் செயல்படுத்தப்பட்டதைப் போலவே இருப்பதை உறுதிசெய்யும் ஒரு சொத்து ஆகும். இந்த சொத்தின் முக்கிய பிரச்சனை என்னவென்றால், தொழில்நுட்ப ரீதியாக வழங்குவது மிகவும் கடினம், இதன் விளைவாக, கணினி செயல்திறனில் குறிப்பிடத்தக்க தாக்கத்தை ஏற்படுத்துகிறது. அதனால்தான் தனிமைப்படுத்தல் பெரும்பாலும் பலவீனமடைகிறது, சில முரண்பாடுகளின் அபாயங்களை ஏற்றுக்கொள்கிறது, இது கீழே விவாதிக்கப்படும். சில முரண்பாடுகள் நிகழும் சாத்தியம், பரிவர்த்தனை தனிமைப்படுத்தலின் அளவை துல்லியமாக வகைப்படுத்துகிறது.

மிகவும் நன்கு அறியப்பட்ட முரண்பாடுகள்: அழுக்கு வாசிப்பு, திரும்பத் திரும்பப் படிக்காதது, பாண்டம் வாசிப்பு, ஆனால் உண்மையில் இன்னும் 5 உள்ளன: அழுக்கு எழுதுதல், கர்சர் இழந்த புதுப்பிப்பு, இழந்த புதுப்பிப்பு, படிக்கும் வளைவு, வளைவு எழுதுதல்.

அழுக்கான எழுத்து

ஒழுங்கின்மையின் சாராம்சம் என்னவென்றால், பரிவர்த்தனைகள் உறுதியற்ற தரவை மேலெழுதலாம்.

தரவுத்தளங்களில் பரிவர்த்தனை தனிமை நிலை பலவீனமடைவதால் என்ன விளையலாம்?

இந்த ஒழுங்கின்மை ஆபத்தானது, ஏனெனில் இரண்டு பரிவர்த்தனைகளையும் செய்த பிறகு தரவு முரண்படும் (படத்தில் உள்ளது போல), ஆனால் அணுசக்தி மீறப்படுவதால்: நாங்கள் உறுதியற்ற தரவை மேலெழுத அனுமதிப்பதால், ஒரு பரிவர்த்தனை மற்றொன்றைப் பாதிக்காமல் எப்படி திரும்பப் பெறுவது என்பது தெளிவாகத் தெரியவில்லை. .

ஒழுங்கின்மையை மிகவும் எளிமையாகக் கையாளலாம்: பதிவைத் தொடங்கும் முன் பதிவில் ஒரு பூட்டை இணைக்கிறோம், பூட்டு அகற்றப்படும் வரை பதிவை மாற்றுவதைத் தடைசெய்கிறோம்.

அழுக்கான வாசிப்பு

அழுக்கு வாசிப்பு என்பது உறுதியற்ற தரவைப் படிப்பதாகும்.

தரவுத்தளங்களில் பரிவர்த்தனை தனிமை நிலை பலவீனமடைவதால் என்ன விளையலாம்?

மாதிரியின் அடிப்படையில் செயல்கள் அல்லது முடிவுகளை எடுக்க வேண்டியிருக்கும் போது சிக்கல்கள் எழுகின்றன.

ஒழுங்கின்மையை சரிசெய்ய, நீங்கள் ஒரு வாசிப்பு பூட்டை இணைக்கலாம், ஆனால் இது செயல்திறனை பெரிதும் பாதிக்கும். பரிவர்த்தனையை திரும்பப் பெறுவதற்கு, தரவின் ஆரம்ப நிலை (பதிவு தொடங்கும் முன்) கணினியில் சேமிக்கப்பட வேண்டும் என்று சொல்வது மிகவும் எளிமையானது. ஏன் அங்கிருந்து படிக்கக்கூடாது? இது மிகவும் மலிவானது, பெரும்பாலான தரவுத்தளங்கள் இயல்புநிலையாக அழுக்கு வாசிப்பை அகற்றும்.

புதுப்பிப்பை இழந்தது

இழந்த புதுப்பிப்பு என்பது இழந்த புதுப்பிப்புகள் என்று பொருள்படும், மேலும் மொழிபெயர்ப்பு சிக்கலின் சாரத்தை மிகவும் துல்லியமாக பிரதிபலிக்கிறது:

தரவுத்தளங்களில் பரிவர்த்தனை தனிமை நிலை பலவீனமடைவதால் என்ன விளையலாம்?

உண்மையில், T2 பரிவர்த்தனையின் முடிவு தலைகீழாக மாறியது. இந்த நிலைமையை வெளிப்படையான அல்லது மறைமுகமான எழுத்துப் பூட்டுகள் மூலம் சரிசெய்யலாம். அதாவது, நாங்கள் பதிவை வெறுமனே புதுப்பிப்போம், பின்னர் ஒரு மறைமுகமான பூட்டு ஏற்படுகிறது, அல்லது நாங்கள் செய்கிறோம் புதுப்பிப்புக்குத் தேர்ந்தெடுக்கவும், படிக்க மற்றும் எழுதும் பூட்டு ஏற்படும். அத்தகைய செயல்பாடு மிகவும் ஆபத்தானது என்பதை நினைவில் கொள்க: எங்கள் "அப்பாவி" வாசிப்புடன், மற்ற வாசிப்புகளைத் தடுக்கிறோம். சில தரவுத்தளங்கள் மிகவும் பாதுகாப்பானவை பங்குக்கு தேர்ந்தெடுக்கவும், தரவு படிக்க அனுமதிக்கிறது ஆனால் மாற்ற முடியாது.

கர்சர் புதுப்பிப்பை இழந்தது

சிறந்த கட்டுப்பாட்டிற்கு, கர்சர் போன்ற பிற கருவிகளை பேஸ்கள் வழங்கலாம். கர்சர் என்பது வரிசைகளின் தொகுப்பைக் கொண்ட ஒரு கட்டமைப்பாகும், மேலும் அவற்றை மீண்டும் மீண்டும் செய்ய உங்களை அனுமதிக்கிறது. select_statement க்கு cursor_name ஐ அறிவிக்கவும். கர்சரின் உள்ளடக்கங்கள் தேர்ந்தெடுக்கப்பட்டதன் மூலம் விவரிக்கப்பட்டுள்ளன.

உங்களுக்கு ஏன் கர்சர் தேவை? உண்மை என்னவென்றால், சில தரவுத்தளங்கள் தேர்ந்தெடுக்கப்பட்ட (படிப்பு நிலைத்தன்மை) மூலம் தேர்ந்தெடுக்கப்பட்ட அனைத்து பதிவுகளிலும் பூட்டை வழங்குகின்றன, அல்லது கர்சர் தற்போது அமைந்துள்ள பதிவில் மட்டுமே (கர்சர் நிலைத்தன்மை). கர்சர் நிலைத்தன்மையுடன், குறுகிய பூட்டு செயல்படுத்தப்படுகிறது, இது தரவுகளின் பெரிய மாதிரியை மீண்டும் மீண்டும் செய்தால் பூட்டுகளின் எண்ணிக்கையைக் குறைக்க அனுமதிக்கிறது. எனவே, இழந்த புதுப்பிப்பு ஒழுங்கின்மை கர்சருக்கு தனித்தனியாக தனிமைப்படுத்தப்பட்டுள்ளது.

திரும்பத் திரும்பப் படிக்க முடியாதது

திரும்பத் திரும்பப் படிக்க முடியாதது என்னவென்றால், எங்கள் பரிவர்த்தனையின் போது, ​​ஒரே பதிவின் 2 தொடர்ச்சியான வாசிப்புகள் வெவ்வேறு முடிவுகளுக்கு வழிவகுக்கும், ஏனெனில் இந்த இரண்டு வாசிப்புகளுக்கு இடையில் மற்றொரு பரிவர்த்தனை தலையிட்டு, எங்கள் தரவை மாற்றியது மற்றும் உறுதி செய்யப்பட்டது.

தரவுத்தளங்களில் பரிவர்த்தனை தனிமை நிலை பலவீனமடைவதால் என்ன விளையலாம்?

இது ஏன் ஒரு பிரச்சனை? படத்தில் T2 பரிவர்த்தனையின் குறிக்கோள் 150 USD க்கும் குறைவான அனைத்து பொருட்களையும் தேர்ந்தெடுப்பது என்று கற்பனை செய்து பாருங்கள். வேறொருவர் விலையை $200 ஆக மாற்றியுள்ளார். இதனால், நிறுவப்பட்ட வடிகட்டி வேலை செய்யவில்லை.

இரண்டு-கட்ட இன்டர்லாக்ஸ் சேர்க்கப்படும்போது அல்லது MVCC பொறிமுறையைப் பயன்படுத்தும்போது இந்த முரண்பாடுகள் ஏற்படாது, நான் தனித்தனியாக விவாதிக்க விரும்புகிறேன்.

பாண்டம் படித்தது

பாண்டம் என்பது மற்றொரு பரிவர்த்தனை மூலம் சேர்க்கப்பட்ட தரவுகளின் வாசிப்பு ஆகும்.

தரவுத்தளங்களில் பரிவர்த்தனை தனிமை நிலை பலவீனமடைவதால் என்ன விளையலாம்?

உதாரணமாக, இந்த ஒழுங்கின்மை ஏற்படும் போது மலிவான தயாரிப்பின் தவறான தேர்வை நாம் அவதானிக்கலாம்.

பாண்டம் ரீட்களை அகற்றுவது ஏற்கனவே மிகவும் கடினம். வழக்கமான தடுப்பது போதாது, ஏனென்றால் இதுவரை இல்லாத ஒன்றை நம்மால் தடுக்க முடியாது. 2PL அமைப்புகள் முன்கணிப்பு பூட்டுதலைப் பயன்படுத்துகின்றன, அதே சமயம் MVCC அமைப்புகளில் ஒரு பரிவர்த்தனை திட்டமிடல் உள்ளது, இது ஒரு செருகினால் இடையூறு ஏற்படக்கூடிய பரிவர்த்தனைகளைத் திரும்பப் பெறுகிறது. முதல் மற்றும் இரண்டாவது வழிமுறைகள் மிகவும் கனமானவை.

வளைவைப் படிக்கவும்

நாம் பல அட்டவணைகளுடன் பணிபுரியும் போது வாசிப்பு வளைவு ஏற்படுகிறது, அதன் உள்ளடக்கங்கள் தொடர்ந்து மாற வேண்டும்.

இடுகைகள் மற்றும் அவற்றின் மெட்டா தகவலைக் குறிக்கும் அட்டவணைகள் எங்களிடம் உள்ளன என்று வைத்துக்கொள்வோம்:

தரவுத்தளங்களில் பரிவர்த்தனை தனிமை நிலை பலவீனமடைவதால் என்ன விளையலாம்?

ஒரு பரிவர்த்தனை அட்டவணையில் இருந்து படிக்கிறது, மற்றொன்று அவற்றை மாற்றுகிறது:

தரவுத்தளங்களில் பரிவர்த்தனை தனிமை நிலை பலவீனமடைவதால் என்ன விளையலாம்?

T1 பரிவர்த்தனையின் விளைவாக, இடுகையில் தலைப்பு = நல்லது மற்றும் புதுப்பிக்கப்பட்ட_by = T2 உள்ளது, இது ஒருவித முரண்பாடு.

உண்மையில், இது மீண்டும் மீண்டும் படிக்க முடியாதது, ஆனால் பல அட்டவணைகளின் ஒரு பகுதியாகும்.

இதைச் சரிசெய்ய, T1, படிக்கும் அனைத்து வரிசைகளிலும் பூட்டுகளை வைக்கலாம், இது T2 பரிவர்த்தனை தகவலை மாற்றுவதைத் தடுக்கும். MVCC விஷயத்தில், T2 பரிவர்த்தனை ரத்து செய்யப்படும். நாம் கர்சர்களைப் பயன்படுத்தினால், இந்த ஒழுங்கின்மைக்கு எதிரான பாதுகாப்பு முக்கியமானது.

வளைவாக எழுதுங்கள்

இந்த ஒழுங்கின்மையை ஒரு எடுத்துக்காட்டுடன் விளக்குவதும் எளிதானது: எங்கள் அமைப்பில் குறைந்தபட்சம் ஒரு மருத்துவராவது பணியில் இருக்க வேண்டும் என்று வைத்துக்கொள்வோம், ஆனால் இரு மருத்துவர்களும் தங்கள் கடமையை ரத்து செய்ய முடிவு செய்தனர்:

தரவுத்தளங்களில் பரிவர்த்தனை தனிமை நிலை பலவீனமடைவதால் என்ன விளையலாம்?

தரவுத்தளங்களில் பரிவர்த்தனை தனிமை நிலை பலவீனமடைவதால் என்ன விளையலாம்?

டாக்டர்கள் யாரும் பணியில் இருக்காத நிலை ஏற்பட்டது. இது ஏன் நடந்தது? மற்றொரு பரிவர்த்தனை மூலம் மீறக்கூடிய நிபந்தனையை பரிவர்த்தனை சரிபார்க்கிறது, மேலும் தனிமைப்படுத்தப்பட்டதால் இந்த மாற்றத்தை நாங்கள் காணவில்லை.

இதையே திரும்பத் திரும்பப் படிக்க முடியாது. மாற்றாக, தேர்ந்தெடுக்கப்பட்டவர்கள் இந்த பதிவுகளில் பூட்டுகளை வைக்கலாம்.

வளைவு எழுதுதல் மற்றும் படிக்கும் வளைவு ஆகியவை முந்தைய முரண்பாடுகளின் கலவையாகும். நீங்கள் எழுதும் வளைவைக் கருத்தில் கொள்ளலாம், இது அடிப்படையில் ஒரு பாண்டம் ரீட் ஆகும். பணியாளர்களின் பெயர்கள், அவர்களின் சம்பளம் மற்றும் அவர்கள் பணிபுரியும் திட்டம் ஆகியவற்றைக் கொண்ட அட்டவணையைக் கவனியுங்கள்:

தரவுத்தளங்களில் பரிவர்த்தனை தனிமை நிலை பலவீனமடைவதால் என்ன விளையலாம்?

தரவுத்தளங்களில் பரிவர்த்தனை தனிமை நிலை பலவீனமடைவதால் என்ன விளையலாம்?

இதன் விளைவாக, நாங்கள் பின்வரும் படத்தைப் பெறுகிறோம்: ஒவ்வொரு மேலாளரும் தங்கள் மாற்றம் வரவு செலவுத் திட்டத்திற்கு மேல் செல்ல வழிவகுக்காது என்று நினைத்தார்கள், எனவே அவர்கள் பணியாளர்களை மாற்றியமைத்தனர், அது ஒன்றாக செலவை அதிகரிக்க வழிவகுத்தது.

பிரச்சனைக்கான காரணம் பாண்டம் வாசிப்பில் உள்ளதைப் போலவே உள்ளது.

கண்டுபிடிப்புகள்

தரவுத்தளத்தில் பரிவர்த்தனை தனிமைப்படுத்தல் அளவைத் தளர்த்துவது என்பது பாதுகாப்புக்கும் செயல்திறனுக்கும் இடையேயான வர்த்தகம் ஆகும்; சில முரண்பாடுகள் ஏற்பட்டால் வணிகத்திற்கு ஏற்படக்கூடிய அபாயங்களின் அடிப்படையில் இந்த நிலையின் தேர்வு அணுகப்பட வேண்டும்.

படிப்பைப் பற்றி மேலும் அறிக.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்