கட்டுரையின் மொழிபெயர்ப்பு பாடநெறி மாணவர்களுக்காக குறிப்பாக தயாரிக்கப்பட்டது
PostgreSQL மற்றும் இணைப்பு-குறிப்பிட்ட எழுத்து நிலைத்தன்மை அமைப்புகள்
Compose இல், நாங்கள் பல தரவுத்தளங்களைக் கையாளுகிறோம், இது அவற்றின் செயல்பாடுகள் மற்றும் குறைபாடுகளைப் பற்றி நன்கு தெரிந்துகொள்ள வாய்ப்பளிக்கிறது. புதிய தரவுத்தளங்களின் அம்சங்களை நாம் விரும்புவதைக் கற்றுக் கொள்ளும்போது, நாம் நீண்ட காலமாகப் பணியாற்றி வரும் முதிர்ந்த கருவிகளில் இதே போன்ற அம்சங்கள் இருந்தால் எவ்வளவு நன்றாக இருக்கும் என்று சில சமயங்களில் சிந்திக்கத் தொடங்குகிறோம். PostgreSQL இல் நான் பார்க்க விரும்பிய புதிய அம்சங்களில் ஒன்று, முழு க்ளஸ்டரிலும் ஒரு இணைப்புக்கு உள்ளமைக்கக்கூடிய எழுத்து நிலைத்தன்மை ஆகும். அது முடிந்தவுடன், எங்களிடம் ஏற்கனவே உள்ளது, இன்று நீங்கள் அதை எவ்வாறு பயன்படுத்தலாம் என்பது குறித்த தகவலை உங்களுடன் பகிர்ந்து கொள்ள விரும்புகிறோம்.
எனக்கு அது ஏன் தேவை?
கிளஸ்டர் எவ்வாறு செயல்பட வேண்டும் என்பது உங்கள் விண்ணப்பத்தைப் பொறுத்தது. உதாரணமாக, ஒரு பில் பேமெண்ட் ஆப்ஸை எடுத்துக் கொள்ளுங்கள். கிளஸ்டர் முழுவதும் உங்களுக்கு XNUMX% நிலைத்தன்மை தேவைப்படும், எனவே நீங்கள் ஒத்திசைவான கமிட்களை இயக்க வேண்டும், இதனால் உங்கள் தரவுத்தளம் அனைத்து மாற்றங்களும் செய்யப்படும் வரை காத்திருக்கும். இருப்பினும், உங்கள் பயன்பாடு வேகமாக வளர்ந்து வரும் சமூக வலைப்பின்னல் என்றால், நீங்கள் XNUMX% நிலைத்தன்மையை விட விரைவான பதிலை விரும்புவீர்கள். இதை அடைய, உங்கள் கிளஸ்டரில் ஒத்திசைவற்ற கமிட்களைப் பயன்படுத்தலாம்.
சமரசத்தை சந்திக்கவும்
தரவு நிலைத்தன்மைக்கும் செயல்திறனுக்கும் இடையில் நீங்கள் பரிமாற்றம் செய்ய வேண்டும். PostgreSQL நிலைத்தன்மையிலிருந்து விலகிச் செல்கிறது, ஏனெனில் முன்னிருப்பு உள்ளமைவு யூகிக்கக்கூடியது மற்றும் எதிர்பாராத ஆச்சரியங்கள் இல்லாமல் இருக்கும். இப்போது சமரசங்களைப் பார்ப்போம்.
வர்த்தகம் 1: செயல்திறன்
PostgreSQL கிளஸ்டருக்கு நிலைத்தன்மை தேவையில்லை என்றால், அது ஒத்திசைவின்றி இயங்கும். கிளஸ்டர் லீடருக்கு எழுதப்பட்டது, மேலும் சில மில்லி விநாடிகளுக்குப் பிறகு புதுப்பிப்புகள் அதன் பிரதிகளுக்கு அனுப்பப்படும். PostgreSQL கிளஸ்டருக்கு நிலைத்தன்மை தேவைப்படும்போது, அது ஒத்திசைவாக இயங்க வேண்டும். க்ளஸ்டர் லீடருக்கு எழுதப்படும், இது பிரதிகளுக்கு ஒரு புதுப்பிப்பை அனுப்பும் மற்றும் அது வெற்றிகரமாக இருந்தது என்று எழுதத் தொடங்கிய வாடிக்கையாளருக்கு உறுதிப்படுத்தல் அனுப்பும் முன் ஒவ்வொன்றும் எழுதினதா என்பதை உறுதிப்படுத்த காத்திருக்கும். இந்த அணுகுமுறைகளுக்கு இடையே உள்ள நடைமுறை வேறுபாடு என்னவென்றால், ஒத்திசைவற்ற முறைக்கு இரண்டு நெட்வொர்க் ஹாப்ஸ் தேவைப்படுகிறது, அதே சமயம் ஒத்திசைவான முறைக்கு நான்கு தேவைப்படுகிறது.
வர்த்தகம் 2: நிலைத்தன்மை
இந்த இரண்டு அணுகுமுறைகளிலும் ஒரு தலைவர் தோல்வியுற்றால் முடிவு வேறுபட்டதாக இருக்கும். வேலை ஒத்திசைவின்றி செய்யப்பட்டால், அத்தகைய பிழை ஏற்பட்டால், எல்லா பதிவுகளும் பிரதிகளால் செய்யப்படாது. எவ்வளவு இழப்பு ஏற்படும்? பயன்பாடு மற்றும் நகலெடுப்பின் செயல்திறனைப் பொறுத்தது. கம்போஸ் ரெப்ளிகேஷன், அதில் உள்ள தகவலின் அளவு தலைவரை விட 1 எம்பி குறைவாக இருந்தால், அதாவது, ஒத்திசைவற்ற செயல்பாட்டின் போது 1 எம்பி வரையிலான பதிவுகள் இழக்கப்படலாம்.
இது ஒத்திசைவான முறையில் நடக்காது. தலைவர் தோல்வியுற்றால், அனைத்து பிரதிகளும் புதுப்பிக்கப்படும், ஏனெனில் தலைவர் மீது உறுதிப்படுத்தப்பட்ட எந்த எழுத்தும் பிரதிகளில் உறுதிப்படுத்தப்பட வேண்டும். இது நிலைத்தன்மை.
பில்லிங் பயன்பாட்டில் ஒத்திசைவான நடத்தை அர்த்தமுள்ளதாக இருக்கும், அங்கு நிலைத்தன்மை மற்றும் செயல்திறனுக்கு இடையிலான வர்த்தகத்தில் நிலைத்தன்மை தெளிவான நன்மையைக் கொண்டுள்ளது. அத்தகைய பயன்பாட்டிற்கு மிக முக்கியமான விஷயம் சரியான தரவு. இப்போது ஒரு சமூக வலைப்பின்னலைப் பற்றி சிந்தித்துப் பாருங்கள், அதில் முடிந்தவரை விரைவாக கோரிக்கைகளுக்கு பதிலளிப்பதன் மூலம் பயனரின் கவனத்தை ஈர்ப்பதே முக்கிய பணியாகும். இந்த விஷயத்தில், குறைவான நெட்வொர்க் ஹாப்களுடன் செயல்திறன் மற்றும் கமிட்களுக்கு குறைவான காத்திருப்பு முன்னுரிமையாக இருக்கும். இருப்பினும், செயல்திறன் மற்றும் நிலைத்தன்மைக்கு இடையேயான பரிமாற்றம் பற்றி நீங்கள் சிந்திக்க வேண்டிய ஒன்றல்ல.
வர்த்தகம் 3: செயலிழப்புகள்
தோல்வியின் போது ஒரு கிளஸ்டர் எவ்வாறு செயல்படுகிறது என்பதைப் புரிந்துகொள்வது மிகவும் முக்கியம். ஒன்று அல்லது அதற்கு மேற்பட்ட பிரதிகள் தோல்வியடையும் சூழ்நிலையைக் கவனியுங்கள். கமிட்கள் ஒத்திசைவற்ற முறையில் செயலாக்கப்படும் போது, தலைவர் தொடர்ந்து செயல்படுவார், அதாவது, விடுபட்ட பிரதிகளுக்காக காத்திருக்காமல், எழுதுவதை ஏற்றுக்கொண்டு செயலாக்குவார். பிரதிகள் கிளஸ்டருக்குத் திரும்பும்போது, அவை தலைவரைப் பிடிக்கின்றன. ஒத்திசைவான நகலெடுப்புடன், பிரதிகள் பதிலளிக்கவில்லை என்றால், தலைவருக்கு வேறு வழியில்லை, மேலும் பிரதி கிளஸ்டருக்குத் திரும்பும் வரை உறுதிப்பாட்டை உறுதிப்படுத்துவதற்காகத் தொடர்ந்து காத்திருப்பார்.
ஒரு பரிவர்த்தனைக்கு ஒரு இணைப்பு?
ஒவ்வொரு பயன்பாட்டிற்கும் வெவ்வேறு வகையான நிலைத்தன்மையும் செயல்திறனும் தேவை. நிச்சயமாக, இது எங்கள் பில் செலுத்தும் பயன்பாடாகும், இது முற்றிலும் சீரானதாக இருக்கும் என்று நாங்கள் கற்பனை செய்கிறோம் அல்லது எங்களின் கிட்டத்தட்ட இடைக்கால சமூக வலைப்பின்னல் பயன்பாடு ஆகும். மற்ற எல்லா நிகழ்வுகளிலும், சில செயல்பாடுகள் ஒத்திசைவாகவும், சில ஒத்திசைவற்றதாகவும் இருக்க வேண்டிய நேரங்கள் இருக்கும். அரட்டைக்கு அனுப்பப்பட்ட செய்தி உறுதிசெய்யப்படும் வரை கணினி காத்திருக்க விரும்பவில்லை, ஆனால் அதே பயன்பாட்டில் பணம் செலுத்தப்பட்டால், நீங்கள் காத்திருக்க வேண்டியிருக்கும்.
இந்த முடிவுகள் அனைத்தும், நிச்சயமாக, பயன்பாட்டு டெவலப்பரால் எடுக்கப்படுகின்றன. ஒவ்வொரு அணுகுமுறையையும் எப்போது பயன்படுத்த வேண்டும் என்பது குறித்து சரியான முடிவுகளை எடுப்பது, உங்கள் கிளஸ்டரில் இருந்து அதிக பலனைப் பெற உதவும். இணைப்புகள் மற்றும் பரிவர்த்தனைகளுக்கு SQL மட்டத்தில் டெவலப்பர் அவற்றுக்கிடையே மாறுவது முக்கியம்.
நடைமுறையில் கட்டுப்பாட்டை உறுதி செய்தல்
முன்னிருப்பாக, PostgreSQL நிலைத்தன்மையை வழங்குகிறது. இது சர்வர் அளவுருவால் கட்டுப்படுத்தப்படுகிறது synchronous_commit
. முன்னிருப்பாக அது நிலையில் உள்ளது on
, ஆனால் அதற்கு வேறு மூன்று விருப்பங்கள் உள்ளன: local
, remote_write
அல்லது off
.
அளவுருவை அமைக்கும் போது off
உள்ளாட்சி அமைப்பில் கூட அனைத்து ஒத்திசைவு கமிட்களும் நிறுத்தப்படும். உள்ளூர் அளவுரு உள்ளூர் அமைப்பிற்கான ஒத்திசைவு பயன்முறையைக் குறிப்பிடுகிறது, ஆனால் பிரதிகளுக்கு எழுதுவது ஒத்திசைவற்ற முறையில் செய்யப்படுகிறது. Remote_write
இன்னும் மேலே செல்கிறது: பிரதிகளுக்கு எழுதுவது ஒத்திசைவின்றி செய்யப்படுகிறது, ஆனால் பிரதி எழுதுவதை ஏற்றுக்கொண்டது ஆனால் வட்டில் எழுதப்படவில்லை.
கிடைக்கக்கூடிய விருப்பங்களின் வரம்பைக் கருத்தில் கொண்டு, நாங்கள் ஒரு நடத்தையைத் தேர்வு செய்கிறோம், அதை மனதில் வைத்து on
- இவை ஒத்திசைவான பதிவுகள், நாங்கள் தேர்வு செய்வோம் local
பிணையத்தில் ஒத்திசைவற்ற கமிட்களுக்கு, லோக்கல் கமிட்களை ஒத்திசைவாக விட்டுவிடும்.
இப்போது, இதை எப்படி அமைப்பது என்பதை சிறிது நேரத்தில் கூறுவோம், ஆனால் நாங்கள் அமைத்துள்ளோம் என்று கற்பனை செய்து பாருங்கள் synchronous_commit
в local
சர்வருக்கு. அளவுருவை மாற்ற முடியுமா என்று யோசித்தோம் synchronous_commit
பறக்கும்போது, இது சாத்தியம் மட்டுமல்ல, இதைச் செய்ய இரண்டு வழிகள் கூட உள்ளன. முதலில் உங்கள் இணைப்பின் அமர்வை பின்வருமாறு அமைப்பது:
SET SESSION synchronous_commit TO ON;
// Your writes go here
அமர்வில் அனைத்து அடுத்தடுத்த எழுத்துகளும் இணைக்கப்பட்ட கிளையண்டிற்கு நேர்மறையான முடிவைத் தரும் முன் பிரதிகளுக்கு எழுதப்பட்டதை ஒப்புக் கொள்ளும். நிச்சயமாக நீங்கள் அமைப்பை மாற்றும் வரை synchronous_commit
மீண்டும். நீங்கள் பகுதியை தவிர்க்கலாம் SESSION
கட்டளையில், ஏனெனில் அது இயல்புநிலை மதிப்பில் இருக்கும்.
ஒரே ஒரு பரிவர்த்தனைக்கு ஒத்திசைவான பிரதியை நீங்கள் பெறுவதை உறுதிசெய்ய விரும்பினால் இரண்டாவது முறை நல்லது. பல NoSQL தலைமுறை தரவுத்தளங்களில் பரிவர்த்தனைகளின் கருத்து இல்லை, ஆனால் அது PostgreSQL இல் உள்ளது. இந்த வழக்கில் நீங்கள் ஒரு பரிவர்த்தனையைத் தொடங்கி பின்னர் அமைக்கவும் synchronous_commit
в on
பரிவர்த்தனைக்கான நுழைவைச் செயல்படுத்தும் முன். COMMIT
எந்த அளவுரு மதிப்பையும் பயன்படுத்தி பரிவர்த்தனை செய்யும் synchronous_commit
, அந்த நேரத்தில் அமைக்கப்பட்டது, இருப்பினும் மற்ற டெவலப்பர்கள் எழுதுவது ஒத்திசைவற்றதாக இல்லை என்பதை உறுதிசெய்ய, மாறியை முன்பக்கமாக அமைப்பது சிறந்தது.
BEGIN;
SET LOCAL synchronous_commit TO ON;
// Your writes go here
COMMIT;
இணைக்கப்பட்ட கிளையண்டிற்கு தரவுத்தளம் நேர்மறையான பதிலைத் தரும் முன், அனைத்து பரிவர்த்தனை கமிட்களும் இப்போது பிரதிகளுக்கு எழுதப்பட்டதாக உறுதிப்படுத்தப்படும்.
PostgreSQL ஐ அமைக்கிறது
இதற்கு முன், நாங்கள் ஒரு PostgreSQL அமைப்பை கற்பனை செய்தோம் synchronous_commit
, இல் நிறுவப்பட்டது local
. சர்வர் பக்கத்தில் இதை யதார்த்தமாக்க, நீங்கள் இரண்டு சர்வர் உள்ளமைவு விருப்பங்களை அமைக்க வேண்டும். மேலும் ஒரு அளவுரு synchronous_standby_names
எப்போது தானே வரும் synchronous_commit
உள்ளே இருக்கும் on
. ஒத்திசைவான கமிட்களுக்கு எந்தப் பிரதிகள் தகுதியானவை என்பதை இது தீர்மானிக்கிறது, அதை நாங்கள் அமைப்போம் *
, இது அனைத்து பிரதிகளும் சம்பந்தப்பட்டிருப்பதைக் குறிக்கும். இந்த மதிப்புகள் பொதுவாக உள்ளமைக்கப்படுகின்றன
synchronous_commit = local
synchronous_standby_names='*'
அளவுருவை அமைப்பதன் மூலம் synchronous_commit
அர்த்தத்தில் local
, உள்ளூர் வட்டுகள் ஒத்திசைவாக இருக்கும் ஒரு அமைப்பை நாங்கள் உருவாக்குகிறோம், ஆனால் பிணைய பிரதிகள் முன்னிருப்பாக ஒத்திசைவற்றவை. நிச்சயமாக, மேலே காட்டப்பட்டுள்ளபடி, இவற்றை ஒத்திசைக்க முடிவு செய்யவில்லை.
நீங்கள் வளர்ச்சியைப் பின்தொடர்ந்திருந்தால்
இன்னும் சில வார்த்தைகள்...
PostgreSQL ஐ மிக நுணுக்கமாக மாற்றுவது சாத்தியமில்லை என்று ஒரு வாரத்திற்கு முன்புதான் சொல்லியிருப்பேன். அப்போதுதான் கம்போஸ் பிளாட்ஃபார்ம் குழுவைச் சேர்ந்த கர்ட், அப்படியொரு வாய்ப்பு இருப்பதாக வலியுறுத்தினார். அவர் எனது ஆட்சேபனைகளை அமைதிப்படுத்தினார் மற்றும் PostgreSQL ஆவணத்தில் கண்டார்
இந்த அமைப்பை எந்த நேரத்திலும் மாற்றலாம். எந்தவொரு பரிவர்த்தனைக்கான நடத்தை, உறுதிமொழியின் போது நடைமுறையில் உள்ள அமைப்பால் தீர்மானிக்கப்படுகிறது. எனவே, சில பரிவர்த்தனைகள் ஒத்திசைவாகவும் மற்றவற்றிற்கு ஒத்திசைவின்றியும் செய்வது சாத்தியம் மற்றும் பயனுள்ளது. உதாரணமாக, ஒன்றை கட்டாயப்படுத்த multistatement
பரிவர்த்தனை செய்ய வேண்டிய அளவுருவின் இயல்புநிலை மதிப்பு எதிரெதிர், அமைக்கப்படும் போது ஒத்திசைவற்ற முறையில் செய்கிறது SET LOCAL synchronous_commit TO OFF
ஒரு பரிவர்த்தனையில்.
உள்ளமைவு கோப்பில் இந்த சிறிய மாற்றத்தின் மூலம், பயனர்களின் நிலைத்தன்மை மற்றும் செயல்திறனில் கட்டுப்பாட்டை வழங்கினோம்.
ஆதாரம்: www.habr.com