தரவுத்தள வடிவமைப்பு அடிப்படைகள் - PostgreSQL, Cassandra மற்றும் MongoDB ஆகியவற்றை ஒப்பிடுதல்

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

தரவுத்தள வடிவமைப்பு அடிப்படைகள் - PostgreSQL, Cassandra மற்றும் MongoDB ஆகியவற்றை ஒப்பிடுதல்

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

இந்த கட்டுரையின் நோக்கம், பயன்பாட்டு தரவு மாடலிங் சூழலில் SQL மற்றும் NoSQL இடையே சரியான தேர்வு செய்ய பயன்பாட்டு டெவலப்பர்களுக்கு உதவுவதாகும். ஒரு SQL தரவுத்தளமான PostgreSQL மற்றும் இரண்டு NoSQL தரவுத்தளங்கள், Cassandra மற்றும் MongoDB, அட்டவணைகளை உருவாக்குதல், அவற்றை நிரப்புதல், அட்டவணையில் இருந்து தரவைப் படித்தல் மற்றும் அதை நீக்குதல் போன்ற தரவுத்தள வடிவமைப்பின் அடிப்படைகளை உள்ளடக்குவதற்குப் பார்ப்போம். அடுத்த கட்டுரையில், குறியீடுகள், பரிவர்த்தனைகள், JOINகள், TTL வழிகாட்டுதல்கள் மற்றும் JSON-அடிப்படையிலான தரவுத்தள வடிவமைப்பு ஆகியவற்றைப் பார்ப்போம்.

SQL மற்றும் NoSQL க்கு என்ன வித்தியாசம்?

SQL தரவுத்தளங்கள் ACID பரிவர்த்தனை உத்தரவாதங்கள் மூலம் பயன்பாட்டு நெகிழ்வுத்தன்மையை அதிகரிக்கின்றன, அத்துடன் ஏற்கனவே உள்ள இயல்பான தொடர்புடைய தரவுத்தள மாதிரிகளின் மேல் எதிர்பாராத வழிகளில் JOINகளைப் பயன்படுத்தி தரவை வினவுவதற்கான அவற்றின் திறனையும் அதிகரிக்கின்றன.

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

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

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

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

NoSQL இல் தரவு மாதிரியாக்கம் SQL இலிருந்து எவ்வாறு வேறுபடுகிறது என்பதை பின்வரும் அட்டவணை காட்டுகிறது.

தரவுத்தள வடிவமைப்பு அடிப்படைகள் - PostgreSQL, Cassandra மற்றும் MongoDB ஆகியவற்றை ஒப்பிடுதல்

SQL மற்றும் NoSQL: இரண்டும் ஏன் தேவை?

Amazon.com, Netflix, Uber மற்றும் Airbnb போன்ற அதிக எண்ணிக்கையிலான பயனர்களைக் கொண்ட நிஜ-உலகப் பயன்பாடுகள், சிக்கலான, பன்முகப் பணிகளைச் செய்வதில் பணிபுரிகின்றன. எடுத்துக்காட்டாக, Amazon.com போன்ற இ-காமர்ஸ் பயன்பாட்டிற்கு பயனர் தகவல், தயாரிப்புகள், ஆர்டர்கள், விலைப்பட்டியல்கள் போன்ற இலகுரக, அதிக முக்கியமான தரவைச் சேமித்து, தயாரிப்பு மதிப்புரைகள், ஆதரவுச் செய்திகள், பயனர் செயல்பாடு, போன்ற கனமான, குறைவான உணர்திறன் கொண்ட தரவுகளைச் சேமிக்க வேண்டும். பயனர் மதிப்புரைகள் மற்றும் பரிந்துரைகள். இயற்கையாகவே, இந்தப் பயன்பாடுகள் குறைந்தபட்சம் ஒரு NoSQL தரவுத்தளத்துடன் குறைந்தபட்சம் ஒரு SQL தரவுத்தளத்தை நம்பியுள்ளன. குறுக்கு பிராந்திய மற்றும் உலகளாவிய அமைப்புகளில், ஒரு குறிப்பிட்ட பிராந்தியத்தில் இயங்கும் நம்பகமான மூல SQL தரவுத்தளத்தில் சேமிக்கப்பட்ட தரவுகளுக்கான புவி-விநியோக கேச் என NoSQL தரவுத்தளம் செயல்படுகிறது.

YugaByte DB SQL மற்றும் NoSQL ஐ எவ்வாறு இணைக்கிறது?

பதிவு சார்ந்த கலப்பு சேமிப்பக இயந்திரம், தானாக ஷார்டிங், துண்டிக்கப்பட்ட விநியோகிக்கப்பட்ட ஒருமித்த பிரதி மற்றும் ACID விநியோகிக்கப்பட்ட பரிவர்த்தனைகள் (Google ஸ்பேனரால் ஈர்க்கப்பட்டது), YugaByte DB ஆனது NoSQL (Cassandra & Redis) உடன் ஒரே நேரத்தில் இணக்கமான உலகின் முதல் திறந்த மூல தரவுத்தளமாகும். SQL (PostgreSQL). கீழே உள்ள அட்டவணையில் காட்டப்பட்டுள்ளபடி, YCQL, YugaByte DB API, Cassandra உடன் இணக்கமானது, ஒற்றை மற்றும் பல-முக்கிய ACID பரிவர்த்தனைகள் மற்றும் உலகளாவிய இரண்டாம் நிலை குறியீடுகளை NoSQL API இல் சேர்க்கிறது, இதன் மூலம் பரிவர்த்தனை NoSQL தரவுத்தளங்களின் சகாப்தத்தை உருவாக்குகிறது. கூடுதலாக, YCQL, PostgreSQL உடன் இணக்கமான YugaByte DB API, SQL API க்கு நேரியல் எழுதும் அளவீடு மற்றும் தானியங்கி தவறு சகிப்புத்தன்மையின் கருத்துகளைச் சேர்க்கிறது, விநியோகிக்கப்பட்ட SQL தரவுத்தளங்களை உலகிற்கு கொண்டு வருகிறது. YugaByte DB என்பது பரிவர்த்தனை இயல்புடையது என்பதால், NoSQL API இப்போது பணி-முக்கியமான தரவுகளின் சூழலில் பயன்படுத்தப்படலாம்.

தரவுத்தள வடிவமைப்பு அடிப்படைகள் - PostgreSQL, Cassandra மற்றும் MongoDB ஆகியவற்றை ஒப்பிடுதல்

கட்டுரையில் முன்பு கூறியது போல் "YSQL ஐ அறிமுகப்படுத்துகிறது: YugaByte DBக்கு ஒரு PostgreSQL இணக்கமான விநியோகிக்கப்பட்ட SQL API", YugaByte DB இல் SQL அல்லது NoSQL க்கு இடையேயான தேர்வு முற்றிலும் அடிப்படை பணிச்சுமையின் பண்புகளைப் பொறுத்தது:

  • உங்கள் முதன்மைப் பணிச்சுமை பல-முக்கிய JOIN செயல்பாடுகளாக இருந்தால், YSQL ஐத் தேர்ந்தெடுக்கும்போது, ​​உங்கள் விசைகள் பல முனைகளில் விநியோகிக்கப்படலாம் என்பதைப் புரிந்து கொள்ளுங்கள், இதன் விளைவாக அதிக தாமதம் மற்றும்/அல்லது NoSQL ஐ விட குறைவான செயல்திறன் கிடைக்கும்.
  • இல்லையெனில், இரண்டு NoSQL API களில் ஒன்றைத் தேர்வுசெய்யவும், ஒரு நேரத்தில் ஒரு முனையில் இருந்து வினவல்களின் விளைவாக நீங்கள் சிறந்த செயல்திறனைப் பெறுவீர்கள் என்பதை மனதில் வைத்துக்கொள்ளவும். ஒரே நேரத்தில் பல பணிச்சுமைகளை நிர்வகிக்க வேண்டிய நிஜ-உலக, சிக்கலான பயன்பாடுகளுக்கான ஒற்றை செயல்பாட்டு தரவுத்தளமாக YugaByte DB செயல்பட முடியும்.

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

தரவு மாடலிங் ஆய்வகம்

தரவுத்தள நிறுவல்

தரவு மாதிரி வடிவமைப்பிற்கு முக்கியத்துவம் கொடுக்கப்பட்டால் (சிக்கலான வரிசைப்படுத்தல் கட்டமைப்புகளுக்குப் பதிலாக), நாங்கள் உள்ளூர் கணினியில் டோக்கர் கொள்கலன்களில் தரவுத்தளங்களை நிறுவுவோம், பின்னர் அந்தந்த கட்டளை வரி ஷெல்களைப் பயன்படுத்தி அவற்றுடன் தொடர்புகொள்வோம்.

PostgreSQL & Cassandra இணக்கமான YugaByte DB தரவுத்தளம்

mkdir ~/yugabyte && cd ~/yugabyte
wget https://downloads.yugabyte.com/yb-docker-ctl && chmod +x yb-docker-ctl
docker pull yugabytedb/yugabyte
./yb-docker-ctl create --enable_postgres

MongoDB

docker run --name my-mongo -d mongo:latest

கட்டளை வரி அணுகல்

தொடர்புடைய APIகளுக்கான கட்டளை வரி ஷெல்லைப் பயன்படுத்தி தரவுத்தளங்களுடன் இணைப்போம்.

போஸ்ட்கெரே

psql PostgreSQL உடன் தொடர்புகொள்வதற்கான கட்டளை வரி ஷெல் ஆகும். பயன்பாட்டின் எளிமைக்காக, YugaByte DB பின் கோப்புறையில் psql உடன் வருகிறது.

docker exec -it yb-postgres-n1 /home/yugabyte/postgres/bin/psql -p 5433 -U postgres

கசண்டிரா

cqlsh CQL (Cassandra Query Language) வழியாக கசாண்ட்ரா மற்றும் அதன் இணக்கமான தரவுத்தளங்களுடன் தொடர்புகொள்வதற்கான கட்டளை வரி ஷெல் ஆகும். பயன்பாட்டின் எளிமைக்காக, YugaByte DB உடன் வருகிறது cqlsh பட்டியலில் bin.
CQL ஆனது SQL ஆல் ஈர்க்கப்பட்டது மற்றும் அட்டவணைகள், வரிசைகள், நெடுவரிசைகள் மற்றும் குறியீடுகளின் ஒத்த கருத்துகளைக் கொண்டுள்ளது என்பதை நினைவில் கொள்க. இருப்பினும், ஒரு NoSQL மொழியாக, இது ஒரு குறிப்பிட்ட வரம்புகளைச் சேர்க்கிறது, அவற்றில் பெரும்பாலானவற்றை நாங்கள் மற்ற கட்டுரைகளிலும் உள்ளடக்குவோம்.

docker exec -it yb-tserver-n1 /home/yugabyte/bin/cqlsh

MongoDB

மோங்கோ MongoDB உடன் தொடர்புகொள்வதற்கான கட்டளை வரி ஷெல் ஆகும். மோங்கோடிபி நிறுவலின் பின் கோப்பகத்தில் இதைக் காணலாம்.

docker exec -it my-mongo bash 
cd bin
mongo

ஒரு அட்டவணையை உருவாக்கவும்

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

போஸ்ட்கெரே

CREATE TABLE Music (
    Artist VARCHAR(20) NOT NULL, 
    SongTitle VARCHAR(30) NOT NULL,
    AlbumTitle VARCHAR(25),
    Year INT,
    Price FLOAT,
    Genre VARCHAR(10),
    CriticRating FLOAT,
    Tags TEXT,
    PRIMARY KEY(Artist, SongTitle)
);	

கசண்டிரா

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

CREATE KEYSPACE myapp;
USE myapp;
CREATE TABLE Music (
    Artist TEXT, 
    SongTitle TEXT,
    AlbumTitle TEXT,
    Year INT,
    Price FLOAT,
    Genre TEXT,
    CriticRating FLOAT,
    Tags TEXT,
    PRIMARY KEY(Artist, SongTitle)
);

MongoDB

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

use myNewDatabase;

அட்டவணையைப் பற்றிய தகவல்களைப் பெறுதல்
போஸ்ட்கெரே

d Music
Table "public.music"
    Column    |         Type          | Collation | Nullable | Default 
--------------+-----------------------+-----------+----------+--------
 artist       | character varying(20) |           | not null | 
 songtitle    | character varying(30) |           | not null | 
 albumtitle   | character varying(25) |           |          | 
 year         | integer               |           |          | 
 price        | double precision      |           |          | 
 genre        | character varying(10) |           |          | 
 criticrating | double precision      |           |          | 
 tags         | text                  |           |          | 
Indexes:
    "music_pkey" PRIMARY KEY, btree (artist, songtitle)

கசண்டிரா

DESCRIBE TABLE MUSIC;
CREATE TABLE myapp.music (
    artist text,
    songtitle text,
    albumtitle text,
    year int,
    price float,
    genre text,
    tags text,
    PRIMARY KEY (artist, songtitle)
) WITH CLUSTERING ORDER BY (songtitle ASC)
    AND default_time_to_live = 0
    AND transactions = {'enabled': 'false'};

MongoDB

use myNewDatabase;
show collections;

அட்டவணையில் தரவை உள்ளிடுதல்
போஸ்ட்கெரே

INSERT INTO Music 
    (Artist, SongTitle, AlbumTitle, 
    Year, Price, Genre, CriticRating, 
    Tags)
VALUES(
    'No One You Know', 'Call Me Today', 'Somewhat Famous',
    2015, 2.14, 'Country', 7.8,
    '{"Composers": ["Smith", "Jones", "Davis"],"LengthInSeconds": 214}'
);
INSERT INTO Music 
    (Artist, SongTitle, AlbumTitle, 
    Price, Genre, CriticRating)
VALUES(
    'No One You Know', 'My Dog Spot', 'Hey Now',
    1.98, 'Country', 8.4
);
INSERT INTO Music 
    (Artist, SongTitle, AlbumTitle, 
    Price, Genre)
VALUES(
    'The Acme Band', 'Look Out, World', 'The Buck Starts Here',
    0.99, 'Rock'
);
INSERT INTO Music 
    (Artist, SongTitle, AlbumTitle, 
    Price, Genre, 
    Tags)
VALUES(
    'The Acme Band', 'Still In Love', 'The Buck Starts Here',
    2.47, 'Rock', 
    '{"radioStationsPlaying": ["KHCR", "KBQX", "WTNR", "WJJH"], "tourDates": { "Seattle": "20150625", "Cleveland": "20150630"}, "rotation": Heavy}'
);

கசண்டிரா

ஒட்டுமொத்த வெளிப்பாடு INSERT கசாண்ட்ராவில் PostgreSQL இல் உள்ளதைப் போலவே தெரிகிறது. இருப்பினும், சொற்பொருளில் ஒரு பெரிய வேறுபாடு உள்ளது. கசாண்ட்ராவில் INSERT உண்மையில் ஒரு ஆபரேஷன் UPSERT, வரிசை ஏற்கனவே இருந்தால், கடைசி மதிப்புகள் வரிசையில் சேர்க்கப்படும்.

தரவு உள்ளீடு PostgreSQL போன்றது INSERT அதிக

.

MongoDB

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

db.music.insert( {
artist: "No One You Know",
songTitle: "Call Me Today",
albumTitle: "Somewhat Famous",
year: 2015,
price: 2.14,
genre: "Country",
tags: {
Composers: ["Smith", "Jones", "Davis"],
LengthInSeconds: 214
}
}
);
db.music.insert( {
artist: "No One You Know",
songTitle: "My Dog Spot",
albumTitle: "Hey Now",
price: 1.98,
genre: "Country",
criticRating: 8.4
}
);
db.music.insert( {
artist: "The Acme Band",
songTitle: "Look Out, World",
albumTitle:"The Buck Starts Here",
price: 0.99,
genre: "Rock"
}
);
db.music.insert( {
artist: "The Acme Band",
songTitle: "Still In Love",
albumTitle:"The Buck Starts Here",
price: 2.47,
genre: "Rock",
tags: {
radioStationsPlaying:["KHCR", "KBQX", "WTNR", "WJJH"],
tourDates: {
Seattle: "20150625",
Cleveland: "20150630"
},
rotation: "Heavy"
}
}
);

அட்டவணை வினவல்

வினவல் கட்டுமானத்தின் அடிப்படையில் SQL மற்றும் NoSQL க்கு இடையே உள்ள மிக முக்கியமான வேறுபாடு பயன்படுத்தப்படும் மொழியாகும் FROM и WHERE. வெளிப்பாட்டிற்குப் பிறகு SQL அனுமதிக்கிறது FROM பல அட்டவணைகளைத் தேர்ந்தெடுத்து, அதனுடன் வெளிப்பாடு WHERE எந்த சிக்கலானதாகவும் இருக்கலாம் (செயல்பாடுகள் உட்பட JOIN அட்டவணைகளுக்கு இடையில்). இருப்பினும், NoSQL கடுமையான வரம்புகளை விதிக்க முனைகிறது FROM, மற்றும் ஒரு குறிப்பிட்ட அட்டவணையுடன் மட்டுமே வேலை செய்யவும், மற்றும் இன் WHERE, முதன்மை விசை எப்போதும் குறிப்பிடப்பட வேண்டும். இது நாம் முன்பு பேசிய NoSQL செயல்திறன் புஷ் உடன் இணைக்கப்பட்டுள்ளது. இந்த விருப்பம் குறுக்கு அட்டவணை மற்றும் குறுக்கு-விசை தொடர்புகளில் சாத்தியமான ஒவ்வொரு குறைப்புக்கும் வழிவகுக்கிறது. இது ஒரு கோரிக்கைக்கு பதிலளிக்கும் போது இடை-முனை தகவல்தொடர்புகளில் ஒரு பெரிய தாமதத்தை அறிமுகப்படுத்தலாம், எனவே பொதுவாக தவிர்க்கப்படுவது சிறந்தது. எடுத்துக்காட்டாக, கசாண்ட்ராவிற்கு வினவல்கள் சில ஆபரேட்டர்களுக்கு மட்டுப்படுத்தப்பட வேண்டும் (மட்டும் =, IN, <, >, =>, <=) பகிர்வு விசைகளில், இரண்டாம் நிலை குறியீட்டைக் கோரும் போது தவிர (= ஆபரேட்டர் மட்டுமே இங்கு அனுமதிக்கப்படுகிறது).

போஸ்ட்கெரே

SQL தரவுத்தளத்தால் எளிதாக செயல்படுத்தக்கூடிய வினவல்களின் மூன்று எடுத்துக்காட்டுகள் கீழே உள்ளன.

  • ஒரு கலைஞரின் அனைத்து பாடல்களையும் காண்பி;
  • தலைப்பின் முதல் பகுதியுடன் பொருந்திய கலைஞரின் அனைத்து பாடல்களையும் காண்பி;
  • தலைப்பில் ஒரு குறிப்பிட்ட வார்த்தையைக் கொண்ட மற்றும் 1.00 க்கும் குறைவான விலை கொண்ட ஒரு கலைஞரின் அனைத்து பாடல்களையும் காண்பி.
SELECT * FROM Music
WHERE Artist='No One You Know';
SELECT * FROM Music
WHERE Artist='No One You Know' AND SongTitle LIKE 'Call%';
SELECT * FROM Music
WHERE Artist='No One You Know' AND SongTitle LIKE '%Today%'
AND Price > 1.00;

கசண்டிரா

மேலே பட்டியலிடப்பட்டுள்ள PostgreSQL வினவல்களில், ஆபரேட்டராக இருந்து, முதல் ஒன்று மட்டுமே கசாண்ட்ராவில் மாறாமல் வேலை செய்யும். LIKE போன்ற கிளஸ்டரிங் நெடுவரிசைகளுக்குப் பயன்படுத்த முடியாது SongTitle. இந்த வழக்கில், ஆபரேட்டர்கள் மட்டுமே அனுமதிக்கப்படுகிறார்கள் = и IN.

SELECT * FROM Music
WHERE Artist='No One You Know';
SELECT * FROM Music
WHERE Artist='No One You Know' AND SongTitle IN ('Call Me Today', 'My Dog Spot')
AND Price > 1.00;

MongoDB

முந்தைய எடுத்துக்காட்டுகளில் காட்டப்பட்டுள்ளபடி, மோங்கோடிபியில் வினவல்களை உருவாக்குவதற்கான முக்கிய முறை db.collection.find(). இந்த முறை வெளிப்படையாக சேகரிப்பின் பெயரைக் கொண்டுள்ளது (music கீழே உள்ள எடுத்துக்காட்டில்), எனவே பல சேகரிப்புகளை வினவுவது தடைசெய்யப்பட்டுள்ளது.

db.music.find( {
  artist: "No One You Know"
 } 
);
db.music.find( {
  artist: "No One You Know",
  songTitle: /Call/
 } 
);

அட்டவணையின் அனைத்து வரிசைகளையும் படித்தல்

எல்லா வரிசைகளையும் படிப்பது என்பது நாம் முன்பு பார்த்த வினவல் முறையின் சிறப்பு அம்சமாகும்.

போஸ்ட்கெரே

SELECT * 
FROM Music;

கசண்டிரா

மேலே உள்ள PostgreSQL உதாரணத்தைப் போன்றது.

MongoDB

db.music.find( {} );

அட்டவணையில் தரவைத் திருத்துதல்

போஸ்ட்கெரே

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

UPDATE Music
SET Genre = 'Disco'
WHERE Artist = 'The Acme Band' AND SongTitle = 'Still In Love';

கசண்டிரா

கசாண்ட்ரா உள்ளது UPDATE PostgreSQL போன்றது. UPDATE அதே சொற்பொருள் உள்ளது UPSERT, ஒத்த INSERT.

மேலே உள்ள PostgreSQL உதாரணத்தைப் போன்றது.

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

db.music.update(
  {"artist": "The Acme Band"},
  { 
    $set: {
      "genre": "Disco"
    }
  },
  {"multi": true, "upsert": true}
);

அட்டவணையில் இருந்து தரவை அகற்றுதல்

போஸ்ட்கெரே

DELETE FROM Music
WHERE Artist = 'The Acme Band' AND SongTitle = 'Look Out, World';

கசண்டிரா

மேலே உள்ள PostgreSQL உதாரணத்தைப் போன்றது.

MongoDB

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

db.music.deleteMany( {
        artist: "The Acme Band"
    }
);

அட்டவணையை நீக்குகிறது

போஸ்ட்கெரே

DROP TABLE Music;

கசண்டிரா

மேலே உள்ள PostgreSQL உதாரணத்தைப் போன்றது.

MongoDB

db.music.drop();

முடிவுக்கு

SQL மற்றும் NoSQL இடையே தேர்வு செய்வது பற்றிய விவாதம் 10 ஆண்டுகளுக்கும் மேலாக நடந்து வருகிறது. இந்த விவாதத்தில் இரண்டு முக்கிய அம்சங்கள் உள்ளன: தரவுத்தள இயந்திர கட்டமைப்பு (ஒற்றை, பரிவர்த்தனை SQL vs விநியோகிக்கப்பட்டது, பரிவர்த்தனை அல்லாத NoSQL) மற்றும் தரவுத்தள வடிவமைப்பு அணுகுமுறை (SQL இல் உங்கள் தரவை மாதிரியாக்குதல் மற்றும் NoSQL இல் உங்கள் வினவல்களை மாதிரியாக்குதல்).

YugaByte DB போன்ற விநியோகிக்கப்பட்ட பரிவர்த்தனை தரவுத்தளத்துடன், தரவுத்தள கட்டமைப்பைப் பற்றிய விவாதத்தை எளிதாக நிறுத்தலாம். ஒற்றை முனையில் எழுதப்படுவதை விட தரவு அளவுகள் பெரிதாகும்போது, ​​தானியங்கு ஷேடிங்/மறுசமநிலைப்படுத்துதலுடன் நேரியல் எழுதும் அளவை ஆதரிக்கும் முழுமையாக விநியோகிக்கப்பட்ட கட்டமைப்பு அவசியமாகிறது.

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

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

இந்த கட்டுரையில், PostgreSQL, Cassandra மற்றும் MongoDB ஆகியவற்றுக்கு இடையே தரவுத்தள வடிவமைப்பு அடிப்படைகள் எவ்வாறு வேறுபடுகின்றன என்பதைப் பார்த்தோம். எதிர்கால கட்டுரைகளில், குறியீடுகள், பரிவர்த்தனைகள், JOINகள், TTL வழிகாட்டுதல்கள் மற்றும் JSON ஆவணங்கள் போன்ற மேம்பட்ட வடிவமைப்புக் கருத்துகளுக்குள் மூழ்குவோம்.

வாரஇறுதியில் உங்களுக்கு சிறப்பான ஓய்வு அளிக்க விரும்புகிறோம் மற்றும் உங்களை அழைக்கிறோம் இலவச webinar, மே 14 ஆம் தேதி நடைபெறும்.

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

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