பைத்தானில் கட்டளை வினவல் பொறுப்பு பிரிவினை (CQRS) முறையை ஆராயுங்கள். இந்த விரிவான வழிகாட்டி நன்மைகள், சவால்கள், செயலாக்க உத்திகள் மற்றும் அளவிடக்கூடிய மற்றும் பராமரிக்கக்கூடிய பயன்பாடுகளை உருவாக்குவதற்கான சிறந்த நடைமுறைகளை உள்ளடக்கியது.
CQRS உடன் பைத்தானை தேர்ச்சி செய்தல்: கட்டளை வினவல் பொறுப்பு பிரிவினை குறித்த ஒரு உலகளாவிய கண்ணோட்டம்
மென்பொருள் மேம்பாட்டின் எப்போதும் மாறிவரும் நிலப்பரப்பில், பயன்பாடுகளை உருவாக்குவது செயல்பாட்டுக்கு மட்டுமல்லாமல், அளவிடக்கூடியதாகவும், பராமரிக்கக்கூடியதாகவும், செயல்திறன் மிக்கதாகவும் இருப்பது மிக முக்கியமானது. உலகெங்கிலும் உள்ள டெவலப்பர்களுக்கு, வலுவான கட்டடக்கலை முறைகளைப் புரிந்துகொள்வது மற்றும் செயல்படுத்துவது, ஒரு செழிப்பான அமைப்புக்கும், தடையான, நிர்வகிக்க முடியாத குழப்பத்திற்கும் இடையிலான வித்தியாசமாக இருக்கலாம். குறிப்பிடத்தக்க இழுவைப் பெற்ற ஒரு சக்திவாய்ந்த முறை கட்டளை வினவல் பொறுப்பு பிரிவினை (CQRS). இந்த இடுகை CQRS க்குள் ஆழமாக மூழ்கி, அதன் கோட்பாடுகள், நன்மைகள், சவால்கள் மற்றும் பைதான் சுற்றுச்சூழல் அமைப்பில் உள்ள நடைமுறை பயன்பாடுகளை ஆராய்கிறது, பல்வேறு பின்னணிகள் மற்றும் தொழில்களில் உள்ள டெவலப்பர்களுக்கு உண்மையிலேயே உலகளாவிய கண்ணோட்டத்தை வழங்குகிறது.
கட்டளை வினவல் பொறுப்பு பிரிவினை (CQRS) என்றால் என்ன?
அதன் மையத்தில், CQRS என்பது ஒரு கட்டடக்கலை வடிவமாகும், இது கட்டளைகளைக் கையாள்வதற்கான பொறுப்புகளை (அமைப்பின் நிலையை மாற்றும் செயல்பாடுகள்) வினவல்களிலிருந்து பிரிக்கிறது (நிலையை மாற்றாமல் தரவைப் பெறும் செயல்பாடுகள்). பாரம்பரியமாக, பல அமைப்புகள் தரவைப் படித்தல் மற்றும் எழுதுதல் ஆகிய இரண்டிற்கும் ஒரு மாதிரியைப் பயன்படுத்துகின்றன, இது பெரும்பாலும் கட்டளை-வினவல் பொறுப்பு பிரிவினை முறை என்று குறிப்பிடப்படுகிறது. அத்தகைய மாதிரியில், ஒரு தனி முறை அல்லது செயல்பாடு தரவுத்தள பதிவை புதுப்பிப்பதற்கும், பின்னர் புதுப்பிக்கப்பட்ட பதிவை திருப்பித் தருவதற்கும் பொறுப்பாகும்.
CQRS, மறுபுறம், இந்த இரண்டு செயல்பாடுகளுக்கும் தனித்துவமான மாதிரிகளை வாதிடுகிறது. இதை நாணயத்தின் இரண்டு பக்கங்களாக நினைத்துப் பாருங்கள்:
- கட்டளைகள்: இவை ஒரு செயலைச் செய்வதற்கான கோரிக்கைகள், இதன் விளைவாக ஒரு நிலை மாற்றம் ஏற்படுகிறது. கட்டளைகள் பொதுவாக கட்டாயமானவை (எ.கா., "உருவாக்கு ஆணை", "பயனர் சுயவிவரத்தை புதுப்பிக்கவும்", "கட்டணத்தை செயலாக்கவும்"). அவை நேரடியாக தரவைத் திருப்பித் தரவில்லை, மாறாக வெற்றி அல்லது தோல்வியைக் குறிக்கின்றன.
- வினவல்கள்: இவை தரவைப் பெறுவதற்கான கோரிக்கைகள். வினவல்கள் அறிவிப்புக்குரியவை (எ.கா., "பயனரை ஐடி மூலம் பெறு", "வாடிக்கையாளருக்கான பட்டியல் ஆணைகள்", "தயாரிப்பு விவரங்களைப் பெறு"). அவை தரவைத் திருப்பித் தர வேண்டும், ஆனால் எந்த பக்க விளைவுகளையும் அல்லது நிலை மாற்றங்களையும் ஏற்படுத்தக்கூடாது.
அடிப்படை கொள்கை என்னவென்றால், படித்தல் மற்றும் எழுதுதல் வெவ்வேறு அளவிடுதல் மற்றும் செயல்திறன் பண்புகளைக் கொண்டுள்ளன. வினவல்கள் பெரும்பாலும் பெரிய தரவுத்தொகுப்புகளை விரைவாகப் பெறுவதற்கு உகந்ததாக இருக்க வேண்டும், அதே நேரத்தில் கட்டளைகளில் சிக்கலான வணிக தர்க்கம், சரிபார்ப்பு மற்றும் பரிவர்த்தனை ஒருமைப்பாடு ஆகியவை இருக்கலாம். இந்த கவலைகளைப் பிரிப்பதன் மூலம், CQRS படித்தல் மற்றும் எழுதுதல் செயல்பாடுகளின் சுயாதீன அளவிடுதல் மற்றும் மேம்பாட்டிற்காக அனுமதிக்கிறது.
CQRS க்கு பின்னால் உள்ள "ஏன்": பொதுவான சவால்களை எதிர்கொள்வது
பல மென்பொருள் அமைப்புகள், குறிப்பாக காலப்போக்கில் வளரும், பொதுவான சவால்களை எதிர்கொள்கின்றன:
- செயல்திறன் தடைகள்: பயனர் தளங்கள் வளரும்போது, படித்தல் செயல்பாடுகள் கணினியை அதிகமாக பாதிக்கலாம், குறிப்பாக அவை சிக்கலான எழுதுதல் செயல்பாடுகளுடன் பின்னிப்பிணைந்திருந்தால்.
- அளவிடுதல் சிக்கல்கள்: படித்தல் மற்றும் எழுதுதல் செயல்பாடுகள் ஒரே தரவு மாதிரி மற்றும் உள்கட்டமைப்பைப் பகிரும்போது அவற்றை சுயாதீனமாக அளவிடுவது கடினம்.
- குறியீடு சிக்கலானது: படித்தல் மற்றும் எழுதுதல் இரண்டையும் கையாளும் ஒரு மாதிரி வணிக தர்க்கத்துடன் வீங்கியதாக மாறும், இது புரிந்து கொள்ளவும், பராமரிக்கவும், சோதிக்கவும் கடினமாக்குகிறது.
- தரவு ஒருமைப்பாடு கவலைகள்: சிக்கலான படித்தல்-மாற்று-எழுதுதல் சுழற்சிகள் இனம் நிலைமைகளையும் தரவு முரண்பாடுகளையும் அறிமுகப்படுத்தலாம்.
- அறிக்கை மற்றும் பகுப்பாய்வுகளில் சிரமம்: அறிக்கை அல்லது பகுப்பாய்வுகளுக்கான தரவைப் பிரித்தெடுப்பது நேரடியானது மற்றும் நேரடி பரிவர்த்தனை நடவடிக்கைகளுக்கு இடையூறு விளைவிக்கும்.
CQRS கவலைகளை தெளிவாக பிரிப்பதன் மூலம் இந்த சிக்கல்களை நேரடியாக நிவர்த்தி செய்கிறது.
CQRS அமைப்பின் முக்கிய கூறுகள்
ஒரு பொதுவான CQRS கட்டமைப்பு பல முக்கிய கூறுகளை உள்ளடக்கியது:
1. கட்டளை பக்கம்
கட்டளைகளைக் கையாள்வதற்கு இந்த அமைப்பு பொறுப்பாகும். செயல்முறை பொதுவாக பின்வருமாறு:
- கட்டளை கையாளுபவர்கள்: இவை கட்டளைகளைப் பெற்று செயலாக்கும் வகுப்புகள் அல்லது செயல்பாடுகள். கட்டளையை சரிபார்க்கவும், தேவையான நடவடிக்கைகளை எடுக்கவும், அமைப்பின் நிலையை புதுப்பிக்கவும் அவர்கள் வணிக தர்க்கத்தைக் கொண்டுள்ளனர்.
- திரட்டுகள் (அடிக்கடி டொமைன்-டிரிவன் வடிவமைப்பிலிருந்து): திரட்டுகள் என்பது டொமைன் பொருள்களின் கிளஸ்டர்கள் ஆகும், அவை ஒரு அலகு என்று கருதப்படலாம். அவர்கள் வணிக விதிகளை அமல்படுத்துகிறார்கள், மேலும் அவர்களின் எல்லைகளுக்குள் நிலைத்தன்மையை உறுதி செய்கிறார்கள். கட்டளைகள் பொதுவாக குறிப்பிட்ட திரட்டுகளை நோக்கி இயக்கப்படுகின்றன.
- நிகழ்வு அங்காடி (விரும்பினால், ஆனால் நிகழ்வு ஆதாரங்களுடன் பொதுவானது): நிகழ்வு ஆதாரத்தையும் பயன்படுத்தும் அமைப்புகளில், கட்டளைகள் நிகழ்வுகளின் வரிசையில் விளைகின்றன. இந்த நிகழ்வுகள் மாநில மாற்றங்களின் மாற்ற முடியாத பதிவுகள் மற்றும் ஒரு நிகழ்வு கடையில் சேமிக்கப்படுகின்றன.
- எழுதுவதற்கான தரவு அங்காடி: இது ஒரு உறவு தரவுத்தளம், ஒரு NoSQL தரவுத்தளம் அல்லது ஒரு நிகழ்வு அங்காடியாக இருக்கலாம், எழுதுதல்களை திறமையாக கையாள்வதற்கு உகந்ததாக உள்ளது.
2. வினவல் பக்கம்
இந்த பக்கம் தரவு கோரிக்கைகளுக்கு சேவை செய்ய அர்ப்பணிக்கப்பட்டுள்ளது. இது பொதுவாக பின்வருவனவற்றை உள்ளடக்கியது:
- வினவல் கையாளுபவர்கள்: இவை வினவல்களைப் பெற்று செயலாக்கும் வகுப்புகள் அல்லது செயல்பாடுகள். அவை படிக்க உகந்த தரவு கடையிலிருந்து தரவை மீட்டெடுக்கின்றன.
- படித்தலுக்கான தரவு அங்காடி (படித்தல் மாதிரிகள்/திட்டங்கள்): இது ஒரு முக்கியமான அம்சம். படிப்பு கடை பெரும்பாலும் இயல்பாக்கப்பட்டது மற்றும் வினவல் செயல்திறனுக்காக குறிப்பாக உகந்ததாக உள்ளது. இது எழுதுதல் கடையை விட வேறு தரவுத்தள தொழில்நுட்பமாக இருக்கலாம், மேலும் அதன் தரவு கட்டளை பக்கத்தில் உள்ள நிலை மாற்றங்களிலிருந்து பெறப்படுகிறது. இந்த பெறப்பட்ட தரவு கட்டமைப்புகள் பெரும்பாலும் "படித்தல் மாதிரிகள்" அல்லது "திட்டங்கள்" என்று அழைக்கப்படுகின்றன.
3. ஒத்திசைவு பொறிமுறை
கட்டளை பக்கத்திலிருந்து வரும் மாநில மாற்றங்களுடன் படிப்பு மாதிரிகளை ஒத்திசைவாக வைத்திருக்க ஒரு பொறிமுறை தேவைப்படுகிறது. இது பெரும்பாலும் இதன் மூலம் அடையப்படுகிறது:
- நிகழ்வு வெளியீடு: ஒரு கட்டளை வெற்றிகரமாக நிலையை மாற்றியமைக்கும்போது, அது ஒரு நிகழ்வை வெளியிடுகிறது (எ.கா., "ஆணை உருவாக்கப்பட்டது", "பயனர் சுயவிவரம் புதுப்பிக்கப்பட்டது").
- நிகழ்வு கையாளுதல்/சந்தா செலுத்துதல்: கூறுகள் இந்த நிகழ்வுகளுக்கு சந்தா செலுத்துகின்றன மற்றும் படிப்பு மாதிரிகளை அதற்கேற்ப புதுப்பிக்கின்றன. எழுதுதல் பக்கத்துடன் படிப்பு பக்கம் எவ்வாறு சீராக இருக்கிறது என்பதற்கான மையமாகும்.
CQRS ஐ பின்பற்றுவதன் நன்மைகள்
CQRS ஐ செயல்படுத்துவது உங்கள் பைதான் பயன்பாடுகளுக்கு கணிசமான நன்மைகளைத் தரக்கூடும்:
1. மேம்படுத்தப்பட்ட அளவிடுதல்
இது ஒருவேளை மிக முக்கியமான நன்மை. படித்தல் மற்றும் எழுதுதல் மாதிரிகள் தனித்தனியாக இருப்பதால், அவற்றை சுயாதீனமாக அளவிட முடியும். உதாரணமாக, உங்கள் பயன்பாடு அதிக அளவு படித்தல் கோரிக்கைகளை அனுபவித்தால் (எ.கா., ஒரு மின் வணிக தளத்தில் தயாரிப்புகளை உலாவுகிறது), நீங்கள் எழுதுதல் உள்கட்டமைப்பை பாதிக்காமல் படிப்பு உள்கட்டமைப்பை அளவிடலாம். மாறாக, ஆணை செயலாக்கத்தில் அதிகரிப்பு இருந்தால், நீங்கள் கட்டளை பக்கத்திற்கு அதிக வளங்களை ஒதுக்கலாம்.
உலகளாவிய எடுத்துக்காட்டு: ஒரு உலகளாவிய செய்தி தளத்தை கருத்தில் கொள்ளுங்கள். கட்டுரைகளைப் படிக்கும் பயனர்களின் எண்ணிக்கை கருத்துகள் அல்லது கட்டுரைகளைச் சமர்ப்பிக்கும் பயனர்களின் எண்ணிக்கையை விடக் குறைவாக இருக்கும். CQRS படிப்பு தரவுத்தளங்களை மேம்படுத்துவதன் மூலமும், பயனர் சமர்ப்பிப்புகள் மற்றும் மிதவைக் கையாளுதலுக்கான சிறிய, ஆனால் அதிக சிக்கலான, எழுதுதல் உள்கட்டமைப்பிலிருந்து சுயாதீனமாக படிப்பு சேவையகங்களை அளவிடுவதன் மூலமும் மில்லியன் கணக்கான வாசகர்களுக்கு திறமையாக சேவை செய்ய தளத்தை அனுமதிக்கிறது.
2. மேம்படுத்தப்பட்ட செயல்திறன்
தரவு மீட்டெடுப்பதன் குறிப்பிட்ட தேவைகளுக்கு வினவல்களை மேம்படுத்த முடியும். இது பெரும்பாலும் படிக்கப்படாத பக்கத்தில் இயல்பாக்கப்பட்ட தரவு கட்டமைப்புகள் மற்றும் சிறப்பு தரவுத்தளங்களைப் பயன்படுத்துவதைக் குறிக்கிறது (எ.கா., உரை-கனமான வினவல்களுக்கான எலாஸ்டிக்ஸ் தேடல்), இது மிக வேகமான மறுமொழி நேரங்களுக்கு வழிவகுக்கிறது.
3. அதிகரித்த நெகிழ்வுத்தன்மை மற்றும் பராமரிப்பு
கவலைகளைப் பிரிப்பது குறியீட்டு தளத்தை சுத்தமாகவும் நிர்வகிக்க எளிதாகவும் ஆக்குகிறது. கட்டளை பக்கத்தில் பணிபுரியும் டெவலப்பர்கள் சிக்கலான படித்தல் மேம்பாடுகளைப் பற்றி கவலைப்படத் தேவையில்லை, மேலும் வினவல் பக்கத்தில் பணிபுரியும் டெவலப்பர்கள் திறமையான தரவு மீட்டெடுப்பதில் மட்டுமே கவனம் செலுத்த முடியும். இது மற்ற பக்கத்தை பாதிக்காமல் புதிய அம்சங்களை அறிமுகப்படுத்துவது அல்லது ஏற்கனவே உள்ளவற்றை மாற்றுவதை எளிதாக்குகிறது.
4. வெவ்வேறு தரவு தேவைகளுக்கு உகந்தது
எழுதுதல் பக்கம் பரிவர்த்தனை ஒருமைப்பாடு மற்றும் சிக்கலான வணிக தர்க்கத்திற்கு உகந்த தரவு கடையைப் பயன்படுத்தலாம், அதே நேரத்தில் படிப்பு பக்கம் வினவல், அறிக்கை மற்றும் பகுப்பாய்வுகளுக்கு உகந்த தரவு கடைகளை மேம்படுத்தலாம். இது சிக்கலான வணிக களங்களுக்கு குறிப்பாக சக்தி வாய்ந்தது.
5. நிகழ்வு ஆதாரத்திற்கான சிறந்த ஆதரவு
CQRS நிகழ்வு ஆதாரத்துடன் விதிவிலக்காக நன்றாக இணைகிறது. ஒரு நிகழ்வு ஆதார அமைப்பில், பயன்பாட்டு நிலைக்கு அனைத்து மாற்றங்களும் மாற்ற முடியாத நிகழ்வுகளின் வரிசையாக சேமிக்கப்படுகின்றன. கட்டளைகள் இந்த நிகழ்வுகளை உருவாக்குகின்றன, மேலும் இந்த நிகழ்வுகள் கட்டளைகளுக்கு (வணிக தர்க்கத்தைப் பயன்படுத்துவதற்கு) மற்றும் வினவல்களுக்கு (படிப்பு மாதிரிகளை உருவாக்க) தற்போதைய நிலையை உருவாக்க பயன்படுகின்றன. இந்த கலவையானது ஒரு சக்திவாய்ந்த தணிக்கை பாதையையும் தற்காலிக வினவல் திறன்களையும் வழங்குகிறது.
உலகளாவிய எடுத்துக்காட்டு: நிதி நிறுவனங்களுக்கு பெரும்பாலும் அனைத்து பரிவர்த்தனைகளின் முழுமையான, மாற்ற முடியாத தணிக்கை பாதை தேவைப்படுகிறது. நிகழ்வு ஆதாரமானது, CQRS உடன் இணைந்து, ஒவ்வொரு நிதி நிகழ்வையும் சேமிப்பதன் மூலம் இதை வழங்க முடியும் (எ.கா., "வைப்புத்தொகை", "பரிமாற்றம் முடிந்தது") மற்றும் இந்த வரலாற்றிலிருந்து படிப்பு மாதிரிகள் மீண்டும் கட்டியெழுப்ப அனுமதிக்கிறது, இது ஒரு முழுமையான மற்றும் சரிபார்க்கக்கூடிய பதிவை உறுதி செய்கிறது.
6. மேம்படுத்தப்பட்ட டெவலப்பர் சிறப்பானது
குழுக்கள் கட்டளை (டொமைன் லாஜிக், நிலைத்தன்மை) அல்லது வினவல் (தரவு மீட்டெடுப்பு, செயல்திறன்) அம்சங்களில் நிபுணத்துவம் பெறலாம், இது ஆழமான நிபுணத்துவத்திற்கும் திறமையான வளர்ச்சி பணிப்பாய்வுகளுக்கும் வழிவகுக்கிறது.
சவால்கள் மற்றும் கருத்தில் கொள்ள வேண்டியவை
CQRS குறிப்பிடத்தக்க நன்மைகளை வழங்கினாலும், அது ஒரு வெள்ளி புல்லட் அல்ல, அதன் சொந்த சவால்களுடன் வருகிறது:
1. அதிகரித்த சிக்கலானது
CQRS ஐ அறிமுகப்படுத்துவது இரண்டு தனித்துவமான மாதிரிகள், இரண்டு வெவ்வேறு தரவு கடைகள் மற்றும் ஒரு ஒத்திசைவு பொறிமுறையை நிர்வகிப்பதைக் குறிக்கிறது. இது ஒரு பாரம்பரிய, ஒருங்கிணைந்த மாதிரலை விட மிகவும் சிக்கலானதாக இருக்கலாம், குறிப்பாக எளிய பயன்பாடுகளுக்கு.
2. இறுதியில் நிலைத்தன்மை
படிப்பு மாதிரிகள் பொதுவாக கட்டளை பக்கத்திலிருந்து வெளியிடப்பட்ட நிகழ்வுகளின் அடிப்படையில் ஒத்திசைவற்ற முறையில் புதுப்பிக்கப்படுவதால், வினவல் முடிவுகளில் மாற்றங்கள் பிரதிபலிக்கப்படுவதற்கு முன்பு ஒரு சிறிய தாமதம் இருக்கலாம். இது இறுதியில் நிலைத்தன்மை என்று அழைக்கப்படுகிறது. எல்லா நேரங்களிலும் வலுவான நிலைத்தன்மை தேவைப்படும் பயன்பாடுகளுக்கு, CQRS க்கு கவனமாக வடிவமைப்பு தேவைப்படலாம் அல்லது பொருத்தமற்றதாக இருக்கலாம்.
உலகளாவிய கருத்தில்: நிகழ்நேர பங்கு வர்த்தகம் அல்லது முக்கியமான மருத்துவ அமைப்புகளைக் கையாளும் பயன்பாடுகளில், தரவு பிரதிபலிப்பில் ஒரு சிறிய தாமதமும் சிக்கலாக இருக்கலாம். டெவலப்பர்கள் இறுதியில் நிலைத்தன்மை அவர்களின் பயன்பாட்டு நிகழ்வுக்கு ஏற்றுக்கொள்ளத்தக்கதா என்பதை கவனமாக மதிப்பிட வேண்டும்.
3. கற்றல் வளைவு
டெவலப்பர்கள் CQRS இன் கோட்பாடுகளைப் புரிந்து கொள்ள வேண்டும், நிகழ்வு ஆதாரத்தை புரிந்து கொள்ள வேண்டும், மேலும் கூறுகள் இடையேயான ஒத்திசைவற்ற தகவல்தொடர்புகளை எவ்வாறு நிர்வகிப்பது. இந்த கருத்துக்களுடன் பழக்கமில்லாத குழுக்களுக்கு இது ஒரு கற்றல் வளைவைக் குறிக்கும்.
4. உள்கட்டமைப்பு மேல்நிலை
பல தரவு கடைகள், செய்தி வரிசைகள் மற்றும் விநியோகிக்கப்பட்ட அமைப்புகளை நிர்வகிப்பது செயல்பாட்டு சிக்கலையும் உள்கட்டமைப்பு செலவுகளையும் அதிகரிக்கும்.
5. நகல் செய்வதற்கான சாத்தியம்
கட்டளை மற்றும் வினவல் கையாளுபவர்கள் முழுவதும் வணிக தர்க்கத்தை நகலெடுப்பதைத் தவிர்க்க கவனமாக இருக்க வேண்டும், இது பராமரிப்பு சிக்கல்களுக்கு வழிவகுக்கும்.
பைத்தானில் CQRS ஐ செயல்படுத்துதல்
பைத்தானின் நெகிழ்வுத்தன்மை மற்றும் பணக்கார சுற்றுச்சூழல் அமைப்பு CQRS ஐ செயல்படுத்துவதற்கு ஏற்றது. சில பிற மொழிகளைப் போல பைத்தானில் ஒரு உலகளாவிய ஏற்றுக்கொள்ளப்பட்ட CQRS கட்டமைப்பு இல்லையென்றாலும், ஏற்கனவே உள்ள நூலகங்கள் மற்றும் நன்கு நிறுவப்பட்ட முறைகளைப் பயன்படுத்தி நீங்கள் ஒரு வலுவான CQRS அமைப்பை உருவாக்க முடியும்.
முக்கிய பைதான் நூலகங்கள் மற்றும் கருத்துக்கள்
- வலை கட்டமைப்புகள் (ஃப்ளாஸ்க், ஜாங்கோ, ஃபாஸ்ட்பி): இவை கட்டளைகள் மற்றும் வினவல்களைப் பெறுவதற்கான நுழைவு புள்ளியாக செயல்படும், பெரும்பாலும் REST API கள் அல்லது GraphQL எண்ட் பாயிண்ட்ஸ் மூலம்.
- செய்தி வரிசைகள் (RabbitMQ, Kafka, Redis Pub/Sub): கட்டளை மற்றும் வினவல் பக்கங்களுக்கு இடையிலான ஒத்திசைவற்ற தகவல்தொடர்புகளுக்கு அவசியம், குறிப்பாக நிகழ்வுகளை வெளியிடுதல் மற்றும் சந்தா செலுத்துவதற்கு.
- தரவுத்தளங்கள்:
- எழுது கடை: PostgreSQL, MySQL, MongoDB, அல்லது EventStoreDB போன்ற ஒரு பிரத்யேக நிகழ்வு கடை.
- படிக்க கடை: எலாஸ்டிக்ஸ் தேடல், PostgreSQL (இயல்பாக்கப்பட்ட காட்சிகளுக்கு), Redis (சேமிப்பு/எளிய தேடல்களுக்கு), அல்லது சிறப்பு நேரத் தொடர் தரவுத்தளங்கள் கூட.
- பொருள்-உறவு வரைபடங்கள் (ORM கள்) & தரவு வரைபடங்கள்: உறவு தரவுத்தளங்களுடன் தொடர்புகொள்வதற்கு SQLAlchemy, Peewee.
- டொமைன்-டிரிவன் வடிவமைப்பு (DDD) நூலகங்கள்: கண்டிப்பாக CQRS இல்லையென்றாலும், DDD கோட்பாடுகள் (திரட்டுகள், மதிப்பு பொருள்கள், டொமைன் நிகழ்வுகள்) மிகவும் நிரப்புத்தன்மையுடையவை.
python-dddபோன்ற நூலகங்கள் அல்லது உங்கள் சொந்த டொமைன் லேயரை உருவாக்குவது மிகவும் பயனுள்ளதாக இருக்கும். - நிகழ்வு கையாளுதல் நூலகங்கள்: நிகழ்வு பதிவு மற்றும் அனுப்புதலுக்கு உதவும் நூலகங்கள் அல்லது பைத்தானின் உள்ளமைக்கப்பட்ட நிகழ்வு வழிமுறைகளைப் பயன்படுத்தவும்.
விளக்க எடுத்துக்காட்டு: ஒரு எளிய மின் வணிக சூழ்நிலை
ஆணை வைப்பதற்கான எளிமைப்படுத்தப்பட்ட உதாரணத்தை கருத்தில் கொள்வோம்.
கட்டளை பக்கம்
1. கட்டளை:
class PlaceOrderCommand:
def __init__(self, customer_id, items, shipping_address):
self.customer_id = customer_id
self.items = items
self.shipping_address = shipping_address
2. கட்டளை கையாளுபவர்:
class OrderCommandHandler:
def __init__(self, order_repository, event_publisher):
self.order_repository = order_repository
self.event_publisher = event_publisher
def handle(self, command: PlaceOrderCommand):
# Business logic: Validate items, check inventory, calculate total, etc.
new_order = Order.create_from_command(command)
# Persist the order (to the write database)
self.order_repository.save(new_order)
# Publish domain event
order_placed_event = OrderPlacedEvent(order_id=new_order.id, customer_id=new_order.customer_id)
self.event_publisher.publish(order_placed_event)
return new_order.id # Indicate success, not the order itself
3. டொமைன் மாதிரி (எளிமைப்படுத்தப்பட்ட திரட்டு):
class Order:
def __init__(self, order_id, customer_id, items, status='PENDING'):
self.id = order_id
self.customer_id = customer_id
self.items = items
self.status = status
@staticmethod
def create_from_command(command: PlaceOrderCommand):
# Generate a unique ID (e.g., using UUID)
order_id = generate_unique_id()
return Order(order_id=order_id, customer_id=command.customer_id, items=command.items)
def mark_as_shipped(self):
if self.status == 'PENDING':
self.status = 'SHIPPED'
# Publish ShippingInitiatedEvent
else:
raise BusinessRuleViolation("Order cannot be shipped if not pending")
வினவல் பக்கம்
1. வினவல்:
class GetCustomerOrdersQuery:
def __init__(self, customer_id):
self.customer_id = customer_id
2. வினவல் கையாளுபவர்:
class CustomerOrderQueryHandler:
def __init__(self, read_model_repository):
self.read_model_repository = read_model_repository
def handle(self, query: GetCustomerOrdersQuery):
# Retrieve data from the read-optimized store
return self.read_model_repository.get_orders_by_customer(query.customer_id)
3. படிப்பு மாதிரி:
இது இயல்பாக்கப்பட்ட கட்டமைப்பாக இருக்கும், இது ஒரு ஆவணத் தரவுத்தளத்தில் சேமிக்கப்படலாம் அல்லது வாடிக்கையாளர் ஆணை மீட்டெடுப்பதற்காக உகந்த அட்டவணையில், காட்சிக்கு தேவையான புலங்களை மட்டுமே கொண்டுள்ளது.
class CustomerOrderReadModel:
def __init__(self, order_id, order_date, total_amount, status):
self.order_id = order_id
self.order_date = order_date
self.total_amount = total_amount
self.status = status
4. நிகழ்வு கேட்பவர்/சந்தாதாரர்:
இந்த கூறு OrderPlacedEvent க்காகக் கேட்டு, படிப்பு கடையில் CustomerOrderReadModel ஐ புதுப்பிக்கிறது.
class OrderReadModelUpdater:
def __init__(self, read_model_repository, order_repository):
self.read_model_repository = read_model_repository
self.order_repository = order_repository # To get full order details if needed
def on_order_placed(self, event: OrderPlacedEvent):
# Fetch necessary data from the write side or use data within the event
# For simplicity, let's assume event contains sufficient data or we can fetch it
order_details = self.order_repository.get(event.order_id) # If needed
read_model = CustomerOrderReadModel(
order_id=event.order_id,
order_date=order_details.creation_date, # Assume this is available
total_amount=order_details.total_amount, # Assume this is available
status=order_details.status
)
self.read_model_repository.save(read_model)
உங்கள் பைதான் திட்டத்தை கட்டமைத்தல்
ஒரு பொதுவான அணுகுமுறை என்னவென்றால், உங்கள் திட்டத்தை கட்டளை மற்றும் வினவல் பக்கங்களுக்கு தனித்துவமான தொகுதிகள் அல்லது கோப்பகங்களாக கட்டமைப்பது. இந்த பிரிப்பு தெளிவை பராமரிக்க மிகவும் முக்கியமானது:
domain/: முக்கிய டொமைன் நிறுவனங்கள், மதிப்பு பொருள்கள் மற்றும் திரட்டுகளைக் கொண்டுள்ளது.commands/: கட்டளை பொருள்கள் மற்றும் அவற்றின் கையாளுபவர்களை வரையறுக்கிறது.queries/: வினவல் பொருள்கள் மற்றும் அவற்றின் கையாளுபவர்களை வரையறுக்கிறது.events/: டொமைன் நிகழ்வுகளை வரையறுக்கிறது.infrastructure/: நிலைத்தன்மை (சேமிப்பிடங்கள்), செய்தி பேருந்துகள், வெளிப்புற சேவை ஒருங்கிணைப்புகளைக் கையாளுகிறது.read_models/: உங்கள் படிப்பு பக்கத்திற்கான தரவு கட்டமைப்புகளை வரையறுக்கிறது.api/அல்லதுinterfaces/: வெளிப்புற கோரிக்கைகளுக்கான நுழைவு புள்ளிகள் (எ.கா., REST எண்ட் பாயிண்ட்ஸ்).
CQRS செயல்படுத்துவதற்கான உலகளாவிய கருத்தில் கொள்ள வேண்டியவை
ஒரு உலகளாவிய சூழலில் CQRS ஐ செயல்படுத்தும்போது, பல காரணிகள் முக்கியமானவை:
1. தரவு நிலைத்தன்மை மற்றும் நகலெடுப்பு
விநியோகிக்கப்பட்ட படிப்பு மாதிரிகளுடன், வெவ்வேறு புவியியல் பிராந்தியங்களில் தரவு நிலைத்தன்மையை உறுதி செய்வது முக்கியம். இது புவியியல் ரீதியாக விநியோகிக்கப்பட்ட தரவுத்தளங்கள், நகலெடுப்பு உத்திகள் மற்றும் தாமதத்தை கவனமாக கருத்தில் கொள்வதை உள்ளடக்கியிருக்கலாம்.
உலகளாவிய எடுத்துக்காட்டு: ஒரு உலகளாவிய SaaS தளம் ஒரு பிராந்தியத்தில் எழுதுதல்களுக்கான முதன்மை தரவுத்தளத்தைப் பயன்படுத்தக்கூடும் மற்றும் உலகளவில் அதன் பயனர்களுக்கு நெருக்கமான பிராந்தியங்களுக்கு படிப்பு உகந்த தரவுத்தளங்களை நகலெடுக்கக்கூடும். இது உலகின் பல்வேறு பகுதிகளில் உள்ள பயனர்களுக்கான தாமதத்தை குறைக்கிறது.
2. நேர மண்டலங்கள் மற்றும் திட்டமிடல்
ஒத்திசைவற்ற செயல்பாடுகள் மற்றும் நிகழ்வு செயலாக்கம் வெவ்வேறு நேர மண்டலங்களுக்கு கணக்கு வைக்க வேண்டும். திட்டமிடப்பட்ட பணிகள் அல்லது நேர உணர்திறன் நிகழ்வு தூண்டுதல்கள் வெவ்வேறு உள்ளூர் நேரங்கள் தொடர்பான சிக்கல்களைத் தவிர்ப்பதற்கு கவனமாக நிர்வகிக்கப்பட வேண்டும்.
3. நாணயம் மற்றும் உள்ளூர்மயமாக்கல்
உங்கள் பயன்பாடு நிதி பரிவர்த்தனைகள் அல்லது பயனர் எதிர்கொள்ளும் தரவைக் கையாளுகிறதென்றால், CQRS உள்ளூர்மயமாக்கல் மற்றும் நாணய மாற்றங்களுக்கு இடமளிக்க வேண்டும். படிப்பு மாதிரிகள் வெவ்வேறு வட்டாரங்களுக்கு ஏற்ற பல்வேறு வடிவங்களில் தரவை சேமிக்க அல்லது காண்பிக்க வேண்டும்.
4. ஒழுங்குமுறை இணக்கம் (எ.கா., GDPR, CCPA)
CQRS, குறிப்பாக நிகழ்வு ஆதாரத்துடன் இணைந்து, தரவு தனியுரிமை விதிமுறைகளை பாதிக்கலாம். நிகழ்வுகளின் மாற்ற முடியாத தன்மை "மறக்கப்படுவதற்கான உரிமை" கோரிக்கைகளை நிறைவேற்றுவதை கடினமாக்கும். இணக்கத்தை உறுதிப்படுத்த கவனமான வடிவமைப்பு தேவைப்படுகிறது, ஒருவேளை நிகழ்வுகளுக்குள் தனிப்பட்ட முறையில் அடையாளம் காணக்கூடிய தகவல்களை (PII) குறியாக்கம் செய்வதன் மூலம் அல்லது நீக்கப்பட வேண்டிய பயனர்-குறிப்பிட்ட தரவிற்கான தனி, மாற்றக்கூடிய தரவு கடைகளை வைத்திருப்பதன் மூலம்.
5. உள்கட்டமைப்பு மற்றும் வரிசைப்படுத்தல்
உலகளாவிய வரிசைப்படுத்தல்களில் பெரும்பாலும் உள்ளடக்க விநியோக நெட்வொர்க்குகள் (சிடிஎன்), சுமை சமப்படுத்திகள் மற்றும் விநியோகிக்கப்பட்ட செய்தி வரிசைகள் உள்ளிட்ட சிக்கலான உள்கட்டமைப்பு ஆகியவை அடங்கும். இந்த உள்கட்டமைப்புக்குள் CQRS கூறுகள் எவ்வாறு தொடர்பு கொள்கின்றன என்பதைப் புரிந்துகொள்வது நம்பகமான செயல்திறனுக்கான திறவுகோலாகும்.
6. குழு ஒத்துழைப்பு
சிறப்பு பாத்திரங்களுடன் (கட்டளை-மையப்படுத்தப்பட்டது எதிராக வினவல்-மையப்படுத்தப்பட்டது), குழுக்களிடையே பயனுள்ள தகவல் தொடர்பு மற்றும் ஒத்துழைப்பை வளர்ப்பது ஒரு ஒருங்கிணைந்த அமைப்புக்கு அவசியம்.
நிகழ்வு ஆதாரத்துடன் CQRS: ஒரு சக்திவாய்ந்த கலவை
CQRS மற்றும் நிகழ்வு ஆதாரங்கள் அடிக்கடி ஒன்றாக விவாதிக்கப்படுகின்றன, ஏனெனில் அவை ஒருவருக்கொருவர் அழகாக நிரப்புகின்றன. நிகழ்வு ஆதாரமானது பயன்பாட்டு நிலைக்கு ஒவ்வொரு மாற்றத்தையும் மாற்ற முடியாத நிகழ்வாகக் கருதுகிறது. இந்த நிகழ்வுகளின் வரிசை பயன்பாட்டு நிலையின் முழு வரலாற்றையும் உருவாக்குகிறது.
- கட்டளைகள் நிகழ்வுகளை உருவாக்குகின்றன.
- நிகழ்வுகள் ஒரு நிகழ்வு கடையில் சேமிக்கப்படுகின்றன.
- திரட்டுகள் நிகழ்வுகளை மீண்டும் இயக்குவதன் மூலம் அவற்றின் நிலையை மீண்டும் கட்டியெழுப்புகின்றன.
- படிப்பு மாதிரிகள் (திட்டங்கள்) நிகழ்வுகளுக்கு சந்தா செலுத்துவதன் மூலமும் மேம்படுத்தப்பட்ட தரவு கடைகளை புதுப்பிப்பதன் மூலமும் கட்டப்பட்டுள்ளன.
இந்த அணுகுமுறை அனைத்து மாற்றங்களின் தணிக்கை பதிவை வழங்குகிறது, நிகழ்வுகளை மீண்டும் இயக்குவதன் மூலம் பிழைத்திருத்தலை எளிதாக்குகிறது, மேலும் சக்திவாய்ந்த தற்காலிக வினவல்களை செயல்படுத்துகிறது (எ.கா., "தேதி எக்ஸ் அன்று ஆணை அமைப்பின் நிலை என்ன?").
எப்போது CQRS ஐ கருத்தில் கொள்ள வேண்டும்
CQRS ஒவ்வொரு திட்டத்திற்கும் ஏற்றது அல்ல. இது மிகவும் பயனுள்ளதாக இருக்கிறது:
- சிக்கலான களங்கள்: ஒரு மாதிரியில் வணிக தர்க்கம் சிக்கலானதாகவும் நிர்வகிக்க கடினமாகவும் இருக்கும்.
- அதிக படித்தல்/எழுதுதல் போட்டி கொண்ட பயன்பாடுகள்: படித்தல் மற்றும் எழுதுதல் செயல்பாடுகளுக்கு கணிசமாக வேறுபட்ட செயல்திறன் தேவைகள் இருக்கும்போது.
- அதிக அளவிலான அளவிடுதல் தேவைப்படும் அமைப்புகள்: படித்தல் மற்றும் எழுதுதல் செயல்பாடுகளின் சுயாதீன அளவிடுதல் முக்கியமான இடத்தில்.
- நிகழ்வு ஆதாரத்திலிருந்து பயனடையும் பயன்பாடுகள்: தணிக்கை பாதைகள், தற்காலிக வினவல்கள் அல்லது மேம்பட்ட பிழைத்திருத்தத்திற்கு.
- அறிக்கை மற்றும் பகுப்பாய்வு தேவைகள்: பரிவர்த்தனை செயல்திறனை பாதிக்காமல் பகுப்பாய்வுக்கான தரவை திறம்பட பிரித்தெடுப்பது முக்கியம்.
எளிமையான CRUD பயன்பாடுகள் அல்லது சிறிய உள் கருவிகளுக்கு, CQRS இன் சேர்க்கப்பட்ட சிக்கலானது அதன் நன்மைகளை விட அதிகமாக இருக்கலாம்.
முடிவுரை
கட்டளை வினவல் பொறுப்பு பிரிவினை (CQRS) என்பது ஒரு சக்திவாய்ந்த கட்டடக்கலை வடிவமாகும், இது மிகவும் அளவிடக்கூடிய, செயல்திறன் மற்றும் பராமரிக்கக்கூடிய பைதான் பயன்பாடுகளுக்கு வழிவகுக்கும். மாநிலத்தை மாற்றும் கட்டளைகளை தரவு மீட்டெடுக்கும் வினவல்களிலிருந்து தெளிவாகப் பிரிப்பதன் மூலம், டெவலப்பர்கள் ஒவ்வொரு அம்சத்தையும் சுயாதீனமாக மேம்படுத்தலாம் மற்றும் உலகளாவிய பயனர் தளத்தின் தேவைகளை சிறப்பாக கையாளக்கூடிய அமைப்புகளை உருவாக்கலாம்.
இது சிக்கலானது மற்றும் இறுதியில் நிலைத்தன்மையைக் கருத்தில் கொள்வதால், பெரிய, அதிக சிக்கலான அல்லது அதிக பரிவர்த்தனை அமைப்புகளுக்கான நன்மைகள் கணிசமானவை. வலுவான, நவீன பயன்பாடுகளை உருவாக்க விரும்பும் பைதான் டெவலப்பர்களுக்கு, குறிப்பாக நிகழ்வு ஆதாரத்துடன் இணைந்து CQRS ஐப் புரிந்துகொள்வது மற்றும் மூலோபாயமாகப் பயன்படுத்துவது என்பது ஒரு மதிப்புமிக்க திறமையாகும், இது புதுமையை இயக்கி உலகளாவிய மென்பொருள் சந்தையில் நீண்டகால வெற்றியை உறுதி செய்யும். இது அர்த்தமுள்ள இடத்தில் மாதிரியைத் தழுவுங்கள், எப்போதும் தெளிவு, பராமரிப்பு மற்றும் உலகளவில் உங்கள் பயனர்களின் குறிப்பிட்ட தேவைகளுக்கு முன்னுரிமை கொடுங்கள்.