கசாண்ட்ரா. ஆரக்கிள் மட்டும் தெரிந்தால் எப்படி சாகக்கூடாது

ஹே ஹப்ர்.

என் பெயர் மிஷா புட்ரிமோவ், நான் உங்களுக்கு கசாண்ட்ராவைப் பற்றி கொஞ்சம் சொல்ல விரும்புகிறேன். NoSQL தரவுத்தளங்களை ஒருபோதும் சந்திக்காதவர்களுக்கு எனது கதை பயனுள்ளதாக இருக்கும் - இதில் நீங்கள் தெரிந்து கொள்ள வேண்டிய பல செயல்படுத்தல் அம்சங்கள் மற்றும் ஆபத்துகள் உள்ளன. நீங்கள் Oracle அல்லது வேறு எந்த தொடர்புடைய தரவுத்தளத்தைத் தவிர வேறு எதையும் பார்க்கவில்லை என்றால், இவை உங்கள் உயிரைக் காப்பாற்றும்.

கசாண்ட்ராவில் என்ன நல்லது? இது ஒரு NoSQL தரவுத்தளமாகும், இது ஒரு தோல்வியின்றி நன்றாக அளவிடப்படுகிறது. சில தரவுத்தளத்திற்கு நீங்கள் இரண்டு டெராபைட்களைச் சேர்க்க வேண்டும் என்றால், வளையத்தில் முனைகளைச் சேர்க்கவும். அதை மற்றொரு தரவு மையத்திற்கு விரிவாக்கவா? கிளஸ்டரில் முனைகளைச் சேர்க்கவும். செயலாக்கப்பட்ட RPS ஐ அதிகரிக்கவா? கிளஸ்டரில் முனைகளைச் சேர்க்கவும். இது எதிர் திசையிலும் செயல்படுகிறது.

கசாண்ட்ரா. ஆரக்கிள் மட்டும் தெரிந்தால் எப்படி சாகக்கூடாது

அவள் வேறு எதில் நல்லவள்? இது பல கோரிக்கைகளை கையாள்வது பற்றியது. ஆனால் நிறைய என்பது எவ்வளவு? வினாடிக்கு 10, 20, 30, 40 ஆயிரம் கோரிக்கைகள் அதிகம் இல்லை. பதிவு செய்ய வினாடிக்கு 100 ஆயிரம் கோரிக்கைகள் - கூட. வினாடிக்கு 2 மில்லியன் கோரிக்கைகளை வைத்திருப்பதாகக் கூறிய நிறுவனங்கள் உள்ளன. அவர்கள் ஒருவேளை நம்ப வேண்டும்.

கொள்கையளவில், கசாண்ட்ராவுக்கு தொடர்புடைய தரவுகளிலிருந்து ஒரு பெரிய வித்தியாசம் உள்ளது - இது அவர்களுக்கு ஒத்ததாக இல்லை. மேலும் இதை நினைவில் கொள்வது மிகவும் முக்கியம்.

ஒரே மாதிரியாகத் தோன்றும் அனைத்தும் ஒரே மாதிரியாக வேலை செய்யாது

ஒருமுறை ஒரு சக ஊழியர் என்னிடம் வந்து கேட்டார்: “இங்கே ஒரு CQL Cassandra வினவல் மொழி உள்ளது, அதில் ஒரு தேர்ந்தெடுக்கப்பட்ட அறிக்கை உள்ளது, அதில் எங்கே உள்ளது, உள்ளது மற்றும் உள்ளது. நான் கடிதங்கள் எழுதுகிறேன், அது வேலை செய்யாது. ஏன்?". கசாண்ட்ராவை ஒரு தொடர்புடைய தரவுத்தளமாக கருதுவது வன்முறை தற்கொலைக்கான சரியான வழியாகும். நான் அதை விளம்பரப்படுத்தவில்லை, அது ரஷ்யாவில் தடைசெய்யப்பட்டுள்ளது. நீங்கள் ஏதோ தவறாக வடிவமைப்பீர்கள்.

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

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

Map<RowKey, SortedMap<ColumnKey, ColumnValue>>

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

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

கசாண்ட்ரா. ஆரக்கிள் மட்டும் தெரிந்தால் எப்படி சாகக்கூடாது

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

CREATE TABLE users (
	user_id uu id,
	name text,
	year int,
	salary float,
	PRIMARY KEY(user_id)

)

இந்த வழக்கில் முதன்மை விசை ஒரு நெடுவரிசையைக் கொண்டுள்ளது, மேலும் இது பகிர்வு விசையும் கூட.

எங்கள் பயனர்கள் எவ்வாறு செயல்படுவார்கள்? சிலர் ஒரு முனைக்கும், சிலர் மற்றொரு முனைக்கும், சிலர் மூன்றாவது முனைக்கும் செல்வார்கள். இதன் விளைவாக ஒரு சாதாரண ஹாஷ் அட்டவணை, இது வரைபடம் என்றும் அழைக்கப்படுகிறது, இது பைத்தானில் அகராதி என்றும் அழைக்கப்படுகிறது அல்லது ஒரு எளிய விசை மதிப்பு அமைப்பு, அதில் இருந்து நாம் அனைத்து மதிப்புகளையும் படிக்கலாம், விசை மூலம் எழுதலாம்.

கசாண்ட்ரா. ஆரக்கிள் மட்டும் தெரிந்தால் எப்படி சாகக்கூடாது

தேர்ந்தெடு: அனுமதிக்கும் போது வடிகட்டுதல் முழு ஸ்கேன் ஆக மாறும் அல்லது என்ன செய்யக்கூடாது

சில தேர்ந்தெடுக்கப்பட்ட அறிக்கையை எழுதுவோம்: select * from users where, userid = . இது ஆரக்கிளில் உள்ளதைப் போல மாறிவிடும்: நாங்கள் தேர்ந்தெடுத்ததை எழுதுகிறோம், நிபந்தனைகளைக் குறிப்பிடுகிறோம் மற்றும் எல்லாம் வேலை செய்கிறது, பயனர்கள் அதைப் பெறுகிறார்கள். ஆனால், எடுத்துக்காட்டாக, ஒரு குறிப்பிட்ட ஆண்டு பிறந்த பயனரை நீங்கள் தேர்ந்தெடுத்தால், கோரிக்கையை நிறைவேற்ற முடியாது என்று கசாண்ட்ரா புகார் கூறுகிறார். பிறந்த ஆண்டைப் பற்றிய தரவை எவ்வாறு விநியோகிக்கிறோம் என்பது பற்றி அவளுக்கு எதுவும் தெரியாது என்பதால் - அவளிடம் ஒரே ஒரு நெடுவரிசை மட்டுமே சாவியாகக் குறிப்பிடப்பட்டுள்ளது. அப்போது அவள், “சரி, இந்த கோரிக்கையை என்னால் இன்னும் நிறைவேற்ற முடியும். வடிகட்ட அனுமதி சேர்." நாங்கள் கட்டளையைச் சேர்க்கிறோம், எல்லாம் வேலை செய்கிறது. இந்த நேரத்தில் பயங்கரமான ஒன்று நடக்கிறது.

சோதனைத் தரவை இயக்கும்போது, ​​எல்லாம் சரியாகிவிடும். உற்பத்தியில் நீங்கள் ஒரு வினவலைச் செயல்படுத்தும்போது, ​​எங்களிடம், எடுத்துக்காட்டாக, 4 மில்லியன் பதிவுகள் இருந்தால், எல்லாம் எங்களுக்கு மிகவும் நல்லதல்ல. ஏனெனில் அனுமதி வடிகட்டுதல் என்பது கசாண்ட்ராவை இந்த டேபிளில் இருந்து எல்லா முனைகளிலிருந்தும் அனைத்து தரவு மையங்களிலிருந்தும் (இந்த கிளஸ்டரில் பல இருந்தால்) சேகரிக்க அனுமதிக்கும் கட்டளையாகும். இது முழு ஸ்கேனின் அனலாக் ஆகும், மேலும் யாரும் இதில் மகிழ்ச்சியடைவதில்லை.

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

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

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

CREATE TABLE users_by_year_salary_id (
	user_id uuid,
	name text,
	year int,
	salary float,
	PRIMARY KEY((year), salary, user_id)

முதன்மை விசை உத்தரவுக்கு கவனம் செலுத்துங்கள்; அதன் முதல் வாதம் (எங்கள் விஷயத்தில், ஆண்டு) எப்போதும் பகிர்வு விசையாகும். இது ஒன்று அல்லது அதற்கு மேற்பட்ட நெடுவரிசைகளைக் கொண்டிருக்கலாம், அது ஒரு பொருட்டல்ல. பல நெடுவரிசைகள் இருந்தால், அதை மீண்டும் அடைப்புக்குறிக்குள் அகற்ற வேண்டும், இதனால் மொழி முன்செயலி இது முதன்மை விசை என்பதை புரிந்து கொள்ள வேண்டும், மேலும் மற்ற அனைத்து நெடுவரிசைகளும் கிளஸ்டரிங் விசையாகும். இந்த வழக்கில், அவை தோன்றும் வரிசையில் ஒப்பீட்டாளரில் அனுப்பப்படும். அதாவது, முதல் நெடுவரிசை மிகவும் முக்கியமானது, இரண்டாவது குறைவான முக்கியத்துவம் வாய்ந்தது, மற்றும் பல. எடுத்துக்காட்டாக, தரவு வகுப்புகளுக்கான புலங்களுக்குச் சமம்: நாங்கள் எழுதுவது எப்படி: புலங்களை நாங்கள் பட்டியலிடுகிறோம், மேலும் அவற்றில் எது பெரியது மற்றும் சிறியது என்று எழுதுகிறோம். கசாண்ட்ராவில், இவை, ஒப்பீட்டளவில், தரவு வகுப்பின் புலங்கள், அதற்கு எழுதப்பட்ட சமங்கள் பயன்படுத்தப்படும்.

நாங்கள் வரிசைப்படுத்தி கட்டுப்பாடுகளை விதிக்கிறோம்

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

கசாண்ட்ரா. ஆரக்கிள் மட்டும் தெரிந்தால் எப்படி சாகக்கூடாது

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

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

எந்தவொரு தெளிவற்ற சூழ்நிலையிலும், புதிய அட்டவணையை உருவாக்கவும்

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

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

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

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

பகிர்வுக்கான விசைகளைத் தேர்ந்தெடுக்கிறோம், இதனால் அவை சாதாரணமாக விநியோகிக்கப்படும். எங்கள் விசைகளின் ஹாஷ் ஒரு குறுகிய வரம்பிற்குள் வருவதை நாங்கள் விரும்பவில்லை. அதாவது, மேலே உள்ள உதாரணத்தில் பிறந்த வருடம் ஒரு மோசமான உதாரணம். இன்னும் துல்லியமாக, எங்கள் பயனர்கள் பொதுவாக பிறந்த வருடத்தில் விநியோகிக்கப்படுவது நல்லது, மேலும் 5 ஆம் வகுப்பு மாணவர்களைப் பற்றி பேசினால் மோசமானது - அங்கு பகிர்வு மிகவும் நன்றாக இருக்காது.

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

மற்றும் மிக முக்கியமான விஷயம்: ஒரே தரவை 100 வெவ்வேறு வழிகளில் மீட்டெடுக்க வேண்டும் என்றால், எங்களிடம் 100 வெவ்வேறு அட்டவணைகள் இருக்கும்.

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

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