Асосҳои тарҳрезии пойгоҳи додаҳо - Муқоисаи PostgreSQL, Кассандра ва MongoDB

Салом, дустон. Пеш аз рафтан ба қисми дуюми ҷашнҳои май, мо бо шумо маводеро мубодила мекунем, ки мо дар интизории оғози ҷараёни нав дар курс тарҷума кардем. "МБМ-и релятсионӣ".

Асосҳои тарҳрезии пойгоҳи додаҳо - Муқоисаи PostgreSQL, Кассандра ва MongoDB

Таҳиягарони барнома барои муқоисаи пойгоҳи додаҳои сершумори амалиётӣ вақти зиёдро сарф мекунанд, то онеро, ки ба сарбории кори пешбинишуда мувофиқат мекунад, интихоб кунад. Эҳтиёҷот метавонанд моделсозии соддакардашудаи додаҳо, кафолатҳои транзаксия, иҷрои хондан/навишт, миқёси уфуқӣ ва таҳаммулпазирии хатогиҳоро дар бар гиранд. Одатан, интихоб аз категорияи пойгоҳи додаҳо, SQL ё NoSQL оғоз мешавад, зеро ҳар як категория маҷмӯи возеҳи муомилотро пешниҳод мекунад. Иҷрои баланд аз нуқтаи назари таъхири паст ва гузариши баланд одатан ҳамчун як талаботи ғайритиҷоратӣ ҳисобида мешавад ва аз ин рӯ барои ҳама гуна пойгоҳи додаҳои намунавӣ муҳим аст.

Ҳадафи ин мақола кӯмак ба таҳиягарони барномаҳо дар интихоби дурусти SQL ва NoSQL дар заминаи моделсозии додаҳои барнома мебошад. Мо як пойгоҳи додаҳои SQL, аз ҷумла PostgreSQL ва ду пойгоҳи додаҳои NoSQL, Cassandra ва MongoDB-ро дида мебароем, то асосҳои тарҳрезии пойгоҳи додаҳо, аз қабили сохтани ҷадвалҳо, пур кардани онҳо, хондани маълумот аз ҷадвал ва нест кардани он. Дар мақолаи навбатӣ, мо ҳатман ба индексҳо, транзаксияҳо, JOINs, директиваҳои TTL ва тарҳи пойгоҳи додаҳои JSON асосёфта назар хоҳем кард.

Фарқи байни SQL ва NoSQL чист?

Пойгоҳи додаҳои SQL чандирии барномаҳоро тавассути кафолатҳои транзаксионии ACID ва инчунин қобилияти онҳо барои пурсиши маълумот бо истифода аз JOINҳо бо роҳҳои ғайричашмдошт дар болои моделҳои мавҷудаи муқарраршудаи пойгоҳи додаҳо афзоиш медиҳанд.

Бо назардошти меъмории монолитӣ/як гиреҳи онҳо ва истифодаи модели такрории усто-ғулом барои зиёдатӣ, пойгоҳи додаҳои анъанавии SQL ду хусусияти муҳим надоранд - миқёспазирии хаттӣ (яъне тақсимоти худкор дар байни гиреҳҳои сершумор) ва талафоти автоматӣ/сифри маълумот. Ин маънои онро дорад, ки ҳаҷми маълумоти гирифташуда наметавонад аз ҳадди интиқоли навиштани як гиреҳ зиёд бошад. Илова бар ин, баъзе талафоти муваққатии маълумот бояд дар таҳаммулпазирии хатоҳо (дар меъмории муштарак-ҳеҷ чиз) ба назар гирифта шаванд. Дар ин ҷо шумо бояд дар хотир дошта бошед, ки ӯҳдадориҳои охирин ҳанӯз дар нусхаи ғулом инъикос наёфтаанд. Ба даст овардани навсозиҳои ғайрифаъол дар пойгоҳи додаҳои SQL низ душвор аст.

Пойгоҳи додаҳои NoSQL одатан аз рӯи табиат тақсим карда мешаванд, яъне. дар онҳо маълумот ба қисмҳо тақсим карда, дар якчанд гиреҳҳо тақсим карда мешавад. Онҳо аз нормализатсия талаб мекунанд. Ин маънои онро дорад, ки маълумоти воридшуда низ бояд якчанд маротиба нусхабардорӣ карда шавад, то ба дархостҳои мушаххасе, ки шумо ирсол мекунед, ҷавоб диҳед. Ҳадафи умумӣ ин ба даст овардани нишондиҳандаҳои баланд тавассути кам кардани шумораи пораҳои дастрас ҳангоми хондан мебошад. Ин маънои онро дорад, ки NoSQL аз шумо моделсозии дархостҳои шуморо талаб мекунад, дар ҳоле ки SQL аз шумо моделсозии маълумоти шуморо талаб мекунад.

NoSQL ба ноил шудан ба иҷрои баланд дар кластери тақсимшуда тамаркуз мекунад ва ин асос барои бисёре аз тарроҳии пойгоҳи додаҳо мебошад, ки талафоти транзаксияҳои ACID, JOINs ва индексҳои пайвастаи дуввуми ҷаҳониро дар бар мегиранд.

Далел вуҷуд дорад, ки дар ҳоле ки пойгоҳи додаҳои NoSQL миқёси хаттии навиштан ва таҳаммулпазирии баланди хатогиҳоро таъмин мекунанд, аз даст додани кафолатҳои транзаксионӣ онҳоро барои маълумоти муҳими миссия корношоям мекунад.

Ҷадвали зерин нишон медиҳад, ки чӣ гуна моделсозии додаҳо дар NoSQL аз SQL фарқ мекунад.

Асосҳои тарҳрезии пойгоҳи додаҳо - Муқоисаи PostgreSQL, Кассандра ва MongoDB

SQL ва NoSQL: Чаро ҳарду лозиманд?

Барномаҳои воқеии ҷаҳонӣ бо шумораи зиёди корбарон, аз қабили Amazon.com, Netflix, Uber ва Airbnb, вазифадоранд, ки вазифаҳои мураккаб ва бисёрҷанбаро иҷро кунанд. Масалан, як барномаи тиҷорати электронӣ ба монанди Amazon.com бояд маълумоти сабук ва хеле муҳим, аз қабили маълумоти корбар, маҳсулот, фармоишҳо, ҳисобнома-фактураҳо ва дар якҷоягӣ бо маълумоти вазнин ва камтар ҳассос ба монанди баррасиҳои маҳсулот, паёмҳои дастгирӣ, фаъолияти корбар, баррасиҳо ва тавсияҳои корбарон. Табиист, ки ин барномаҳо ба ҳадди аққал як пойгоҳи додаҳои SQL ва ҳадди аққал як пойгоҳи додаҳои NoSQL такя мекунанд. Дар системаҳои байниминтақавӣ ва глобалӣ, пойгоҳи додаҳои NoSQL ҳамчун кэши тақсимшудаи географӣ барои маълумоте, ки дар манбаи боэътимоди махзани SQL, ки дар як минтақаи мушаххас кор мекунанд, нигоҳ дошта мешавад.

Чӣ тавр YugaByte DB SQL ва NoSQL-ро муттаҳид мекунад?

Дар як муҳаррики нигоҳдории омехта, ки ба лог нигаронида шудааст, тақсимкунии худкор, такрори консенсуси тақсимшудаи тақсимшуда ва транзаксияҳои тақсимшудаи ACID (аз Google Spanner илҳом гирифта шудааст) сохта шудааст, YugaByte DB аввалин махзани кушодаасос дар ҷаҳон аст, ки ҳамзамон бо NoSQL (Cassandra & Redis) мувофиқ аст ва SQL (PostgreSQL). Тавре ки дар ҷадвали зер нишон дода шудааст, YCQL, API-и YugaByte DB, ки бо Кассандра мувофиқ аст, мафҳумҳои транзаксияҳои яккаса ва бисёркалиди ACID ва индексҳои дуюмдараҷаи глобалиро ба API NoSQL илова намуда, ба ин васила давраи базаҳои транзаксионии NoSQL-ро оғоз мекунад. Илова бар ин, YCQL, API-и YugaByte DB, ки бо PostgreSQL мувофиқ аст, ба SQL API мафҳумҳои миқёси хаттии навиштан ва таҳаммулпазирии автоматии хатогиҳоро илова намуда, базаҳои тақсимшудаи SQL-ро ба ҷаҳон меорад. Азбаски YugaByte DB хусусияти транзаксионӣ дорад, ҳоло API NoSQL метавонад дар заминаи маълумоти муҳими миссия истифода шавад.

Асосҳои тарҳрезии пойгоҳи додаҳо - Муқоисаи PostgreSQL, Кассандра ва MongoDB

Чунон ки пештар дар макола гуфта шуда буд "Муаррифии YSQL: API-и мувофиқи PostgreSQL тақсимшудаи SQL барои YugaByte DB", интихоби SQL ё NoSQL дар YugaByte DB комилан аз хусусиятҳои сарбории кории асосӣ вобаста аст:

  • Агар сарбории асосии шумо амалиёти бисёркалиди JOIN бошад, пас ҳангоми интихоби YSQL, дарк кунед, ки калидҳои шумо метавонанд дар байни гиреҳҳои сершумор тақсим карда шаванд, ки дар натиҷа дар муқоиса бо NoSQL таъхири баландтар ва/ё гузариши пасттар мешавад.
  • Дар акси ҳол, яке аз ду API-и NoSQL-ро интихоб кунед ва дар хотир доред, ки шумо дар натиҷаи дархостҳое, ки аз як гиреҳ дар як вақт дода мешаванд, иҷрои беҳтар ба даст меоред. YugaByte DB метавонад ҳамчун махзани ягонаи амалиётӣ барои замимаҳои воқеии мураккаб хидмат кунад, ки бояд ҳамзамон сарбории сершуморро идора кунанд.

Лабораторияи моделсозии додаҳо дар бахши навбатӣ ба пойгоҳи додаҳои PostgreSQL ва Cassandra API мувофиқи YugaByte DB, бар хилофи пойгоҳи додаҳои маҳаллӣ асос ёфтааст. Ин равиш осонии ҳамкорӣ бо ду API-и гуногунро (дар ду бандари гуногун) як кластери пойгоҳи додаҳо бар хилофи истифодаи кластерҳои комилан мустақили ду пойгоҳи додаҳои гуногун таъкид мекунад.
Дар бахшҳои зерин, мо лабораторияи моделсозии додаҳоро дида мебароем, то фарқиятҳо ва баъзе муштаракоти пойгоҳи додаҳоро нишон диҳем.

Лабораторияи моделсозии маълумот

Насби пойгоҳи додаҳо

Бо назардошти таваҷҷӯҳ ба тарҳрезии модели додаҳо (ба ҷои меъмории мураккаби ҷойгиркунӣ), мо пойгоҳи додаҳоро дар контейнерҳои Docker дар мошини маҳаллӣ насб мекунем ва сипас бо онҳо бо истифода аз сатри фармонҳои мувофиқи онҳо ҳамкорӣ мекунем.

ПостgreSQL ва Cassandra пойгоҳи додаҳои DB мувофиқи YugaByte

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

Муғулистон

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

Дастрасӣ ба сатри фармон

Биёед бо истифода аз қабати сатри фармон барои API-ҳои мувофиқ ба пойгоҳи додаҳо пайваст шавем.

PostgreSQL

psql як қабати сатри фармон барои ҳамкорӣ бо PostgreSQL мебошад. Барои осонии истифода, YugaByte DB бо psql рост дар папкаи бин меояд.

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

Кассандра

cqlsh як қабати сатри фармонӣ барои ҳамкорӣ бо Кассандра ва пойгоҳи додаҳои мувофиқи он тавассути CQL (Забони Query Cassandra) мебошад. Барои осонии истифода, YugaByte DB меояд cqlsh дар каталог bin.
Дар хотир доред, ки CQL аз SQL илҳом гирифта шудааст ва дорои мафҳумҳои шабеҳи ҷадвалҳо, сатрҳо, сутунҳо ва индексҳо мебошад. Аммо, ҳамчун забони NoSQL, он маҷмӯи муайяни маҳдудиятҳоро илова мекунад, ки аксари онҳоро мо дар мақолаҳои дигар низ баррасӣ хоҳем кард.

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

Муғулистон

mongo як қабати сатри фармон барои ҳамкорӣ бо MongoDB мебошад. Онро дар феҳристи бинии насби MongoDB пайдо кардан мумкин аст.

docker exec -it my-mongo bash 
cd bin
mongo

Ҷадвал эҷод кунед

Акнун мо метавонем бо пойгоҳи додаҳо амалҳои гуногунро бо истифода аз сатри фармон иҷро кунем. Биёед аз сохтани ҷадвале оғоз кунем, ки маълумот дар бораи сурудҳои аз ҷониби рассомони гуногун навишташуда нигоҳ дошта мешавад. Ин сурудҳо метавонанд қисми албом бошанд. Инчунин хусусиятҳои ихтиёрии суруд соли нашр, нарх, жанр ва рейтинг мебошанд. Мо бояд атрибутҳои иловагиро, ки метавонанд дар оянда тавассути майдони "тегҳо" лозим шаванд, ҳисоб кунем. Он метавонад маълумоти нимсохториро дар шакли ҷуфтҳои калид-арзиш нигоҳ дорад.

PostgreSQL

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. Калиди ибтидоӣ аз калиди тақсимкунӣ (сутуни рассом дар мисоли зер) ва маҷмӯи сутунҳои кластерӣ (сутуни SongTitle дар мисоли зер) иборат аст. Калиди бахш муайян мекунад, ки сатр бояд ба кадом қисм/порча ҷойгир карда шавад ва сутунҳои кластерӣ нишон медиҳанд, ки маълумот дар дохили порчаи ҷорӣ чӣ гуна бояд ташкил карда шавад.

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 маълумотро ба пойгоҳи додаҳо (базаи додаҳо) ташкил мекунад (монанди Keyspace дар Кассандра), ки дар он ҷо Коллексияҳо (монанд ба ҷадвалҳо) мавҷуданд, ки Ҳуҷҷатҳоро дар бар мегиранд (ба сатрҳои ҷадвал монанд). Дар MongoDB аслан зарурати муайян кардани схемаи ибтидоӣ нест. Дастаи "Истифода аз пойгоҳи додаҳо", ки дар зер нишон дода шудааст, базаи маълумотро дар занги аввал эҷод мекунад ва контексти базаи навтаъсисро тағир медиҳад. Ҳатто коллексияҳоро ба таври возеҳ эҷод кардан лозим нест; онҳо танҳо ҳангоми илова кардани ҳуҷҷати аввал ба коллексияи нав ба таври худкор эҷод мешаванд. Дар хотир доред, ки MongoDB махзани санҷиширо ба таври нобаёнӣ истифода мебарад, бинобар ин ҳама амалиёти дар сатҳи коллексия бидуни муайян кардани пойгоҳи мушаххас дар он ба таври нобаёнӣ иҷро мешавад.

use myNewDatabase;

Гирифтани маълумот дар бораи ҷадвал
PostgreSQL

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'};

Муғулистон

use myNewDatabase;
show collections;

Ворид кардани маълумот ба ҷадвал
PostgreSQL

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 ба монанди Кассандра аст, амалиёти воридкунии он бо рафтори семантикии Кассандра ягон умумият надорад. Дар MongoDB гузоред () имконият надорад 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, <, >, =>, <=) дар калидҳои тақсимкунӣ, ба истиснои дархости индекси дуюм (дар ин ҷо танҳо оператори = иҷозат дода мешавад).

PostgreSQL

Дар зер се мисоли пурсишҳо оварда шудаанд, ки метавонанд тавассути пойгоҳи додаҳои 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/
 } 
);

Хондани ҳамаи сатрҳои ҷадвал

Хондани ҳама сатрҳо танҳо як ҳолати махсуси намунаи дархостест, ки мо қаблан дида будем.

PostgreSQL

SELECT * 
FROM Music;

Кассандра

Монанд ба мисоли PostgreSQL дар боло.

Муғулистон

db.music.find( {} );

Таҳрири маълумот дар ҷадвал

PostgreSQL

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 метавонад ҳуҷҷати мавҷударо комилан навсозӣ кунад ё танҳо майдонҳои муайянро навсозӣ кунад. Бо нобаёнӣ, он танҳо як ҳуҷҷатро бо семантика ғайрифаъол навсозӣ мекунад UPSERT. Навсозии якчанд ҳуҷҷатҳо ва рафтори шабеҳ UPSERT бо гузоштани байракчахои иловагии амалиёт истифода бурдан мумкин аст. Масалан, дар мисоли зер жанри як ҳунарманди мушаххас дар асоси суруди ӯ нав карда мешавад.

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

Хориҷ кардани маълумот аз ҷадвал

PostgreSQL

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

Кассандра

Монанд ба мисоли PostgreSQL дар боло.

Муғулистон

MongoDB ду намуди амалиёт барои нест кардани ҳуҷҷатҳо дорад - deleteOne() /deleteMany() и хориҷ кардан (). Ҳарду намуд ҳуҷҷатҳоро нест мекунанд, вале натиҷаҳои гуногунро бармегардонанд.

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

Нест кардани ҷадвал

PostgreSQL

DROP TABLE Music;

Кассандра

Монанд ба мисоли PostgreSQL дар боло.

Муғулистон

db.music.drop();

хулоса

Мубоҳиса дар бораи интихоби SQL ва NoSQL зиёда аз 10 сол боз идома дорад. Ду ҷанбаи асосии ин баҳс вуҷуд дорад: меъмории муҳаррики пойгоҳи додаҳо (монолитӣ, транзаксионии SQL ва NoSQL тақсимшуда, ғайримуқаррарӣ) ва равиши тарҳрезии пойгоҳи додаҳо (моделсозии маълумоти шумо дар SQL ва моделсозии дархостҳои шумо дар NoSQL).

Бо пойгоҳи додаҳои транзаксионии тақсимшуда ба монанди YugaByte DB, баҳс дар бораи меъмории пойгоҳи додаҳо метавонад ба осонӣ ором карда шавад. Вақте ки ҳаҷми маълумот аз он чизе, ки ба як гиреҳ навишта мешавад, калонтар мешавад, меъмории пурра тақсимшуда, ки миқёси хатти хатиро бо тақсимкунӣ/азнавбаланси автоматӣ дастгирӣ мекунад, зарур мешавад.

Гайр аз ин, чунон ки дар яке аз маколахо гуфта шудааст Google Cloud,Архитектураҳои транзаксионӣ ва ба таври қатъӣ мувофиқ ҳоло бештар истифода мешаванд, то қобилияти беҳтари рушдро нисбат ба меъмориҳои ғайримуқаррарӣ, ки дар ниҳоят муттасил таъмин кунанд.

Ба муҳокимаи тарроҳии пойгоҳи додаҳо бармегардем, бояд гуфт, ки ҳарду равишҳои тарроҳӣ (SQL ва NoSQL) барои ҳама гуна барномаҳои мураккаби ҷаҳони воқеӣ заруранд. Равиши "моделсозии додаҳо" SQL ба таҳиягарон имкон медиҳад, ки ба осонӣ ба талаботи тағйирёбандаи тиҷорат қонеъ гарданд, дар ҳоле ки равиши "моделсозии дархост" NoSQL ба ҳамон таҳиягарон имкон медиҳад, ки дар ҳаҷми бузурги додаҳо бо таъхири кам ва қобилияти баланд кор кунанд. Аз ин сабаб аст, ки YugaByte DB API-ҳои SQL ва NoSQL-ро дар як ядрои умумӣ таъмин мекунад, на пешбурди яке аз равишҳо. Илова бар ин, бо фароҳам овардани мутобиқат бо забонҳои маъмули пойгоҳи додаҳо, аз ҷумла PostgreSQL ва Cassandra, YugaByte DB кафолат медиҳад, ки таҳиягарон набояд забони дигарро барои кор бо муҳаррики тақсимшуда ва пайвастаи пойгоҳи додаҳо омӯзанд.

Дар ин мақола, мо дида баромадем, ки чӣ гуна асосҳои тарҳрезии пойгоҳи додаҳо байни PostgreSQL, Кассандра ва MongoDB фарқ мекунанд. Дар мақолаҳои оянда, мо ба консепсияҳои пешрафтаи тарроҳӣ, аз қабили индексҳо, транзаксияҳо, JOINs, директиваҳои TTL ва ҳуҷҷатҳои JSON ғарқ мешавем.

Мо ба шумо истироҳати хуби рӯзҳои истироҳатро таманно дорем ва шуморо ба он даъват мекунем вебинари ройгон, ки 14 май барпо мегардад.

Манбаъ: will.com

Илова Эзоҳ