SchemaKeeper உடன் தரவுத்தளத்தில் வணிக தர்க்கம்

இந்தக் கட்டுரையின் நோக்கம் நூலகத்தின் உதாரணத்தைப் பயன்படுத்துவதாகும் திட்டக் காப்பாளர் PostgreSQL DBMS ஐப் பயன்படுத்தி PHP திட்டங்களுக்குள் தரவுத்தளங்களை உருவாக்கும் செயல்முறையை கணிசமாக எளிதாக்கும் கருவிகளைக் காட்டுகிறது.

இந்தக் கட்டுரையில் உள்ள தகவல், முதலில், PostgreSQL திறன்களைப் பயன்படுத்த விரும்பும் டெவலப்பர்களுக்கு பயனுள்ளதாக இருக்கும், ஆனால் தரவுத்தளத்தில் வைக்கப்பட்டுள்ள வணிக தர்க்கத்தை பராமரிப்பதில் சிக்கல்களை எதிர்கொள்கிறது.

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

பின்வரும் கேள்விகள் பரிசீலிக்கப்படும்:

  1. பதிப்புக் கட்டுப்பாட்டு அமைப்பில் தரவுத்தள அமைப்பு டம்ப் எந்த வடிவத்தில் சேமிக்கப்பட வேண்டும் (இனிமேல் VCS என குறிப்பிடப்படுகிறது)
  2. டம்பைச் சேமித்த பிறகு தரவுத்தள அமைப்பில் ஏற்படும் மாற்றங்களைக் கண்காணிப்பது எப்படி
  3. முரண்பாடுகள் மற்றும் மாபெரும் இடம்பெயர்வு கோப்புகள் இல்லாமல் தரவுத்தள கட்டமைப்பில் ஏற்படும் மாற்றங்களை மற்ற சூழல்களுக்கு மாற்றுவது எப்படி
  4. பல டெவலப்பர்களால் ஒரு திட்டத்தில் இணையான பணியின் செயல்முறையை எவ்வாறு ஒழுங்கமைப்பது
  5. ஒரு உற்பத்தி சூழலுக்கு தரவுத்தள கட்டமைப்பில் அதிக மாற்றங்களை எவ்வாறு பாதுகாப்பாக வரிசைப்படுத்துவது

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

VCS இல் ஒரு தரவுத்தள கட்டமைப்பை எவ்வாறு சேமிப்பது

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

பல எடுத்துக்காட்டுகளைப் பயன்படுத்தி ஒரு தரவுத்தளத்திலிருந்து பொருட்களை கோப்புகளாக மாற்றுவதைப் பார்ப்போம்:

பொருள் வகை
திட்டம்
பெயர்
கோப்புக்கான தொடர்புடைய பாதை

அட்டவணை
பொது
கணக்குகள்
./public/tables/accounts.txt

சேமிக்கப்பட்ட செயல்முறை
பொது
அங்கீகாரம் (ஹாஷ் பிகிண்ட்)
./public/functions/auth(int8).sql

யோசனை
பதிவு
தீர்வைகள்
./booking/views/tariffs.txt

கோப்புகளின் உள்ளடக்கங்கள் ஒரு குறிப்பிட்ட தரவுத்தள பொருளின் கட்டமைப்பின் உரை பிரதிநிதித்துவமாகும். எடுத்துக்காட்டாக, சேமிக்கப்பட்ட நடைமுறைகளுக்கு, கோப்பின் உள்ளடக்கங்கள் பிளாக்கில் தொடங்கி சேமிக்கப்பட்ட செயல்முறையின் முழு வரையறையாக இருக்கும். CREATE OR REPLACE FUNCTION.

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

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

டம்பைச் சேமித்த பிறகு தரவுத்தள அமைப்பில் ஏற்படும் மாற்றங்களைக் கண்காணிப்பது எப்படி

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

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

முரண்பாடுகள் மற்றும் மாபெரும் இடம்பெயர்வு கோப்புகள் இல்லாமல் தரவுத்தள கட்டமைப்பில் ஏற்படும் மாற்றங்களை மற்ற சூழல்களுக்கு மாற்றுவது எப்படி

செயல்பாட்டிற்கு நன்றி deployDump சேமிக்கப்பட்ட செயல்முறைகளின் மூலக் குறியீட்டை வழக்கமான பயன்பாட்டு மூலக் குறியீட்டைப் போலவே திருத்தலாம். நீங்கள் சேமிக்கப்பட்ட செயல்முறைக் குறியீட்டில் புதிய வரிகளைச் சேர்க்கலாம்/நீக்கலாம் மற்றும் உடனடியாக பதிப்புக் கட்டுப்பாட்டிற்கு மாற்றங்களைத் தள்ளலாம் அல்லது டம்ப் கோப்பகத்தில் தொடர்புடைய கோப்புகளை உருவாக்கி/நீக்குவதன் மூலம் சேமிக்கப்பட்ட நடைமுறைகளை உருவாக்கலாம்/நீக்கலாம்.

எடுத்துக்காட்டாக, ஒரு திட்டத்தில் ஒரு புதிய சேமிக்கப்பட்ட செயல்முறையை உருவாக்க 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 இல் உள்ள ஒவ்வொரு கிளையும் அதன் சொந்த டம்ப் பதிப்பைக் கொண்டிருக்கும், மேலும் கிளைகளை இணைக்கும் போது, ​​டம்ப்கள் ஒன்றிணைக்கப்படும். பெரும்பாலான சந்தர்ப்பங்களில், ஒன்றிணைந்த பிறகு கூடுதல் நடவடிக்கை எடுக்கப்பட வேண்டியதில்லை, ஆனால் வெவ்வேறு கிளைகளில் மாற்றங்கள் செய்யப்பட்டால், எடுத்துக்காட்டாக, ஒரே அட்டவணையில், ஒரு மோதல் ஏற்படலாம்.

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

ஒரு உற்பத்தி சூழலுக்கு தரவுத்தள கட்டமைப்பில் அதிக மாற்றங்களை எவ்வாறு பாதுகாப்பாக வரிசைப்படுத்துவது

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

முதல் டி.டி.எல் PostgreSQL இல் உள்ளது பரிவர்த்தனை, பின்வரும் வரிசைப்படுத்தல் வரிசையை கடைபிடிக்க பரிந்துரைக்கப்படுகிறது, இதனால், எதிர்பாராத பிழை ஏற்பட்டால், நீங்கள் "வலியின்றி" செயல்படுத்தலாம் ROLLBACK:

  1. பரிவர்த்தனையைத் தொடங்கவும்
  2. ஒரு பரிவர்த்தனையில் அனைத்து இடம்பெயர்வுகளையும் செய்யவும்
  3. அதே பரிவர்த்தனையில், செயல்படுத்தவும் deployDump
  4. பரிவர்த்தனையை முடிக்காமல், செயல்படுத்தவும் verifyDump. பிழைகள் இல்லை என்றால், இயக்கவும் COMMIT. பிழைகள் இருந்தால், இயக்கவும் ROLLBACK

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

முடிவுக்கு

மேலே விவரிக்கப்பட்ட முறைகளுக்கு நன்றி, "PHP + PostgreSQL" திட்டங்களில் இருந்து அதிகபட்ச செயல்திறனைக் கசக்க முடியும், அதே நேரத்தில் முக்கிய பயன்பாட்டுக் குறியீட்டில் உள்ள அனைத்து வணிக தர்க்கங்களையும் செயல்படுத்துவதை விட ஒப்பீட்டளவில் சிறிய மேம்பாட்டு வசதியை தியாகம் செய்யலாம். மேலும், தரவு செயலாக்கம் PL/pgSQL PHP இல் எழுதப்பட்ட அதே செயல்பாட்டைக் காட்டிலும் மிகவும் வெளிப்படையானது மற்றும் குறைவான குறியீடு தேவைப்படுகிறது.

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

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