SchemaKeeper භාවිතයෙන් දත්ත සමුදායේ ව්‍යාපාරික තර්කනය

මෙම ලිපියේ අරමුණ පුස්තකාලයක් උදාහරණයට ගැනීමයි ක්‍රම පාලකයා PostgreSQL DBMS භාවිතයෙන් PHP ව්‍යාපෘති තුළ දත්ත සමුදායන් සංවර්ධනය කිරීමේ ක්‍රියාවලිය සැලකිය යුතු ලෙස සරල කළ හැකි මෙවලම් පෙන්වන්න.

මෙම ලිපියෙන් ලැබෙන තොරතුරු, ප්‍රථමයෙන්ම, PostgreSQL හැකියාවන්ගෙන් උපරිම ප්‍රයෝජන ගැනීමට කැමති නමුත් දත්ත ගබඩාවේ තබා ඇති ව්‍යාපාරික තර්කනය පවත්වාගෙන යාමේ ගැටළු වලට මුහුණ දෙන සංවර්ධකයින්ට ප්‍රයෝජනවත් වනු ඇත.

ව්‍යාපාර තර්කනය දත්ත ගබඩාවක ගබඩා කිරීමේ වාසි සහ අවාසි මෙම ලිපියෙන් විස්තර නොකෙරේ. තේරීම දැනටමත් පාඨකයා විසින් සිදු කර ඇති බව උපකල්පනය කෙරේ.

පහත ප්‍රශ්න සලකා බලනු ඇත:

  1. අනුවාද පාලන පද්ධතියක දත්ත සමුදා ව්‍යුහයක් ගබඩා කළ යුත්තේ කුමන ආකාරයෙන්ද (මින් ඉදිරියට VCS ලෙස හැඳින්වේ)
  2. ඩම්ප් එකක් සුරැකීමෙන් පසු දත්ත සමුදා ව්‍යුහයේ වෙනස්කම් නිරීක්ෂණය කරන්නේ කෙසේද
  3. ගැටුම් සහ යෝධ සංක්‍රමණ ගොනු නොමැතිව දත්ත සමුදා ව්‍යුහයේ වෙනස්කම් වෙනත් පරිසරයන්ට මාරු කරන්නේ කෙසේද
  4. සංවර්ධකයින් කිහිප දෙනෙකු විසින් ව්‍යාපෘතියක සමාන්තර වැඩ කිරීමේ ක්‍රියාවලිය සංවිධානය කරන්නේ කෙසේද
  5. නිෂ්පාදන පරිසරයකට දත්ත සමුදා ව්‍යුහයේ වැඩි වෙනස්කම් ආරක්ෂිතව යොදවන්නේ කෙසේද

    SkemaKeeper භාෂාවෙන් ලියා ඇති ගබඩා කර ඇති ක්‍රියා පටිපාටි සමඟ වැඩ කිරීම සඳහා නිර්මාණය කර ඇත PL/pgSQL. වෙනත් භාෂා සමඟ පරීක්ෂණ සිදු කර නැත, එබැවින් භාවිතය එතරම් ඵලදායී නොවිය හැකිය හෝ නොහැකි විය හැකිය.

VCS හි දත්ත සමුදා ව්‍යුහය ඩම්ප් ගබඩා කරන්නේ කෙසේද

පුස්තකාලය ක්‍රම පාලකයා කාර්යයක් සපයයි saveDump, දත්ත සමුදායෙන් සියලුම වස්තූන්ගේ ව්‍යුහය වෙනම පෙළ ගොනු ලෙස සුරකියි. ප්‍රතිදානය යනු දත්ත සමුදා ව්‍යුහය අඩංගු ඩිරෙක්ටරියකි, VCS වෙත පහසුවෙන් එකතු කළ හැකි කණ්ඩායම් ගොනු වලට බෙදා ඇත.

උදාහරණ කිහිපයක් භාවිතා කරමින් දත්ත සමුදායෙන් වස්තු ගොනු බවට පරිවර්තනය කිරීම දෙස බලමු:

වස්තු වර්ගය
යෝජනා ක්රමය
මාතෘකාව
ගොනු කිරීමට සාපේක්ෂ මාර්ගය

වගුව
පොදු
ගිණුම්
./public/tables/accounts.txt

ගබඩා කර ඇති ක්රියා පටිපාටිය
පොදු
auth (hash bigint)
./public/functions/auth(int8).sql

හැඳින්වීම
න ාය
ගාස්තු
./booking/views/tariffs.txt

ගොනු වල අන්තර්ගතය නිශ්චිත දත්ත සමුදා වස්තුවක ව්යුහයේ පාඨමය නිරූපණයකි. උදාහරණයක් ලෙස, ගබඩා කර ඇති ක්‍රියා පටිපාටි සඳහා, ගොනුවේ අන්තර්ගතය බ්ලොක් එකෙන් පටන් ගෙන ගබඩා කර ඇති ක්‍රියා පටිපාටියේ සම්පූර්ණ අර්ථ දැක්වීම වනු ඇත. CREATE OR REPLACE FUNCTION.

ඉහත වගුවෙන් දැකිය හැකි පරිදි, ගොනුව වෙත යන මාර්ගය වස්තුවේ වර්ගය, යෝජනා ක්රමය සහ නම පිළිබඳ තොරතුරු ගබඩා කරයි. මෙම ප්‍රවේශය දත්ත සමුදායේ වෙනස්කම් පිළිබඳ ඩම්ප් සහ කේත සමාලෝචනය හරහා සැරිසැරීමට පහසු කරයි.

දීර්ඝ .sql ගබඩා කර ඇති ක්‍රියා පටිපාටි ප්‍රභව කේතය සහිත ගොනු සඳහා, මෙය තෝරාගෙන ඇති අතර එමඟින් ගොනුව විවෘත කරන විට දත්ත සමුදාය සමඟ අන්තර්ක්‍රියා කිරීමට IDE ස්වයංක්‍රීයව මෙවලම් සපයයි.

ඩම්ප් එකක් සුරැකීමෙන් පසු දත්ත සමුදා ව්‍යුහයේ වෙනස්කම් නිරීක්ෂණය කරන්නේ කෙසේද

වත්මන් දත්ත සමුදා ව්‍යුහයේ ඩම්ප් එකක් VCS හි සුරැකීමෙන්, ඩම්ප් නිර්මාණය කිරීමෙන් පසුව දත්ත සමුදා ව්‍යුහයේ වෙනස්කම් සිදු කර ඇත්දැයි පරීක්ෂා කිරීමට අපට අවස්ථාව ලැබේ. පුස්තකාලයේ ක්‍රම පාලකයා දත්ත සමුදා ව්‍යුහයේ වෙනස්කම් හඳුනා ගැනීමට, ශ්‍රිතයක් සපයනු ලැබේ verifyDump, අතුරු ආබාධ නොමැතිව වෙනස්කම් පිළිබඳ තොරතුරු ලබා දෙයි.

පරීක්ෂා කිරීමට විකල්ප ක්රමයක් වන්නේ නැවත ශ්රිතය ඇමතීමයි saveDump, එකම නාමාවලිය සඳහන් කරමින්, සහ වෙනස්කම් සඳහා VCS පරීක්ෂා කරන්න. දත්ත සමුදායේ ඇති සියලුම වස්තු වෙනම ගොනු වල සුරකින බැවින්, VCS පෙන්වන්නේ වෙනස් වූ වස්තූන් පමණි.
මෙම ක්‍රමයේ ප්‍රධාන අවාසිය නම් වෙනස්කම් බැලීම සඳහා ගොනු නැවත ලිවීමේ අවශ්‍යතාවයයි.

ගැටුම් සහ යෝධ සංක්‍රමණ ගොනු නොමැතිව දත්ත සමුදා ව්‍යුහයේ වෙනස්කම් වෙනත් පරිසරයන්ට මාරු කරන්නේ කෙසේද

කාර්යයට ස්තූතියි deployDump ගබඩා කර ඇති ක්‍රියා පටිපාටිවල ප්‍රභව කේතය සාමාන්‍ය යෙදුම් ප්‍රභව කේතය මෙන් හරියටම සංස්කරණය කළ හැක. ඔබට ගබඩා කර ඇති ක්‍රියා පටිපාටි කේතයට නව රේඛා එක් කිරීමට/මැකීමට සහ අනුවාද පාලනයට වෙනස්කම් වහාම තල්ලු කිරීමට හෝ ඩම්ප් ඩිරෙක්ටරියේ අනුරූප ගොනු සෑදීමෙන්/මැකීමෙන් ගබඩා කර ඇති ක්‍රියා පටිපාටි සෑදීමට/මැකීමට හැකිය.

උදාහරණයක් ලෙස, schema තුළ නව ගබඩා කර ඇති ක්රියා පටිපාටියක් නිර්මාණය කිරීම public දිගුව සමඟ නව ගොනුවක් සාදන්න .sql නාමාවලියෙහි public/functions, බ්ලොක් එක ඇතුළුව ගබඩා කර ඇති ක්‍රියා පටිපාටියේ මූල කේතය එහි තබන්න CREATE OR REPLACE FUNCTION, පසුව කාර්යය අමතන්න deployDump. ගබඩා කර ඇති ක්‍රියා පටිපාටිය වෙනස් කිරීම සහ මකා දැමීම එකම ආකාරයකින් සිදු වේ. මේ අනුව, කේතය VCS සහ දත්ත සමුදාය යන දෙකටම එකවර ගමන් කරයි.

කිසියම් ගබඩා කර ඇති ක්‍රියා පටිපාටියක ප්‍රභව කේතයේ දෝෂයක් හෝ ගොනුවේ නම් සහ ගබඩා කර ඇති ක්‍රියා පටිපාටිය අතර විෂමතාවයක් දිස්වන්නේ නම්, එවිට deployDump අසාර්ථක වනු ඇත, දෝෂ පෙළ පෙන්වයි. භාවිතා කරන විට ඩම්ප් සහ වත්මන් දත්ත ගබඩාව අතර ගබඩා කර ඇති ක්‍රියා පටිපාටි නොගැලපීම කළ නොහැක deployDump.

නව ගබඩා කරන ලද ක්රියා පටිපාටියක් නිර්මාණය කිරීමේදී, නිවැරදි ගොනු නාමය අතින් ඇතුල් කිරීමට අවශ්ය නොවේ. ගොනුවට දිගුව තිබීම ප්රමාණවත්ය .sql. ඇමතුමෙන් පසුව deployDump දෝෂ පෙළෙහි නිවැරදි නම අඩංගු වේ, එය ගොනුව නැවත නම් කිරීමට භාවිතා කළ හැක.

deployDump ඔබට අතිරේක ක්‍රියාවලින් තොරව ශ්‍රිතයක හෝ ප්‍රතිලාභ වර්ගයක පරාමිතීන් වෙනස් කිරීමට ඉඩ ලබා දෙන අතර, සම්භාව්‍ය ප්‍රවේශය සමඟින් ඔබට කළ යුතු වේ.
මුලින්ම ක්රියාත්මක කරන්න DROP FUNCTION, සහ පසුව පමණි CREATE OR REPLACE FUNCTION.

අවාසනාවකට මෙන්, සමහර තත්වයන් තිබේ deployDump වෙනස්කම් ස්වයංක්‍රීයව යෙදිය නොහැක. උදාහරණයක් ලෙස, අවම වශයෙන් එක් ප්‍රේරකයක් භාවිතා කරන ප්‍රේරක ශ්‍රිතයක් ඉවත් කළහොත්. සංක්‍රමණ ගොනු භාවිතයෙන් එවැනි තත්වයන් අතින් විසඳනු ලැබේ.

ගබඩා කර ඇති ක්‍රියා පටිපාටි වෙත වෙනස්කම් සංක්‍රමණය කිරීම සඳහා ඔබ වගකිව යුතු නම් ක්‍රම පාලකයා, එවිට ව්යුහයේ වෙනත් වෙනස්කම් මාරු කිරීමට සංක්රමණ ගොනු භාවිතා කළ යුතුය. උදාහරණයක් ලෙස, සංක්‍රමණ සමඟ වැඩ කිරීම සඳහා හොඳ පුස්තකාලයකි ධර්මය/සංක්‍රමණ.

දියත් කිරීමට පෙර සංක්‍රමණ යෙදිය යුතුය deployDump. ගබඩා කර ඇති ක්‍රියා පටිපාටිවල වෙනස්කම් පසුව ගැටළු නොමැතිව මාරු වන පරිදි ව්‍යුහයේ සියලුම වෙනස්කම් කිරීමට සහ ගැටළු සහගත තත්වයන් විසඳීමට මෙය ඔබට ඉඩ සලසයි.

සංක්‍රමණ සමඟ වැඩ කිරීම පහත කොටස්වල වඩාත් විස්තරාත්මකව විස්තර කෙරේ.

සංවර්ධකයින් කිහිප දෙනෙකු විසින් ව්‍යාපෘතියක සමාන්තර වැඩ කිරීමේ ක්‍රියාවලිය සංවිධානය කරන්නේ කෙසේද

VCS හි සුරකින ලද ඩම්ප් වලට අනුකූලව දේශීය දත්ත සමුදායේ ව්‍යුහය ගෙන ඒම, ඔහුගේ වැඩ යන්ත්‍රය මත සංවර්ධකයා විසින් දියත් කරනු ලබන දත්ත සමුදාය සම්පූර්ණයෙන් ආරම්භ කිරීම සඳහා ස්ක්‍රිප්ට් එකක් නිර්මාණය කිරීම අවශ්‍ය වේ. පහසුම ක්රමය වන්නේ දේශීය දත්ත සමුදාය ආරම්භ කිරීම පියවර 3 කට බෙදීමයි:

  1. උදා: මූලික ව්‍යුහයක් සහිත ගොනුවක් ආයාත කරන්න. base.sql
  2. සංක්‍රමණ යෙදීම
  3. අමතන්න deployDump

base.sql සංක්‍රමණයන් යොදන සහ ක්‍රියාත්මක කරන ආරම්භක ලක්ෂ්‍යය වේ deployDumpඑනම් base.sql + миграции + deployDump = актуальная структура БД. උපයෝගීතාව භාවිතයෙන් ඔබට එවැනි ගොනුවක් සෑදිය හැකිය pg_dump. පාවිච්චි කළා base.sql මුල සිටම දත්ත සමුදාය ආරම්භ කිරීමේදී පමණි.

සම්පූර්ණ දත්ත සමුදාය ආරම්භ කිරීම සඳහා ස්ක්‍රිප්ටය අමතන්න refresh.sh. කාර්ය ප්රවාහය මේ වගේ විය හැකිය:

  1. සංවර්ධකයා ඔහුගේ පරිසරය තුළ දියත් කරයි refresh.sh සහ වත්මන් දත්ත සමුදා ව්යුහය ලබා ගනී
  2. සංවර්ධකයා නව ක්‍රියාකාරීත්වයේ අවශ්‍යතා සපුරාලීම සඳහා දේශීය දත්ත සමුදාය වෙනස් කරමින් අතේ ඇති කාර්යයේ වැඩ ආරම්භ කරයි (ALTER TABLE ... ADD COLUMN ආදිය)
  3. කාර්යය සම්පූර්ණ කිරීමෙන් පසුව, සංවර්ධකයා විසින් කාර්යය අමතන්න saveDumpVCS හි දත්ත ගබඩාවේ සිදු කරන ලද වෙනස්කම් සිදු කිරීමට
  4. සංවර්ධක නැවත දියත් කිරීම refresh.shඑවිට verifyDumpසංක්‍රමණයට ඇතුළත් කළ යුතු වෙනස්කම් ලැයිස්තුවක් දැන් පෙන්වයි
  5. සංවර්ධකයා සියලුම ව්‍යුහයේ වෙනස්කම් සංක්‍රමණ ගොනුවට මාරු කරයි, නැවත ධාවනය කරයි refresh.sh и verifyDump, සහ, සංක්‍රමණය නිවැරදිව සම්පාදනය කර ඇත්නම්, verifyDump දේශීය දත්ත ගබඩාව සහ සුරකින ලද ඩම්ප් අතර වෙනසක් නොපෙන්වයි

ඉහත විස්තර කර ඇති ක්‍රියාවලිය gitflow මූලධර්ම සමඟ අනුකූල වේ. VCS හි සෑම ශාඛාවකම ඩම්ප් එකේ තමන්ගේම අනුවාදයක් අඩංගු වන අතර, ශාඛා ඒකාබද්ධ කරන විට, ඩම්ප් ඒකාබද්ධ කරනු ලැබේ. බොහෝ අවස්ථාවන්හීදී, ඒකාබද්ධ වීමෙන් පසු අමතර ක්‍රියාමාර්ග ගත යුතු නැත, නමුත් විවිධ ශාඛා වල වෙනස්කම් සිදු කර ඇත්නම්, උදාහරණයක් ලෙස, එකම වගුවකට, ගැටුමක් ඇතිවිය හැකිය.

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

නිෂ්පාදන පරිසරයකට දත්ත සමුදා ව්‍යුහයේ වැඩි වෙනස්කම් ආරක්ෂිතව යොදවන්නේ කෙසේද

VCS හි වත්මන් දත්ත සමුදා ව්‍යුහයේ ඩම්ප් එකක් තිබීම නිසා, අවශ්‍ය ව්‍යුහයට හරියටම අනුකූල වීම සඳහා නිෂ්පාදන දත්ත සමුදාය පරීක්ෂා කිරීමට හැකි වේ. සංවර්ධකයින් අදහස් කරන සියලුම වෙනස්කම් සාර්ථකව නිෂ්පාදන පදනමට මාරු කළ බව මෙය සහතික කරයි.

සිට ඩීඩීඑල් PostgreSQL හි වේ ගනුදෙනු, අනපේක්ෂිත දෝෂයක් ඇති වූ විට, ඔබට "වේදනා රහිතව" ක්‍රියාත්මක කළ හැකි වන පරිදි, පහත යෙදවීමේ අනුපිළිවෙලට අනුගත වීම නිර්දේශ කෙරේ. ROLLBACK:

  1. ගනුදෙනුව ආරම්භ කරන්න
  2. ගනුදෙනුවක සියලුම සංක්‍රමණ සිදු කරන්න
  3. එකම ගනුදෙනුවේදී, ක්රියාත්මක කරන්න deployDump
  4. ගනුදෙනුව සම්පූර්ණ නොකර, ක්‍රියාත්මක කරන්න verifyDump. දෝෂ නොමැති නම්, ධාවනය කරන්න COMMIT. දෝෂ තිබේ නම්, ධාවනය කරන්න ROLLBACK

ශුන්‍ය අක්‍රීය කාලය ඇතුළුව යෙදුම් යෙදවීම සඳහා පවතින ප්‍රවේශයන් වෙත මෙම පියවර පහසුවෙන් ඒකාබද්ධ කළ හැක.

නිගමනය

ඉහත විස්තර කර ඇති ක්‍රමවලට ස්තූතිවන්ත වන්නට, ප්‍රධාන යෙදුම් කේතයේ සියලුම ව්‍යාපාරික තර්ක ක්‍රියාවට නැංවීමට සාපේක්ෂව සාපේක්ෂව කුඩා සංවර්ධන පහසුවක් කැප කරන අතරම, “PHP + PostgreSQL” ව්‍යාපෘතිවලින් උපරිම කාර්ය සාධනය මිරිකා ගත හැකිය. එපමණක් නොව, දත්ත සැකසීම PL/pgSQL බොහෝ විට වඩා විනිවිද පෙනෙන අතර PHP හි ලියා ඇති එකම ක්‍රියාකාරීත්වයට වඩා අඩු කේතයක් අවශ්‍ය වේ.

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

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