Sveiki draugi. Pirms doÅ”anÄs uz maija brÄ«vdienu otro daļu, mÄs dalÄmies ar jums materiÄlÄ, ko mÄs tulkojÄm, gaidot jaunas straumes uzsÄkÅ”anu kursÄ.
Lietojumprogrammu izstrÄdÄtÄji pavada daudz laika, salÄ«dzinot vairÄkas operatÄ«vÄs datu bÄzes, lai izvÄlÄtos to, kas vislabÄk atbilst paredzÄtajai darba slodzei. VajadzÄ«bas var ietvert vienkÄrÅ”otu datu modelÄÅ”anu, darÄ«jumu garantijas, lasÄ«Å”anas/rakstÄ«Å”anas veiktspÄju, horizontÄlo mÄrogoÅ”anu un kļūdu toleranci. TradicionÄli izvÄle sÄkas ar datu bÄzes kategoriju ā SQL vai NoSQL, jo katrai kategorijai ir skaidrs kompromisu kopums. Augsta veiktspÄja zema latentuma un lielas caurlaidspÄjas ziÅÄ parasti tiek uzskatÄ«ta par prasÄ«bu, kas nav kompromisa prasÄ«ba, un tÄpÄc tÄ ir bÅ«tiska jebkurai datubÄzes paraugam.
Å Ä« raksta mÄrÄ·is ir palÄ«dzÄt lietojumprogrammu izstrÄdÄtÄjiem lietojumprogrammu datu modelÄÅ”anas kontekstÄ izdarÄ«t pareizo izvÄli starp SQL un NoSQL. MÄs apskatÄ«sim vienu SQL datu bÄzi, proti, PostgreSQL, un divas NoSQL datu bÄzes, Cassandra un MongoDB, lai aptvertu datu bÄzes dizaina pamatus, piemÄram, tabulu izveidi, aizpildÄ«Å”anu, datu nolasÄ«Å”anu no tabulas un to dzÄÅ”anu. NÄkamajÄ rakstÄ mÄs noteikti apskatÄ«sim indeksus, transakcijas, JOIN, TTL direktÄ«vas un uz JSON balstÄ«tu datu bÄzes dizainu.
KÄda ir atŔķirÄ«ba starp SQL un NoSQL?
SQL datu bÄzes palielina lietojumprogrammu elastÄ«bu, izmantojot ACID darÄ«jumu garantijas, kÄ arÄ« spÄju pieprasÄ«t datus, izmantojot JOIN neparedzÄtos veidos papildus esoÅ”ajiem normalizÄtajiem relÄciju datu bÄzes modeļiem.
Å emot vÄrÄ to monolÄ«tu/viena mezgla arhitektÅ«ru un galvenÄ-pakalpojuma replikÄcijas modeļa izmantoÅ”anu dublÄÅ”anai, tradicionÄlajÄm SQL datu bÄzÄm trÅ«kst divu svarÄ«gu funkciju - lineÄrÄs rakstÄ«Å”anas mÄrogojamÄ«bas (t.i., automÄtiska sadalÄ«Å”ana vairÄkos mezglos) un automÄtiska/nulles datu zuduma. Tas nozÄ«mÄ, ka saÅemto datu apjoms nedrÄ«kst pÄrsniegt viena mezgla maksimÄlo rakstÄ«Å”anas jaudu. TurklÄt, veicot kļūdu toleranci, ir jÄÅem vÄrÄ daži Ä«slaicÄ«gi datu zudumi (koplietojamÄ nekÄda arhitektÅ«rÄ). Å eit jums jÄpatur prÄtÄ, ka nesenÄs saistÄ«bas vÄl nav atspoguļotas vergu kopijÄ. SQL datu bÄzÄs ir grÅ«ti sasniegt arÄ« atjauninÄjumus bez dÄ«kstÄves.
NoSQL datu bÄzes parasti tiek izplatÄ«tas pÄc bÅ«tÄ«bas, t.i. tajos dati ir sadalÄ«ti sadaļÄs un sadalÄ«ti pa vairÄkiem mezgliem. ViÅiem nepiecieÅ”ama denormalizÄcija. Tas nozÄ«mÄ, ka ievadÄ«tie dati ir arÄ« vairÄkas reizes jÄpÄrkopÄ, lai atbildÄtu uz konkrÄtajiem jÅ«su sÅ«tÄ«tajiem pieprasÄ«jumiem. VispÄrÄjais mÄrÄ·is ir iegÅ«t augstu veiktspÄju, samazinot lasÄ«Å”anas laikÄ pieejamo lauskas. Tas nozÄ«mÄ, ka NoSQL ir jÄmodelÄ vaicÄjumi, savukÄrt SQL ir jÄmodelÄ dati.
NoSQL koncentrÄjas uz augstas veiktspÄjas sasniegÅ”anu sadalÄ«tÄ klasterÄ«, un tas ir daudzu datu bÄzes dizaina kompromisu pamatÄ, kas ietver ACID darÄ«jumu zudumu, JOIN un konsekventus globÄlos sekundÄros indeksus.
PastÄv arguments, ka, lai gan NoSQL datu bÄzes nodroÅ”ina lineÄru rakstÄ«Å”anas mÄrogojamÄ«bu un augstu kļūdu toleranci, darÄ«jumu garantiju zaudÄÅ”ana padara tÄs nepiemÄrotas misijai kritiskiem datiem.
Å ajÄ tabulÄ parÄdÄ«ts, kÄ datu modelÄÅ”ana NoSQL atŔķiras no SQL.
SQL un NoSQL: kÄpÄc abi ir nepiecieÅ”ami?
ReÄlÄs pasaules lietojumprogrammÄm ar lielu lietotÄju skaitu, piemÄram, Amazon.com, Netflix, Uber un Airbnb, ir uzdots veikt sarežģītus, daudzpusÄ«gus uzdevumus. PiemÄram, e-komercijas lietojumprogrammai, piemÄram, Amazon.com, ir jÄsaglabÄ viegli, ļoti kritiski dati, piemÄram, lietotÄja informÄcija, produkti, pasÅ«tÄ«jumi, rÄÄ·ini, kÄ arÄ« smagi, mazÄk sensitÄ«vi dati, piemÄram, produktu apskati, atbalsta ziÅojumi, lietotÄju aktivitÄtes, lietotÄju atsauksmes un ieteikumi. Protams, Ŕīs lietojumprogrammas balstÄs uz vismaz vienu SQL datu bÄzi kopÄ ar vismaz vienu NoSQL datu bÄzi. StarpreÄ£ionÄlÄs un globÄlÄs sistÄmÄs NoSQL datu bÄze darbojas kÄ Ä£eogrÄfiski sadalÄ«ta keÅ”atmiÅa datiem, kas tiek glabÄti uzticama avota SQL datubÄzÄ, kas darbojas noteiktÄ reÄ£ionÄ.
KÄ YugaByte DB apvieno SQL un NoSQL?
YugaByte DB ir veidota uz žurnÄliem orientÄta jauktas krÄtuves dzinÄja, automÄtiskÄs sadalÄ«Å”anas, sadalÄ«tÄs izplatÄ«tÄs vienprÄtÄ«bas replikÄcijas un ACID izplatÄ«tiem darÄ«jumiem (iedvesmojoties no Google Spanner), un tÄ ir pasaulÄ pirmÄ atvÄrtÄ pirmkoda datu bÄze, kas vienlaikus ir saderÄ«ga ar NoSQL (Cassandra & Redis) un SQL (PostgreSQL). KÄ parÄdÄ«ts tÄlÄk esoÅ”ajÄ tabulÄ, YCQL, YugaByte DB API, kas ir saderÄ«ga ar Cassandra, pievieno NoSQL API viena un vairÄku taustiÅu ACID transakciju un globÄlo sekundÄro indeksu jÄdzienus, tÄdÄjÄdi ievadot darÄ«jumu NoSQL datu bÄzu laikmetu. TurklÄt YCQL, YugaByte DB API, kas ir saderÄ«ga ar PostgreSQL, pievieno SQL API lineÄrÄs rakstÄ«Å”anas mÄrogoÅ”anas un automÄtiskÄs kļūdu tolerances jÄdzienus, nodroÅ”inot izplatÄ«tas SQL datu bÄzes pasaulÄ. TÄ kÄ YugaByte DB ir transakciju raksturs, NoSQL API tagad var izmantot misijai svarÄ«gu datu kontekstÄ.
KÄ minÄts iepriekÅ” rakstÄ
- Ja jÅ«su primÄrÄ darba slodze ir vairÄku taustiÅu JOIN darbÄ«bas, tad, izvÄloties YSQL, Åemiet vÄrÄ, ka atslÄgas var tikt sadalÄ«tas vairÄkos mezglos, kÄ rezultÄtÄ ir lielÄks latentums un/vai mazÄka caurlaidspÄja nekÄ NoSQL.
- PretÄjÄ gadÄ«jumÄ izvÄlieties vienu no divÄm NoSQL API, paturot prÄtÄ, ka jÅ«s iegÅ«sit labÄku veiktspÄju, ja vaicÄjumi tiks apkalpoti no viena mezgla vienlaikus. YugaByte DB var kalpot kÄ vienota operatÄ«va datu bÄze reÄlÄm, sarežģītÄm lietojumprogrammÄm, kurÄm vienlaikus jÄpÄrvalda vairÄkas darba slodzes.
Datu modelÄÅ”anas laboratorija nÄkamajÄ sadaÄ¼Ä ir balstÄ«ta uz PostgreSQL un Cassandra API saderÄ«gÄm YugaByte DB datu bÄzÄm, nevis vietÄjÄm datu bÄzÄm. Å Ä« pieeja uzsver vienkÄrŔību mijiedarbÄ«bÄ ar divÄm dažÄdÄm vienas un tÄs paÅ”as datu bÄzes klastera API (divos dažÄdos portos), pretstatÄ divu dažÄdu datu bÄzu pilnÄ«gi neatkarÄ«gu klasteru izmantoÅ”anai.
NÄkamajÄs sadaļÄs apskatÄ«sim datu modelÄÅ”anas laboratoriju, lai ilustrÄtu aplÅ«koto datu bÄzu atŔķirÄ«bas un dažas kopÄ«gÄs iezÄ«mes.
Datu modelÄÅ”anas laboratorija
Datu bÄzes uzstÄdÄ«Å”ana
Å emot vÄrÄ uzsvaru uz datu modeļu izstrÄdi (nevis sarežģītÄm izvietoÅ”anas arhitektÅ«rÄm), mÄs instalÄsim datu bÄzes Docker konteineros vietÄjÄ datorÄ un pÄc tam mijiedarbosimies ar tÄm, izmantojot atbilstoÅ”Äs komandrindas Äaulas.
PostgreSQL un Cassandra saderÄ«ga YugaByte DB datu bÄze
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
Piekļuve komandrindai
Izveidosim savienojumu ar datu bÄzÄm, izmantojot atbilstoÅ”o API komandrindas apvalku.
PostgreSQL
docker exec -it yb-postgres-n1 /home/yugabyte/postgres/bin/psql -p 5433 -U postgres
Cassandra
cqlsh
katalogÄ bin
.
Å
emiet vÄrÄ, ka CQL iedvesmoja SQL, un tai ir lÄ«dzÄ«gi tabulu, rindu, kolonnu un indeksu jÄdzieni. TomÄr kÄ NoSQL valoda tÄ pievieno noteiktu ierobežojumu kopumu, no kuriem lielÄko daļu mÄs apskatÄ«sim arÄ« citos rakstos.
docker exec -it yb-tserver-n1 /home/yugabyte/bin/cqlsh
MongoDB
docker exec -it my-mongo bash
cd bin
mongo
Izveidojiet tabulu
Tagad mÄs varam mijiedarboties ar datu bÄzi, lai veiktu dažÄdas darbÄ«bas, izmantojot komandrindu. SÄksim, izveidojot tabulu, kurÄ tiek glabÄta informÄcija par dažÄdu mÄkslinieku sarakstÄ«tÄm dziesmÄm. Å Ä«s dziesmas var bÅ«t daļa no albuma. ArÄ« dziesmas izvÄles atribÅ«ti ir izdoÅ”anas gads, cena, žanrs un vÄrtÄjums. Mums ir jÄÅem vÄrÄ papildu atribÅ«ti, kas var bÅ«t nepiecieÅ”ami nÄkotnÄ, izmantojot lauku "tags". Tas var uzglabÄt daļÄji strukturÄtus datus atslÄgu un vÄrtÄ«bu pÄru veidÄ.
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)
);
Cassandra
Tabulas izveide programmÄ Cassandra ir ļoti lÄ«dzÄ«ga PostgreSQL. Viena no galvenajÄm atŔķirÄ«bÄm ir integritÄtes ierobežojumu trÅ«kums (piemÄram, NOT NULL), taÄu par to atbild lietojumprogramma, nevis NoSQL datubÄze.. PrimÄrÄ atslÄga sastÄv no nodalÄ«juma atslÄgas (kolonna IzpildÄ«tÄjs tÄlÄk esoÅ”ajÄ piemÄrÄ) un klasteru kolonnu kopas (kolonna SongTitle tÄlÄk esoÅ”ajÄ piemÄrÄ). SadalÄ«juma atslÄga nosaka, kurÄ nodalÄ«jumÄ/sardÄ ir jÄievieto rinda, un klasteru kolonnas norÄda, kÄ dati ir jÄsakÄrto paÅ”reizÄjÄ fragmentÄ.
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
MongoDB sakÄrto datus datu bÄzÄs (datu bÄzÄ) (lÄ«dzÄ«gi kÄ Cassandra Keyspace), kur ir kolekcijas (lÄ«dzÄ«gi tabulÄm), kas satur dokumentus (lÄ«dzÄ«gi tabulas rindÄm). MongoDB bÅ«tÄ«bÄ nav nepiecieÅ”ams definÄt sÄkotnÄjo shÄmu. Komanda "izmantot datu bÄzi", parÄdÄ«ts zemÄk, pirmajÄ izsaukumÄ izveido datubÄzi un maina kontekstu jaunizveidotajai datubÄzei. Pat kolekcijas nav Ä«paÅ”i jÄizveido; tÄs tiek izveidotas automÄtiski, vienkÄrÅ”i pievienojot jaunai kolekcijai pirmo dokumentu. Å emiet vÄrÄ, ka MongoDB pÄc noklusÄjuma izmanto testa datu bÄzi, tÄpÄc jebkura kolekcijas lÄ«meÅa darbÄ«ba, nenorÄdot konkrÄtu datu bÄzi, tajÄ darbosies pÄc noklusÄjuma.
use myNewDatabase;
InformÄcijas iegÅ«Å”ana par tabulu
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)
Cassandra
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;
Datu ievadÄ«Å”ana tabulÄ
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}'
);
Cassandra
KopÄjÄ izteiksme INSERT
Cassandra izskatÄs ļoti lÄ«dzÄ«gi kÄ PostgreSQL. TomÄr semantikÄ ir viena liela atŔķirÄ«ba. KasandrÄ INSERT
patiesÄ«bÄ ir operÄcija UPSERT
, kur rindai tiek pievienotas pÄdÄjÄs vÄrtÄ«bas, ja rinda jau pastÄv.
Datu ievade ir līdzīga PostgreSQL
INSERT
iepriekÅ”
.
MongoDB
Lai gan MongoDB ir NoSQL datu bÄze, piemÄram, Cassandra, tÄs ievietoÅ”anas darbÄ«bai nav nekÄ kopÄ«ga ar Cassandra semantisko uzvedÄ«bu. VietnÄ MongoDB UPSERT
, kas padara to lÄ«dzÄ«gu PostgreSQL. NoklusÄjuma datu pievienoÅ”ana bez _idspecified
izraisīs jauna dokumenta pievienoŔanu kolekcijai.
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"
}
}
);
Tabulas vaicÄjums
IespÄjams, visnozÄ«mÄ«gÄkÄ atŔķirÄ«ba starp SQL un NoSQL vaicÄjumu uzbÅ«ves ziÅÄ ir izmantotÄ valoda FROM
Šø WHERE
. SQL atļauj pÄc izteiksmes FROM
atlasiet vairÄkas tabulas un izteiksmi ar WHERE
var bÅ«t jebkuras sarežģītÄ«bas pakÄpes (ieskaitot darbÄ«bas JOIN
starp tabulÄm). TomÄr NoSQL mÄdz uzlikt nopietnus ierobežojumus FROM
, un strÄdÄt tikai ar vienu norÄdÄ«tu tabulu, un iekÅ”Ä WHERE
, vienmÄr ir jÄnorÄda primÄrÄ atslÄga. Tas ir saistÄ«ts ar NoSQL veiktspÄju, par kuru mÄs runÄjÄm iepriekÅ”. Å Ä« vÄlme noved pie jebkÄdas starptabulu un atslÄgu mijiedarbÄ«bas samazinÄÅ”anas. Tas var izraisÄ«t lielu aizkavi starpmezglu saziÅÄ, atbildot uz pieprasÄ«jumu, un tÄpÄc no tÄ vislabÄk izvairÄ«ties. PiemÄram, Cassandra pieprasa, lai vaicÄjumi tiktu ierobežoti ar noteiktiem operatoriem (tikai =, IN, <, >, =>, <=
) uz nodalÄ«juma atslÄgÄm, izÅemot sekundÄrÄ indeksa pieprasÄ«Å”anu (Å”eit ir atļauts tikai operators =).
PostgreSQL
TÄlÄk ir sniegti trÄ«s vaicÄjumu piemÄri, kurus var viegli izpildÄ«t SQL datu bÄzÄ.
- ParÄdÄ«t visas izpildÄ«tÄja dziesmas;
- ParÄdÄ«t visas izpildÄ«tÄja dziesmas, kas atbilst nosaukuma pirmajai daļai;
- ParÄdiet visas izpildÄ«tÄja dziesmas, kuru nosaukumÄ ir noteikts vÄrds un kuru cena ir mazÄka par 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;
Cassandra
No iepriekÅ” uzskaitÄ«tajiem PostgreSQL vaicÄjumiem tikai pirmais Cassandra darbosies nemainÄ«gs, jo operators LIKE
nevar piemÄrot klasterizÄcijas kolonnÄm, piemÄram, SongTitle
. Å ajÄ gadÄ«jumÄ ir atļauti tikai operatori =
Šø 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
KÄ parÄdÄ«ts iepriekÅ”Äjos piemÄros, galvenÄ metode vaicÄjumu izveidei MongoDB ir music
tÄlÄk esoÅ”ajÄ piemÄrÄ), tÄpÄc vaicÄjumi vairÄkÄm kolekcijÄm ir aizliegti.
db.music.find( {
artist: "No One You Know"
}
);
db.music.find( {
artist: "No One You Know",
songTitle: /Call/
}
);
Visu tabulas rindu lasīŔana
Visu rindu lasÄ«Å”ana ir vienkÄrÅ”i Ä«paÅ”s vaicÄjuma modeļa gadÄ«jums, ko mÄs aplÅ«kojÄm iepriekÅ”.
PostgreSQL
SELECT *
FROM Music;
Cassandra
LÄ«dzÄ«gi kÄ iepriekÅ” minÄtajÄ PostgreSQL piemÄrÄ.
MongoDB
db.music.find( {} );
Datu rediÄ£ÄÅ”ana tabulÄ
PostgreSQL
PostgreSQL sniedz norÄdÄ«jumus UPDATE
lai mainÄ«tu datus. ViÅai nav iespÄju UPSERT
, tÄpÄc Å”is paziÅojums neizdosies, ja rinda vairs nebÅ«s datu bÄzÄ.
UPDATE Music
SET Genre = 'Disco'
WHERE Artist = 'The Acme Band' AND SongTitle = 'Still In Love';
Cassandra
Kasandrai ir UPDATE
lÄ«dzÄ«gi kÄ PostgreSQL. UPDATE
ir tÄda pati semantika UPSERT
, līdzīgi INSERT
.
LÄ«dzÄ«gi kÄ iepriekÅ” minÄtajÄ PostgreSQL piemÄrÄ.
MongoDB
Darbība UPSERT
. VairÄku dokumentu atjauninÄÅ”ana un lÄ«dzÄ«ga rÄ«cÄ«ba UPSERT
var pielietot, iestatot operÄcijai papildu karogus. PiemÄram, zemÄk esoÅ”ajÄ piemÄrÄ konkrÄta izpildÄ«tÄja žanrs tiek atjauninÄts, pamatojoties uz viÅa dziesmu.
db.music.update(
{"artist": "The Acme Band"},
{
$set: {
"genre": "Disco"
}
},
{"multi": true, "upsert": true}
);
Datu noÅemÅ”ana no tabulas
PostgreSQL
DELETE FROM Music
WHERE Artist = 'The Acme Band' AND SongTitle = 'Look Out, World';
Cassandra
LÄ«dzÄ«gi kÄ iepriekÅ” minÄtajÄ PostgreSQL piemÄrÄ.
MongoDB
MongoDB ir divu veidu operÄcijas dokumentu dzÄÅ”anai -
db.music.deleteMany( {
artist: "The Acme Band"
}
);
Tabulas dzÄÅ”ana
PostgreSQL
DROP TABLE Music;
Cassandra
LÄ«dzÄ«gi kÄ iepriekÅ” minÄtajÄ PostgreSQL piemÄrÄ.
MongoDB
db.music.drop();
SecinÄjums
Debates par izvÄli starp SQL un NoSQL ir plosÄ«juÅ”Äs vairÄk nekÄ 10 gadus. Å ajÄs debatÄs ir divi galvenie aspekti: datu bÄzes dzinÄja arhitektÅ«ra (monolÄ«ta, transakciju SQL pret izplatÄ«tu, netransakciju NoSQL) un datu bÄzes dizaina pieeja (datu modelÄÅ”ana SQL versijÄ vaicÄjumu modelÄÅ”ana NoSQL).
Izmantojot izplatÄ«tu darÄ«jumu datu bÄzi, piemÄram, YugaByte DB, debates par datu bÄzes arhitektÅ«ru var viegli apturÄt. TÄ kÄ datu apjoms kļūst lielÄks par to, ko var ierakstÄ«t vienÄ mezglÄ, kļūst nepiecieÅ”ama pilnÄ«bÄ izplatÄ«ta arhitektÅ«ra, kas atbalsta lineÄro rakstÄ«Å”anas mÄrogojamÄ«bu ar automÄtisku sadalÄ«Å”anu/pÄrbalansÄÅ”anu.
TurklÄt, kÄ teikts vienÄ no rakstiem
Atgriežoties pie datu bÄzes dizaina diskusijas, ir godÄ«gi teikt, ka jebkurai sarežģītai reÄlÄs pasaules lietojumprogrammai ir nepiecieÅ”amas abas dizaina pieejas (SQL un NoSQL). SQL ādatu modelÄÅ”anasā pieeja ļauj izstrÄdÄtÄjiem vieglÄk izpildÄ«t mainÄ«gÄs biznesa prasÄ«bas, savukÄrt NoSQL āvaicÄjumu modelÄÅ”anasā pieeja ļauj tiem paÅ”iem izstrÄdÄtÄjiem darboties ar lielu datu apjomu ar zemu latentumu un lielu caurlaidspÄju. Å Ä« iemesla dÄļ YugaByte DB nodroÅ”ina SQL un NoSQL API kopÄjÄ kodolÄ, nevis veicina kÄdu no pieejÄm. TurklÄt, nodroÅ”inot saderÄ«bu ar populÄrÄm datu bÄzes valodÄm, tostarp PostgreSQL un Cassandra, YugaByte DB nodroÅ”ina, ka izstrÄdÄtÄjiem nav jÄmÄcÄs cita valoda, lai strÄdÄtu ar izplatÄ«tu, ļoti konsekventu datu bÄzes dzinÄju.
Å ajÄ rakstÄ mÄs apskatÄ«jÄm, kÄ datu bÄzes dizaina pamati atŔķiras starp PostgreSQL, Cassandra un MongoDB. NÄkamajos rakstos mÄs apskatÄ«sim uzlabotas dizaina koncepcijas, piemÄram, indeksus, transakcijas, JOIN, TTL direktÄ«vas un JSON dokumentus.
NovÄlam jums lielisku atlikuÅ”o nedÄļas nogali un aicinÄm jÅ«s uz to
Avots: www.habr.com