දත්ත සමුදායන්හි ගනුදෙනු හුදකලා මට්ටම දුර්වල වීමෙන් ඇති විය හැක්කේ කුමක්ද?

ආයුබෝවන් සියල්ලටම. ව්ලැඩිස්ලාව් රොඩින් සම්බන්ධ වේ. මම දැනට OTUS හි High Workload Architect පාඨමාලාවේ පාඨමාලා නායකයා වන අතර මෘදුකාංග ගෘහ නිර්මාණ පාඨමාලා ද උගන්වමි.

ඉගැන්වීමට අමතරව, ඔබ දැක ඇති පරිදි, මම Habré හි OTUS බ්ලොගය සඳහා මුල් තොරතුරු ලියන අතර, පාඨමාලාව දියත් කිරීමට සමගාමීව අද ලිපිය සමඟ සමපාත වීමට මට අවශ්‍යය. "PostgreSQL", දැන් ලියාපදිංචිය සඳහා විවෘතයි.

දත්ත සමුදායන්හි ගනුදෙනු හුදකලා මට්ටම දුර්වල වීමෙන් ඇති විය හැක්කේ කුමක්ද?

හැඳින්වීම

В පසුගිය කාලය දත්ත සමුදායන්හි ගනුදෙනු ගැටළු දෙකක් විසඳීමට උපකාරී වන බව අපි කතා කළෙමු: වැරදි ඉවසීම සහතික කිරීම සහ තරඟකාරී පරිසරයක් තුළ දත්ත වෙත ප්‍රවේශය. මෙම කර්තව්‍යයන් සම්පූර්ණයෙන් ඉටු කිරීමට, ගනුදෙනුවට ACID ගුණ තිබිය යුතුය. අද අපි ලිපිය ගැන විස්තරාත්මකව කතා කරමු මම (හුදකලා වීම) මෙම කෙටි යෙදුම තුළ.

පරිවරණය

හුදකලා කිරීම තරඟකාරී පරිසරයක් තුළ දත්ත වෙත ප්‍රවේශ වීමේ ගැටලුව විසඳයි, අවශ්‍යයෙන්ම තරඟ තත්වයන්ගෙන් ආරක්ෂාව සපයයි. ඉතා මැනවින්, හුදකලා කිරීම යනු අනුක්‍රමිකකරණයයි, එය සමාන්තරගතව ගනුදෙනු සිදුකිරීමේ ප්‍රතිඵලය අනුක්‍රමිකව ක්‍රියාත්මක කළහොත් සමාන බව සහතික කරන දේපලකි. මෙම දේපලෙහි ප්රධාන ගැටළුව වන්නේ තාක්ෂණික වශයෙන් සැපයීම ඉතා අපහසු වන අතර, එහි ප්රතිඵලයක් වශයෙන්, පද්ධතියේ ක්රියාකාරිත්වය කෙරෙහි සැලකිය යුතු බලපෑමක් ඇති කරයි. හුදකලා වීම බොහෝ විට දුර්වල වන්නේ එබැවිනි, සමහර විෂමතා වල අවදානම පිළිගනිමින්, එය පහත සාකච්ඡා කරනු ඇත. යම් යම් විෂමතා ඇතිවීමේ හැකියාව නිශ්චිතවම ගණුදෙණු හුදකලා මට්ටම සංලක්ෂිත කරයි.

වඩාත්ම ප්‍රසිද්ධ විෂමතා නම්: අපිරිසිදු කියවීම, නැවත නැවත කළ නොහැකි කියවීම, ෆැන්ටම් කියවීම, නමුත් ඇත්ත වශයෙන්ම තවත් 5 ක් ඇත: අපිරිසිදු ලිවීම, කර්සරය නැතිවූ යාවත්කාලීන කිරීම, නැතිවූ යාවත්කාලීන කිරීම, කියවීමේ ඇලවීම, ලිවීමේ ඇලවීම.

අපිරිසිදු ලිවීම

විෂමතාවයේ සාරය නම් ගනුදෙනුවලට කැප නොකළ දත්ත නැවත ලිවිය හැකි බවයි.

දත්ත සමුදායන්හි ගනුදෙනු හුදකලා මට්ටම දුර්වල වීමෙන් ඇති විය හැක්කේ කුමක්ද?

මෙම විෂමතාවය අනතුරුදායක වන්නේ ගණුදෙණු දෙකම සිදු කිරීමෙන් පසු දත්ත ගැටුම් ඇති විය හැකි නිසා පමණක් නොව (පින්තූරයේ ඇති පරිදි), නමුත් පරමාණුකත්වය උල්ලංඝනය වීම නිසා ය: අප විසින් කැප නොකළ දත්ත නැවත ලිවීමට ඉඩ දෙන බැවින්, එක් ගනුදෙනුවකට බලපෑමක් නොකර ආපසු හරවන්නේ කෙසේද යන්න පැහැදිලි නැත. .

විෂමතාවය ඉතා සරලව සැලකිය හැකිය: අපි පටිගත කිරීම ආරම්භ කිරීමට පෙර වාර්තාවට අගුලක් අමුණන්නෙමු, අගුල ඉවත් කරන තෙක් වාර්තාව වෙනස් කිරීම වෙනත් ගනුදෙනු තහනම් කරමු.

අපිරිසිදු කියවීම

අපිරිසිදු කියවීම යනු කැප නොකළ දත්ත කියවීමයි.

දත්ත සමුදායන්හි ගනුදෙනු හුදකලා මට්ටම දුර්වල වීමෙන් ඇති විය හැක්කේ කුමක්ද?

නියැදිය මත පදනම්ව ක්‍රියා හෝ තීරණ ගැනීමට අවශ්‍ය වූ විට ගැටලු පැන නගී.

විෂමතාව නිවැරදි කිරීම සඳහා, ඔබට කියවීමේ අගුලක් ඇමිණිය හැකිය, නමුත් මෙය කාර්ය සාධනයට බෙහෙවින් බලපානු ඇත. ආපසු හැරවීමේ ගනුදෙනුවක් සඳහා, දත්තවල ආරම්භක තත්ත්වය (පටිගත කිරීම ආරම්භ කිරීමට පෙර) පද්ධතිය තුළ සුරැකිය යුතු බව පැවසීම වඩාත් සරල ය. ඇයි එතන ඉඳන් කියවන්නේ නැත්තේ? බොහෝ දත්ත සමුදායන් පෙරනිමියෙන් අපිරිසිදු කියවීම ඉවත් කරන තරමට එය මිල අඩුය.

යාවත්කාලීන නැති වී ඇත

නැතිවූ යාවත්කාලීනය යන්නෙන් අදහස් වන්නේ නැතිවූ යාවත්කාලීනයන් වන අතර පරිවර්තනය ඉතා නිවැරදිව ගැටලුවේ සාරය පිළිබිඹු කරයි:

දත්ත සමුදායන්හි ගනුදෙනු හුදකලා මට්ටම දුර්වල වීමෙන් ඇති විය හැක්කේ කුමක්ද?

ඇත්ත වශයෙන්ම, T2 ගනුදෙනුවේ ප්රතිඵලය ආපසු හැරවිය. මෙම තත්ත්වය පැහැදිලි හෝ ව්‍යංග ලිවීම් අගුලු මගින් නිවැරදි කළ හැක. එනම්, අපි එක්කෝ වාර්තාව යාවත්කාලීන කරන්නෙමු, පසුව ව්‍යංග අගුලක් සිදු වේ, නැතහොත් අපි ඉටු කරමු යාවත්කාලීන කිරීම සඳහා තෝරන්න, කියවීමට සහ ලිවීමට අගුලක් ඇති වීමට හේතු වේ. එවැනි මෙහෙයුමක් බෙහෙවින් භයානක බව කරුණාවෙන් සලකන්න: අපගේ "අහිංසක" කියවීම සමඟ, අපි වෙනත් කියවීම් අවහිර කරමු. සමහර දත්ත සමුදායන් වඩාත් ආරක්ෂිතයි කොටස සඳහා තෝරන්න, දත්ත කියවීමට ඉඩ ලබා දෙන නමුත් වෙනස් නොවේ.

කර්සරය යාවත්කාලීන කිරීම නැති විය

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

ඔබට කර්සරයක් අවශ්‍ය වන්නේ ඇයි? කාරණය නම්, සමහර දත්ත සමුදායන් තෝරාගත් (ස්ථායීතාවය කියවීම) මගින් තෝරාගත් සියලුම වාර්තා මත අගුලක් ලබා දෙයි, නැතහොත් කර්සරය දැනට පිහිටා ඇති වාර්තාවේ (කර්සරයේ ස්ථාවරත්වය) පමණි. කර්සරයේ ස්ථායීතාවය සමඟින්, කෙටි අගුල ක්‍රියාත්මක වේ, එමඟින් විශාල දත්ත නියැදියක් පුනරාවර්තනය කළහොත් අගුලු ගණන අඩු කිරීමට අපට ඉඩ සලසයි. එබැවින්, නැතිවූ යාවත්කාලීන විෂමතාව කර්සරය සඳහා වෙන වෙනම හුදකලා වේ.

නැවත නැවත කළ නොහැකි කියවීම

පුනරාවර්තනය නොවන කියවීම නම්, අපගේ ගනුදෙනුව ක්‍රියාත්මක කිරීමේදී, එකම වාර්තාවේ අඛණ්ඩ කියවීම් 2ක් විවිධ ප්‍රතිඵලවලට තුඩු දෙනු ඇත, මන්ද මෙම කියවීම් දෙක අතර වෙනත් ගනුදෙනුවක් මැදිහත් වී අපගේ දත්ත වෙනස් කර කැපවී ඇත.

දත්ත සමුදායන්හි ගනුදෙනු හුදකලා මට්ටම දුර්වල වීමෙන් ඇති විය හැක්කේ කුමක්ද?

මෙය පවා ගැටලුවක් වන්නේ ඇයි? පින්තූරයේ ඇති T2 ගනුදෙනුවේ ඉලක්කය ඩොලර් 150 ට අඩු සියලුම භාණ්ඩ තෝරාගැනීම බව සිතන්න. වෙනත් කෙනෙක් මිල $200 දක්වා යාවත්කාලීන කළා. මේ අනුව, ස්ථාපිත පෙරහන ක්රියා කළේ නැත.

ද්වි-අදියර අන්තර් අගුල් එකතු කළ විට හෝ MVCC යාන්ත්‍රණය භාවිතා කරන විට මෙම විෂමතා ඇතිවීම නතර වේ, මම එය වෙනම සාකච්ඡා කිරීමට කැමැත්තෙමි.

ෆැන්ටම් කියෙව්වා

Phantom යනු වෙනත් ගනුදෙනුවක් මගින් එකතු කරන ලද දත්ත කියවීමකි.

දත්ත සමුදායන්හි ගනුදෙනු හුදකලා මට්ටම දුර්වල වීමෙන් ඇති විය හැක්කේ කුමක්ද?

උදාහරණයක් ලෙස, මෙම විෂමතාවය ඇති වූ විට ලාභම නිෂ්පාදනයේ වැරදි තේරීම අපට නිරීක්ෂණය කළ හැකිය.

ෆැන්ටම් කියවීම් ඉවත් කිරීම දැනටමත් තරමක් අපහසුය. නිතිපතා අවහිර කිරීම ප්රමාණවත් නොවේ, මන්ද අපට තවමත් නොපවතින දෙයක් අවහිර කළ නොහැක. 2PL පද්ධති පුරෝකථන අගුලු දැමීම භාවිතා කරන අතර, MVCC පද්ධතිවල ගණුදෙණු උපලේඛකයක් ඇති අතර එය ඇතුල් කිරීමකින් බාධා කළ හැකි ගනුදෙනු ආපසු හරවයි. පළමු හා දෙවන යාන්ත්‍රණ දෙකම තරමක් බරයි.

ඇලවීම කියවන්න

අපි වගු කිහිපයක් සමඟ වැඩ කරන විට කියවීමේ ඇලවීම සිදු වේ, එහි අන්තර්ගතය නිරන්තරයෙන් වෙනස් විය යුතුය.

පළ කිරීම් සහ ඒවායේ මෙටා තොරතුරු නියෝජනය කරන වගු අප සතුව ඇතැයි කියමු:

දත්ත සමුදායන්හි ගනුදෙනු හුදකලා මට්ටම දුර්වල වීමෙන් ඇති විය හැක්කේ කුමක්ද?

එක් ගනුදෙනුවක් වගු වලින් කියවන අතර අනෙක ඒවා වෙනස් කරයි:

දත්ත සමුදායන්හි ගනුදෙනු හුදකලා මට්ටම දුර්වල වීමෙන් ඇති විය හැක්කේ කුමක්ද?

T1 ගනුදෙනුවේ ප්‍රතිඵලයක් ලෙස, පළ කිරීමෙහි මාතෘකාව = හොඳයි, සහ යාවත්කාලීන_by = T2 ඇත, එය යම් ආකාරයක නොගැලපීමකි.

ඇත්ත වශයෙන්ම, මෙය නැවත නැවත කළ නොහැකි කියවීමකි, නමුත් වගු කිහිපයක කොටසක් ලෙස.

මෙය නිවැරදි කිරීම සඳහා, T1 හට එය කියවන සියලුම පේළි මත අගුලු දැමිය හැක, එය T2 ගනුදෙනුව තොරතුරු වෙනස් කිරීම වලක්වනු ඇත. MVCC නම්, T2 ගනුදෙනුව අවලංගු වේ. අපි කර්සර් භාවිතා කරන්නේ නම් මෙම විෂමතාවයෙන් ආරක්ෂා වීම වැදගත් විය හැක.

ඇලව ලියන්න

මෙම විෂමතාවය උදාහරණයකින් පැහැදිලි කිරීම ද පහසු ය: අපගේ පද්ධතිය තුළ අවම වශයෙන් එක් වෛද්‍යවරයකු හෝ රාජකාරියේ යෙදිය යුතු යැයි සිතමු, නමුත් වෛද්‍යවරුන් දෙදෙනාම ඔවුන්ගේ රාජකාරිය අවලංගු කිරීමට තීරණය කළහ:

දත්ත සමුදායන්හි ගනුදෙනු හුදකලා මට්ටම දුර්වල වීමෙන් ඇති විය හැක්කේ කුමක්ද?

දත්ත සමුදායන්හි ගනුදෙනු හුදකලා මට්ටම දුර්වල වීමෙන් ඇති විය හැක්කේ කුමක්ද?

විෂමතාවයෙන් අදහස් කළේ කිසිදු වෛද්‍යවරයකු රාජකාරියේ නොසිටීමයි. මෙය සිදු වූයේ ඇයි? ගනුදෙනුව වෙනත් ගනුදෙනුවකින් උල්ලංඝනය කළ හැකි කොන්දේසියක් පරීක්ෂා කරමින් සිටි නිසාත්, හුදකලා වීම නිසාත් මෙම වෙනස අපට නොපෙනුණි.

මෙය නැවත නැවත කළ නොහැකි කියවීමකි. විකල්පයක් ලෙස, තෝරාගත් අයට මෙම වාර්තා මත අගුලු දැමිය හැක.

ලියන්න skew සහ read skew යනු පෙර පැවති විෂමතාවයන්ගේ සංයෝජන වේ. ඔබට ලිඛිත skew සලකා බැලිය හැකිය, එය අත්‍යවශ්‍යයෙන්ම ෆැන්ටම් කියවීමකි. සේවකයින්ගේ නම්, ඔවුන්ගේ වැටුප් සහ ඔවුන් වැඩ කරන ව්‍යාපෘතිය අඩංගු වගුවක් සලකා බලන්න:

දත්ත සමුදායන්හි ගනුදෙනු හුදකලා මට්ටම දුර්වල වීමෙන් ඇති විය හැක්කේ කුමක්ද?

දත්ත සමුදායන්හි ගනුදෙනු හුදකලා මට්ටම දුර්වල වීමෙන් ඇති විය හැක්කේ කුමක්ද?

එහි ප්‍රතිඵලයක් වශයෙන්, අපට පහත පින්තූරය ලැබේ: සෑම කළමනාකරුවෙකුම තම වෙනස් කිරීම අයවැය ඉක්මවා යාමට හේතු නොවනු ඇතැයි සිතූ නිසා, ඔවුන් එක්ව වියදම් අධික වීමට හේතු වූ පිරිස් වෙනස්කම් සිදු කළහ.

ගැටලුවේ හේතුව ෆැන්ටම් කියවීමේ දී හරියටම සමාන වේ.

සොයා ගැනීම්

දත්ත ගබඩාවේ ගණුදෙණු හුදකලා මට්ටම ලිහිල් කිරීම ආරක්ෂාව සහ කාර්ය සාධනය අතර ගනුදෙනුවකි; යම් යම් විෂමතා ඇති වුවහොත් ව්‍යාපාරයට ඇති විය හැකි අවදානම් මත පදනම්ව මෙම මට්ටම තෝරා ගැනීම ප්‍රවේශ විය යුතුය.

පාඨමාලාව ගැන තව දැනගන්න.

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

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