PostgreSQL සහ සම්බන්ධතා-විශේෂිත ලිවීමේ අනුකූලතා සැකසුම්

ලිපියේ පරිවර්තනය පාඨමාලාවේ සිසුන් සඳහා විශේෂයෙන් සකස් කරන ලදී "දත්ත සමුදාය". මෙම දිශාවට සංවර්ධනය කිරීමට කැමතිද? අපි ඔබට ආරාධනා කරනවා විවෘත දිනය, එහිදී අපි වැඩසටහන ගැන විස්තරාත්මකව කතා කරමු, මාර්ගගත ආකෘතියේ විශේෂාංග, පුහුණුවෙන් පසු උපාධිධාරීන් බලා සිටින නිපුණතා සහ වෘත්තීය අපේක්ෂාවන්.

PostgreSQL සහ සම්බන්ධතා-විශේෂිත ලිවීමේ අනුකූලතා සැකසුම්

PostgreSQL සහ සම්බන්ධතා-විශේෂිත ලිවීමේ අනුකූලතා සැකසුම්
Compose හි දී, අපි බොහෝ දත්ත සමුදායන් සමඟ කටයුතු කරන අතර, ඒවායේ ක්‍රියාකාරීත්වය සහ අඩුපාඩු පිළිබඳව වඩාත් හුරුපුරුදු වීමට අපට අවස්ථාව ලබා දේ. අපි නව දත්ත සමුදායේ විශේෂාංග වලට ආදරය කිරීමට ඉගෙන ගන්නා විට, අපි බොහෝ කාලයක් තිස්සේ වැඩ කරන වඩාත් පරිණත මෙවලම්වල සමාන විශේෂාංග තිබේ නම් එය කොතරම් හොඳදැයි අපි සමහර විට සිතන්නට පටන් ගනිමු. මට PostgreSQL හි දැකීමට අවශ්‍ය වූ එක් නව විශේෂාංගයක් වූයේ සම්පූර්ණ පොකුර හරහා සම්බන්ධතාවයකට වින්‍යාස කළ හැකි ලිවීමේ අනුකූලතාවයි. එය පෙනෙන පරිදි, අප සතුව එය දැනටමත් ඇති අතර, අද අපට එය භාවිතා කළ හැකි ආකාරය පිළිබඳ තොරතුරු ඔබ සමඟ බෙදා ගැනීමට අවශ්‍ය වේ.

මට එය අවශ්ය වන්නේ ඇයි?

පොකුර හැසිරිය යුතු ආකාරය ඔබගේ යෙදුම මත රඳා පවතී. උදාහරණයක් ලෙස, බිල්පත් ගෙවීමේ යෙදුමක් ගන්න. ඔබට පොකුරු හරහා XNUMX% අනුකූලතාවයක් අවශ්‍ය වනු ඇත, එබැවින් ඔබට සමමුහුර්ත කැපවීම් සක්‍රීය කිරීමට සිදුවනු ඇත, එවිට ඔබගේ දත්ත සමුදාය සියලු වෙනස්කම් සිදු කිරීමට බලා සිටී. කෙසේ වෙතත්, ඔබගේ යෙදුම වේගයෙන් වර්ධනය වන සමාජ ජාලයක් නම්, ඔබ බොහෝ විට XNUMX% අනුකූලතාවයට වඩා වේගවත් ප්‍රතිචාර දැක්වීමට කැමති වනු ඇත. මෙය සාක්ෂාත් කර ගැනීම සඳහා, ඔබට ඔබේ පොකුරේ අසමමුහුර්ත කැපවීම් භාවිතා කළ හැකිය.

සම්මුතිය හමුවන්න

ඔබ දත්ත අනුකූලතාව සහ කාර්ය සාධනය අතර ගනුදෙනු සිදු කළ යුතුය. පෙරනිමි වින්‍යාසය පුරෝකථනය කළ හැකි අතර අනපේක්ෂිත විස්මයන් නොමැතිව PostgreSQL අනුකූලතාවයෙන් ඉවත් වේ. දැන් අපි සම්මුතීන් දෙස බලමු.

වෙළඳාම 1: කාර්ය සාධනය

PostgreSQL පොකුරට අනුකූලතාවයක් අවශ්‍ය නොවේ නම්, එය අසමමුහුර්තව ක්‍රියාත්මක විය හැක. ලිවීම පොකුරු නායකයා වෙත සිදු කර ඇති අතර, යාවත්කාලීන කිරීම් මිලි තත්පර කිහිපයකට පසුව එහි අනුරූ වෙත යවනු ලැබේ. PostgreSQL පොකුරකට අනුකූලතාවයක් අවශ්‍ය වූ විට, එය සමමුහුර්තව ක්‍රියාත්මක විය යුතුය. ලිවීම පොකුරු ප්‍රධානියා වෙත සිදු කරනු ලබන අතර, එය අනුරූ වෙත යාවත්කාලීනයක් යවනු ලබන අතර එය සාර්ථක වූ බව ලිවීම ආරම්භ කළ සේවාදායකයාට තහවුරු කිරීම යැවීමට පෙර එක් එක් ඒවා ලියා ඇති බව තහවුරු කරන තෙක් බලා සිටී. මෙම ප්‍රවේශයන් අතර ඇති ප්‍රායෝගික වෙනස වන්නේ අසමමුහුර්ත ක්‍රමයට ජාල හොප් දෙකක් අවශ්‍ය වන අතර සමමුහුර්ත ක්‍රමයට හතරක් අවශ්‍ය වීමයි.

වෙළඳාම 2: අනුකූලතාව

මෙම ප්‍රවේශ දෙකෙහි නායකයෙකු අසාර්ථක වුවහොත් ප්‍රතිඵලය ද වෙනස් වනු ඇත. කාර්යය අසමමුහුර්තව සිදු කරන්නේ නම්, එවැනි දෝෂයක් සිදුවුවහොත්, සියලුම වාර්තා අනුපිටපත් මගින් සිදු නොකෙරේ. කීයක් නැති වෙයිද? යෙදුමම සහ අනුකරණයේ කාර්යක්ෂමතාවය මත රඳා පවතී. එහි ඇති තොරතුරු ප්‍රමාණය නායකයාට වඩා 1 MB අඩු නම්, එනම්, අසමමුහුර්ත ක්‍රියාවේදී 1 MB දක්වා වාර්තා නැති විය හැකි නම්, අනුරුවක් ප්‍රමුඛයෙකු වීම රචනා අනුකරණය වළක්වයි.

මෙය සමමුහුර්ත මාදිලියේ සිදු නොවේ. නායකයා අසමත් වුවහොත්, සියලුම අනුපිටපත් යාවත්කාලීන කරනු ලැබේ, මන්ද නායකයා පිළිබඳ ඕනෑම ලියවිල්ලක් අනුරූ මත තහවුරු කළ යුතු බැවිනි. මෙය අනුකූලතාවයි.

සමමුහුර්ත හැසිරීම් බිල්පත් යෙදුමක අර්ථාන්විත වන අතර එහිදී අනුකූලතාව සහ කාර්ය සාධනය අතර වෙළඳාමේ පැහැදිලි වාසියක් ඇත. එවැනි යෙදුමක් සඳහා වඩාත්ම වැදගත් දෙය වලංගු දත්ත වේ. හැකි ඉක්මනින් ඉල්ලීම්වලට ප්රතිචාර දැක්වීමෙන් පරිශීලකයාගේ අවධානය යොමු කිරීම ප්රධාන කාර්යය වන සමාජ ජාලයක් ගැන දැන් සිතන්න. මෙම අවස්ථාවේ දී, අඩු ජාල හොප් සහිත කාර්ය සාධනය සහ කැපවීම් සඳහා අඩු රැඳී සිටීම ප්‍රමුඛතාවයක් වනු ඇත. කෙසේ වෙතත්, කාර්ය සාධනය සහ අනුකූලතාව අතර හුවමාරුව ඔබ සිතිය යුතු එකම එක නොවේ.

වෙළඳාම 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, අපි දේශීය තැටි සමමුහුර්තව පවතින පද්ධතියක් නිර්මාණය කරමු, නමුත් ජාල අනුරූ කැපවීම් පෙරනිමියෙන් අසමමිතික වේ. ඇත්ත වශයෙන්ම, ඉහත පෙන්වා ඇති පරිදි, මෙම කැපවීම් සමමුහුර්ත කිරීමට අපි තීරණය කරන්නේ නම් මිස.

ඔබ සංවර්ධනය අනුගමනය කර ඇත්නම් ආණ්ඩුකාර ව්යාපෘතිය, ඔබ මෑත වෙනස්කම් කිහිපයක් දැක ඇති (1, 2), ආණ්ඩුකාර පරිශීලකයින්ට මෙම පරාමිති පරීක්ෂා කිරීමට සහ ඒවායේ අනුකූලතාව නිරීක්ෂණය කිරීමට ඉඩ සලසයි.

තවත් වචන කිහිපයක්...

PostgreSQL මෙතරම් සියුම් ලෙස සකස් කළ නොහැකි බව සතියකට පෙර මම ඔබට පැවසුවෙමි. Compose platform කණ්ඩායමේ සාමාජිකයෙකු වන Kurt එවැනි අවස්ථාවක් පවතින බව තරයේ කියා සිටියේ එවිටය. ඔහු මගේ විරෝධතා සන්සුන් කර PostgreSQL ලේඛනයෙන් සොයා ගත්තේය පහත සඳහන් දෑ:

PostgreSQL සහ සම්බන්ධතා-විශේෂිත ලිවීමේ අනුකූලතා සැකසුම්

මෙම සැකසුම ඕනෑම අවස්ථාවක වෙනස් කළ හැක. ඕනෑම ගනුදෙනුවක් සඳහා හැසිරීම තීරණය කරනු ලබන්නේ කැපවීම සිදු කරන අවස්ථාවේ ක්‍රියාත්මක වන සැකසුම මගිනි. එබැවින්, සමහර ගණුදෙනු සමමුහුර්තව සිදු කිරීමට සහ අනෙක් ඒවාට අසමමිතික ලෙස සිදු කිරීමට හැකි සහ ප්රයෝජනවත් වේ. උදාහරණයක් ලෙස, එකක් බල කිරීමට multistatement පරාමිතියේ පෙරනිමි අගය ප්‍රතිවිරුද්ධ වන විට සකසන ලද ගනුදෙනුව අසමමිතිකව සිදු කරයි SET LOCAL synchronous_commit TO OFF ගනුදෙනුවක.

වින්‍යාස ගොනුවේ මෙම කුඩා වෙනස් කිරීමත් සමඟ, අපි පරිශීලකයින්ට ඔවුන්ගේ අනුකූලතාව සහ ක්‍රියාකාරිත්වය පිළිබඳ පාලනය ලබා දුන්නෙමු.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න