2.1 NoSQL என்ற சொல்லின் தோற்றம்

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

இந்த வார்த்தையின் மிகவும் சுவாரஸ்யமான விஷயம் என்னவென்றால், இது 90 களின் பிற்பகுதியில் முதன்முதலில் பயன்படுத்தப்பட்ட போதிலும், அது இப்போது 2009 ஆம் ஆண்டின் மத்தியில் பயன்படுத்தப்படும் வடிவத்தில் மட்டுமே உண்மையான பொருளைப் பெற்றது. ஆரம்பத்தில், இது ஒரு திறந்த பெயராக இருந்தது. கார்லோ ஸ்ட்ரோஸியால் உருவாக்கப்பட்ட மூல தரவுத்தளம், இது அனைத்து தரவையும் ASCII கோப்புகளாகச் சேமித்து, தரவை அணுக SQLக்குப் பதிலாக ஷெல் ஸ்கிரிப்ட்களைப் பயன்படுத்தியது. அதன் தற்போதைய வடிவத்தில் "NoSQL" உடன் எந்த தொடர்பும் இல்லை.

ஜூன் 2009 இல் ஜோஹன் ஆஸ்கார்சன் IT சேமிப்பு மற்றும் செயலாக்க சந்தையில் புதிய போக்குகளைப் பற்றி விவாதிக்க சான் பிரான்சிஸ்கோவில் ஒரு கூட்டத்தை ஏற்பாடு செய்தார். பிக்டேபிள் மற்றும் டைனமோ போன்ற புதிய ஓப்பன் சோர்ஸ் தயாரிப்புகள் சந்திப்புக்கான முக்கிய தூண்டுதலாக இருந்தது. ஒரு சந்திப்புக்கான பிரகாசமான அடையாளத்திற்கு, ட்விட்டர் ஹேஷ்டேக்கில் சரியாகப் பொருந்தக்கூடிய ஒரு திறமையான மற்றும் சுருக்கமான வார்த்தையைக் கண்டுபிடிப்பது அவசியம். இந்த விதிமுறைகளில் ஒன்று எரிக் எவன்ஸால் RackSpace - "NoSQL" இலிருந்து முன்மொழியப்பட்டது. இந்த வார்த்தை ஒரே ஒரு கூட்டத்திற்காக மட்டுமே திட்டமிடப்பட்டது மற்றும் ஆழமான சொற்பொருள் சுமை இல்லை, ஆனால் அது ஒரு வைரஸ் விளம்பரம் போல உலகளாவிய நெட்வொர்க் முழுவதும் பரவியது மற்றும் IT துறையில் ஒரு முழுப் போக்கின் உண்மையான பெயராக மாறியது. மூலம், வோல்ட்மார்ட் (அமேசான் டைனமோ குளோன்), கசாண்ட்ரா, ஹெச்பேஸ் (கூகுள் பிக்டேபிளின் ஒப்புமைகள்), ஹைபர்டேபிள், கூச்டிபி, மோங்கோடிபி ஆகியோர் மாநாட்டில் பேசினர்.

"NoSQL" என்ற சொல் முற்றிலும் தன்னிச்சையானது மற்றும் பொதுவாக ஏற்றுக்கொள்ளப்பட்ட வரையறை அல்லது அறிவியல் நிறுவனத்தைக் கொண்டிருக்கவில்லை என்பதை மீண்டும் வலியுறுத்துவது மதிப்பு. இந்த பெயர் தொடர்புடைய தரவுத்தளங்களிலிருந்து விலகி IT வளர்ச்சியின் திசையன்களை வகைப்படுத்துகிறது. SQL இல்லை என்பதன் நேரடி வரையறைக்கு ஆதரவாளர்கள் இருந்தாலும், இது SQL மட்டும் அல்ல. பிரமோத் சடலாஜ் மற்றும் மார்ட்டின் ஃபோலர் ஆகியோர் தங்கள் சமீபத்திய புத்தகமான "NoSQL டிஸ்டில்டு" இல் NoSQL உலகத்தைப் பற்றிய அறிவை தொகுத்து முறைப்படுத்த முயன்றனர்.

2.2 NoSQL தரவுத்தளங்களின் அடிப்படை பண்புகள்

அனைத்து NoSQL க்கும் சில பொதுவான பண்புகள் உள்ளன, ஏனெனில் பல பன்முக அமைப்புகள் இப்போது NoSQL லேபிளின் கீழ் மறைக்கப்பட்டுள்ளன (ஒருவேளை மிகவும் முழுமையான பட்டியலை http://nosql-database.org/ இல் காணலாம்). பல குணாதிசயங்கள் குறிப்பிட்ட NoSQL தரவுத்தளங்களுக்கு மட்டுமே தனித்தன்மை வாய்ந்தவை, பட்டியலிடும்போது இதை கண்டிப்பாக குறிப்பிடுவேன்.

1. SQL பயன்படுத்தப்படவில்லை

அதாவது ANSI SQL DML, ஏனெனில் பல தரவுத்தளங்கள் நன்கு அறியப்பட்ட விருப்பமான தொடரியல் போன்ற வினவல் மொழிகளைப் பயன்படுத்த முயற்சி செய்கின்றன, ஆனால் யாரும் அதை முழுமையாக செயல்படுத்த முடியவில்லை மற்றும் வெற்றிபெற வாய்ப்பில்லை. SQL ஐ செயல்படுத்த முயற்சிப்பதாக வதந்தியான ஸ்டார்ட்அப்கள் இருந்தாலும், எடுத்துக்காட்டாக ஹேடப்பில் ( http://www.drawntoscalehq.com/ மற்றும் http://www.hadapt.com/ ).

2. கட்டமைக்கப்படாதது (திட்டமில்லாது)

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

எடுத்துக்காட்டாக, மோங்கோடிபியில் ஒரு புலத்தை மறுபெயரிடும்போது:

BasicDBObject order = new BasicDBObject();
order.put("date", orderDate); // this field was a long time ago
order.put("totalSum", total); // before we just used "sum"

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

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

BasicDBObject order = new BasicDBObject();
Double totalSum = order.getDouble("sum"); // This is the old model
if (totalSum  == null)
totalSum = order.getDouble("totalSum"); // This is the updated model

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

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

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

(இனிமேல், நாம் முக்கியமாக முக்கிய மதிப்பு, ஆவணம் மற்றும் நெடுவரிசை-குடும்ப தரவுத்தளங்களைப் பற்றி பேசுகிறோம், வரைபட தரவுத்தளங்களில் இந்த பண்புகள் இல்லை)

2.3 மொத்த வடிவில் தரவுகளின் பிரதிநிதித்துவம் (திரள்கள்)

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

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

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

இரண்டு அணுகுமுறைகளின் நன்மை தீமைகளையும் ஒரு அட்டவணையில் தொகுக்க முயற்சித்தேன்: