Fundamenti tad-Disinn tad-Database - Tqabbil ta' PostgreSQL, Cassandra u MongoDB

Hello, ħbieb. Qabel ma nitilqu għat-tieni parti tal-vaganzi ta’ Mejju, naqsmu magħkom il-materjal li ttraduċijna b’antiċipazzjoni tat-tnedija ta’ stream ġdid fuq il-kors "DBMS Relazzjonali".

Fundamenti tad-Disinn tad-Database - Tqabbil ta' PostgreSQL, Cassandra u MongoDB

L-iżviluppaturi tal-applikazzjoni jqattgħu ħafna ħin iqabblu databases operattivi multipli biex jagħżlu dik li taqbel l-aħjar għall-ammont ta’ xogħol maħsub. Il-ħtiġijiet jistgħu jinkludu mudellar ta' data simplifikata, garanziji transazzjonali, prestazzjoni ta' qari/kitba, skalar orizzontali, u tolleranza għall-ħsarat. Tradizzjonalment, l-għażla tibda bil-kategorija tad-database, SQL jew NoSQL, peress li kull kategorija tippreżenta sett ċar ta 'kompromessi. Prestazzjoni għolja f'termini ta' latenza baxxa u throughput għoli ġeneralment titqies bħala rekwiżit mhux ta' kompromess u għalhekk hija essenzjali għal kwalunkwe database tal-kampjun.

L-għan ta 'dan l-artikolu huwa li jgħin lill-iżviluppaturi tal-applikazzjoni jagħmlu l-għażla t-tajba bejn SQL u NoSQL fil-kuntest tal-immudellar tad-dejta tal-applikazzjoni. Aħna ser inħarsu lejn database SQL waħda, jiġifieri PostgreSQL, u żewġ databases NoSQL, Cassandra u MongoDB, biex ikopru l-baŜi tad-disinn tad-database, bħall-ħolqien ta 'tabelli, il-popolazzjoni tagħhom, il-qari tad-dejta minn tabella, u t-tħassir tagħha. Fl-artiklu li jmiss, aħna ser inkunu żguri li nħarsu lejn indiċi, tranżazzjonijiet, JOINs, direttivi TTL, u disinn ta 'database ibbażat fuq JSON.

X'inhi d-differenza bejn SQL u NoSQL?

Id-databases SQL iżidu l-flessibbiltà tal-applikazzjoni permezz ta’ garanziji transazzjonali ACID, kif ukoll il-kapaċità tagħhom li jfittxu d-dejta bl-użu ta’ JOINs b’modi mhux mistennija fuq il-mudelli eżistenti ta’ database relazzjonali normalizzati.

Minħabba l-arkitettura monolitika/single-node tagħhom u l-użu ta’ mudell ta’ replikazzjoni master-slave għal redundancy, id-databases SQL tradizzjonali m’għandhomx żewġ karatteristiċi importanti - iskalabbiltà tal-kitba lineari (jiġifieri qsim awtomatiku fuq nodi multipli) u telf ta’ dejta awtomatiku/żero. Dan ifisser li l-ammont ta 'dejta riċevuta ma jistax jaqbeż il-fluss massimu tal-kitba ta' nodu wieħed. Barra minn hekk, xi telf temporanju tad-dejta għandu jitqies fit-tolleranza tal-ħsarat (f'arkitettura ta' xejn maqsuma). Hawnhekk trid iżżomm f'moħħok li kommessi reċenti għadhom ma ġewx riflessi fil-kopja tal-iskjavi. Aġġornamenti mhux ta 'waqfien huma wkoll diffiċli biex jinkisbu fid-databases SQL.

Id-databases NoSQL huma ġeneralment imqassma min-natura, i.e. fihom, id-dejta hija maqsuma f'taqsimiet u mqassma f'diversi nodi. Huma jeħtieġu denormalizzazzjoni. Dan ifisser li d-dejta mdaħħla trid tiġi kkupjata wkoll diversi drabi biex tirrispondi għat-talbiet speċifiċi li tibgħat. L-għan ġenerali huwa li tinkiseb prestazzjoni għolja billi jitnaqqas in-numru ta 'shards disponibbli waqt il-qari. Dan jimplika li NoSQL jeħtieġ li timmudella l-mistoqsijiet tiegħek, filwaqt li SQL teħtieġ li timmudella d-dejta tiegħek.

NoSQL jiffoka fuq il-kisba ta 'prestazzjoni għolja f'grupp distribwit u dan huwa r-raġuni bażika għal ħafna kompromessi tad-disinn tad-database li jinkludu telf ta' tranżazzjonijiet ACID, JOINs, u indiċijiet sekondarji globali konsistenti.

Hemm argument li filwaqt li d-databases NoSQL jipprovdu skalabbiltà tal-kitba lineari u tolleranza għolja għall-ħsarat, it-telf ta 'garanziji transazzjonali jagħmilhom mhux adattati għal data kritika għall-missjoni.

It-tabella li ġejja turi kif l-immudellar tad-dejta f'NoSQL huwa differenti minn SQL.

Fundamenti tad-Disinn tad-Database - Tqabbil ta' PostgreSQL, Cassandra u MongoDB

SQL u NoSQL: Għaliex it-tnejn huma meħtieġa?

Applikazzjonijiet fid-dinja reali b'numru kbir ta 'utenti, bħal Amazon.com, Netflix, Uber, u Airbnb, għandhom il-kompitu li jwettqu kompiti kumplessi u b'diversi aspetti. Pereżempju, applikazzjoni tal-kummerċ elettroniku bħal Amazon.com teħtieġ li taħżen data ħafifa u kritika għolja bħal informazzjoni tal-utent, prodotti, ordnijiet, fatturi, flimkien ma’ data tqila u inqas sensittiva bħal reviżjonijiet tal-prodotti, messaġġi ta’ appoġġ, attività tal-utent, reviżjonijiet tal-utenti u rakkomandazzjonijiet. Naturalment, dawn l-applikazzjonijiet jiddependu fuq mill-inqas database SQL waħda flimkien ma 'mill-inqas database NoSQL waħda. F'sistemi transreġjonali u globali, database NoSQL topera bħala cache ġeo distribwit għal data maħżuna f'database SQL ta 'sors affidabbli li taħdem f'reġjun wieħed.

Kif YugaByte DB jgħaqqad SQL u NoSQL?

Mibnija fuq magna tal-ħażna mħallta orjentata lejn il-log, auto-sharding, replikazzjoni ta' kunsens imqassam imqassam u tranżazzjonijiet distribwiti ACID (ispirati minn Google Spanner), YugaByte DB hija l-ewwel database ta' sors miftuħ fid-dinja li hija simultanjament kompatibbli ma' NoSQL (Cassandra & Redis) u SQL (PostgreSQL). Kif muri fit-tabella hawn taħt, YCQL, il-YugaByte DB API kompatibbli ma 'Cassandra, iżid il-kunċetti ta' tranżazzjonijiet ACID b'ċavetta waħda u multi-ċavetta u indiċi sekondarji globali għall-API NoSQL, u b'hekk daħħal l-era ta 'databases NoSQL transazzjonali. Barra minn hekk, YCQL, il-YugaByte DB API kompatibbli ma 'PostgreSQL, iżid il-kunċetti ta' skalar ta 'kitba lineari u tolleranza ta' ħsara awtomatika mal-SQL API, u jġib databases SQL distribwiti fid-dinja. Minħabba li YugaByte DB huwa ta 'natura transazzjonali, l-API NoSQL issa tista' tintuża fil-kuntest ta 'dejta kritika għall-missjoni.

Fundamenti tad-Disinn tad-Database - Tqabbil ta' PostgreSQL, Cassandra u MongoDB

Kif intqal qabel fl-artikolu "Nintroduċu YSQL: API SQL Distributed Kompatibbli PostgreSQL għal YugaByte DB", l-għażla bejn SQL jew NoSQL f'YugaByte DB tiddependi kompletament fuq il-karatteristiċi tal-ammont ta 'xogħol sottostanti:

  • Jekk l-ammont ta 'xogħol primarju tiegħek huwa operazzjonijiet JOIN multi-key, allura meta tagħżel YSQL, ifhem li ċ-ċwievet tiegħek jistgħu jitqassmu f'nodi multipli, li jirriżulta f'latency ogħla u/jew throughput aktar baxx minn NoSQL.
  • Inkella, agħżel waħda miż-żewġ APIs NoSQL, filwaqt li żżomm f'moħħok li se tikseb prestazzjoni aħjar bħala riżultat ta 'mistoqsijiet moqdija minn nodu wieħed kull darba. YugaByte DB jista 'jservi bħala database operattiva waħda għal applikazzjonijiet kumplessi tad-dinja reali li jeħtieġu li jimmaniġġjaw ammonti ta' xogħol multipli simultanjament.

Il-laboratorju tal-immudellar tad-Data fit-taqsima li jmiss huwa bbażat fuq databases YugaByte DB kompatibbli mal-API PostgreSQL u Cassandra, għall-kuntrarju tad-databases indiġeni. Dan l-approċċ jenfasizza l-faċilità li jinteraġixxu ma 'żewġ APIs differenti (fuq żewġ portijiet differenti) tal-istess cluster ta' database, għall-kuntrarju tal-użu ta 'clusters kompletament indipendenti ta' żewġ databases differenti.
Fit-taqsimiet li ġejjin, aħna ser nagħtu ħarsa lejn il-laboratorju tal-immudellar tad-dejta biex neżaw id-differenzi u xi wħud mill-komunitajiet tad-databases koperti.

Laboratorju tal-Immudellar tad-Data

Installazzjoni tad-database

Minħabba l-enfasi fuq id-disinn tal-mudell tad-dejta (aktar milli arkitetturi ta 'skjerament kumplessi), aħna ser ninstallaw databases f'kontenituri Docker fuq il-magna lokali u mbagħad jinteraġixxu magħhom billi tuża l-qxur tal-linja tal-kmand rispettivi tagħhom.

Database YugaByte DB kompatibbli PostgreSQL u Cassandra

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

Aċċess tal-linja tal-kmand

Ejja nqabbdu mad-databases billi tuża l-qoxra tal-linja tal-kmand għall-APIs korrispondenti.

PostgreSQL

psql hija qoxra tal-linja tal-kmand għall-interazzjoni ma 'PostgreSQL. Għal faċilità ta 'użu, YugaByte DB jiġi ma psql dritt fil-folder bin.

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

Cassandra

cqlsh hija qoxra tal-linja tal-kmand għall-interazzjoni ma' Cassandra u d-databases kompatibbli tagħha permezz ta' CQL (Cassandra Query Language). Għal faċilità ta 'użu, YugaByte DB jiġi ma cqlsh fil-katalgu bin.
Innota li CQL kien ispirat mill-SQL u għandu kunċetti simili ta 'tabelli, ringieli, kolonni u indiċi. Madankollu, bħala lingwa NoSQL, iżid ċertu sett ta 'limitazzjonijiet, li ħafna minnhom se nkopru wkoll f'artikoli oħra.

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

MongoDB

mongo hija qoxra tal-linja tal-kmand għall-interazzjoni ma 'MongoDB. Jista 'jinstab fid-direttorju tal-bin tal-installazzjoni MongoDB.

docker exec -it my-mongo bash 
cd bin
mongo

Oħloq tabella

Issa nistgħu jinteraġixxu mad-database biex inwettqu diversi operazzjonijiet bl-użu tal-linja tal-kmand. Nibdew billi noħolqu tabella li taħżen informazzjoni dwar kanzunetti miktuba minn artisti differenti. Dawn il-kanzunetti jistgħu jkunu parti minn album. Attributi fakultattivi wkoll għal kanzunetta huma s-sena tar-rilaxx, il-prezz, il-ġeneru u l-klassifikazzjoni. Irridu nikkunsidraw attributi addizzjonali li jistgħu jkunu meħtieġa fil-futur permezz tal-qasam "tags". Jista 'jaħżen data semi-strutturata fil-forma ta' pari ta 'valuri ewlenin.

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

Il-ħolqien ta 'tabella f'Cassandra huwa simili ħafna għal PostgreSQL. Waħda mid-differenzi ewlenin hija n-nuqqas ta' restrizzjonijiet ta' integrità (eż. MHUX NULL), iżda din hija r-responsabbiltà tal-applikazzjoni, mhux id-database NoSQL.. Iċ-ċavetta primarja tikkonsisti f'ċavetta diviżorja (il-kolonna Artist fl-eżempju hawn taħt) u sett ta 'kolonni ta' raggruppament (il-kolonna SongTitle fl-eżempju hawn taħt). Iċ-ċavetta tal-partizzjoni tiddetermina f'liema partizzjoni/shard għandha titqiegħed ir-ringiela, u l-kolonni tar-raggruppament jindikaw kif id-dejta għandha tiġi organizzata fi ħdan il-parti attwali.

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 jorganizza data f'databases (Database) (simili għal Keyspace f'Cassandra), fejn hemm Kollezzjonijiet (simili għal tabelli) li fihom Dokumenti (simili għal ringieli f'tabella). F'MongoDB, bażikament m'hemmx bżonn li tiġi definita skema inizjali. Tim "uża database", muri hawn taħt, tistanzia d-database fl-ewwel sejħa u tibdel il-kuntest għad-database maħluqa ġdida. Anke kollezzjonijiet m'għandhomx għalfejn jinħolqu b'mod espliċitu; huma maħluqa awtomatikament, sempliċiment meta żżid l-ewwel dokument ma' kollezzjoni ġdida. Innota li MongoDB juża d-database tat-test b'mod awtomatiku, għalhekk kwalunkwe operazzjoni fil-livell ta 'ġbir mingħajr ma tispeċifika database speċifika taħdem fuqha b'mod awtomatiku.

use myNewDatabase;

Ikseb informazzjoni dwar tabella
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;

Id-dħul tad-dejta f'tabella
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

Espressjoni ġenerali INSERT f'Cassandra jidher simili ħafna għal dak f'PostgreSQL. Madankollu, hemm differenza waħda kbira fis-semantika. F'Kassandra INSERT fil-fatt hija operazzjoni UPSERT, fejn l-aħħar valuri huma miżjuda mar-ringiela jekk ir-ringiela diġà teżisti.

Id-dħul tad-dejta huwa simili għal PostgreSQL INSERT hawn fuq

.

MongoDB

Anke jekk MongoDB hija database NoSQL bħal Cassandra, l-operazzjoni ta 'inserzjoni tagħha m'għandha xejn komuni mal-imġieba semantika ta' Cassandra. F'MongoDB daħħal () m'għandu l-ebda opportunitajiet UPSERT, li jagħmilha simili għal PostgreSQL. Żieda tad-data default mingħajr _idspecified se jikkawża li dokument ġdid jiġi miżjud mal-kollezzjoni.

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"
}
}
);

Mistoqsija Tabella

Forsi l-aktar differenza sinifikanti bejn SQL u NoSQL f'termini ta 'kostruzzjoni ta' mistoqsija hija l-lingwa użata FROM и WHERE. SQL jippermetti wara l-espressjoni FROM agħżel tabelli multipli, u espressjoni bi WHERE jista' jkun ta' kwalunkwe kumplessità (inklużi operazzjonijiet JOIN bejn it-tabelli). Madankollu, NoSQL għandu tendenza li jimponi limitazzjoni severa fuq FROM, u taħdem biss ma 'tabella speċifikata waħda, u in WHERE, iċ-ċavetta primarja għandha dejjem tkun speċifikata. Dan jorbot mal-ispinta tal-prestazzjoni NoSQL li tkellimna dwarha qabel. Din ix-xewqa twassal għal kull tnaqqis possibbli fi kwalunkwe interazzjoni cross-tabular u cross-key. Tista' tintroduċi dewmien kbir fil-komunikazzjoni bejn in-nodi meta tirrispondi għal talba u għalhekk l-aħjar jiġi evitat b'mod ġenerali. Pereżempju, Cassandra teħtieġ li l-mistoqsijiet ikunu limitati għal ċerti operaturi (biss =, IN, <, >, =>, <=) fuq il-partition keys, ħlief meta jintalab indiċi sekondarju (l-operatur = biss huwa permess hawn).

PostgreSQL

Hawn taħt hemm tliet eżempji ta’ mistoqsijiet li jistgħu faċilment jiġu esegwiti minn database SQL.

  • Uri l-kanzunetti kollha minn artist;
  • Uri l-kanzunetti kollha tal-artist li jaqblu mal-ewwel parti tat-titlu;
  • Uri l-kanzunetti kollha ta’ artist li għandhom ċertu kelma fit-titlu u li għandhom prezz inqas minn 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

Mill-mistoqsijiet PostgreSQL elenkati hawn fuq, l-ewwel waħda biss se taħdem mhux mibdula f'Cassandra, peress li l-operatur LIKE ma jistgħux jiġu applikati għall-clustering columns bħal SongTitle. F'dan il-każ, l-operaturi biss huma permessi = и 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

Kif muri fl-eżempji preċedenti, il-metodu ewlieni għall-ħolqien ta 'mistoqsijiet f'MongoDB huwa db.collection.find (). Dan il-metodu fih espliċitament l-isem tal-kollezzjoni (music fl-eżempju ta' hawn taħt), għalhekk l-istħarriġ ta' kollezzjonijiet multipli huwa pprojbit.

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

Qari kollha ringieli ta 'tabella

Il-qari tar-ringieli kollha huwa sempliċement każ speċjali tal-mudell tal-mistoqsija li ħares lejn aktar kmieni.

PostgreSQL

SELECT * 
FROM Music;

Cassandra

Simili għall-eżempju PostgreSQL hawn fuq.

MongoDB

db.music.find( {} );

Editjar tad-dejta f'tabella

PostgreSQL

PostgreSQL jipprovdi struzzjonijiet UPDATE biex tibdel id-data. Hija m'għandha l-ebda opportunitajiet UPSERT, għalhekk din id-dikjarazzjoni tfalli jekk ir-ringiela ma tibqax fid-database.

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

Cassandra

Cassandra għandha UPDATE simili għal PostgreSQL. UPDATE għandha l-istess semantika UPSERT, simili INSERT.

Simili għall-eżempju PostgreSQL hawn fuq.

MongoDB
Operazzjoni aġġornament () f'MongoDB jistgħu jaġġornaw kompletament dokument eżistenti jew jaġġornaw biss ċerti oqsma. B'mod awtomatiku, taġġorna biss dokument wieħed bis-semantika diżattivata UPSERT. Aġġornament ta 'dokumenti multipli u mġiba simili UPSERT jistgħu jiġu applikati billi jiġu stabbiliti bnadar addizzjonali għall-operazzjoni. Per eżempju, fl-eżempju hawn taħt, il-ġeneru ta 'artist speċifiku huwa aġġornat ibbażat fuq il-kanzunetta tiegħu.

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

Tneħħija tad-dejta minn tabella

PostgreSQL

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

Cassandra

Simili għall-eżempju PostgreSQL hawn fuq.

MongoDB

MongoDB għandu żewġ tipi ta' operazzjonijiet biex iħassar id-dokumenti - deleteOne() / deleteMany() и neħħi (). Iż-żewġ tipi jħassru dokumenti iżda jirritornaw riżultati differenti.

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

Ħassar tabella

PostgreSQL

DROP TABLE Music;

Cassandra

Simili għall-eżempju PostgreSQL hawn fuq.

MongoDB

db.music.drop();

Konklużjoni

Id-dibattitu dwar l-għażla bejn SQL u NoSQL ilu għaddej għal aktar minn 10 snin. Hemm żewġ aspetti ewlenin għal dan id-dibattitu: arkitettura tal-magna tad-database (monolitika, SQL transazzjonali vs NoSQL distribwit, mhux transazzjonali) u approċċ tad-disinn tad-database (immudellar tad-dejta tiegħek f'SQL vs immudellar tal-mistoqsijiet tiegħek f'NoSQL).

B'database transazzjonali distribwita bħal YugaByte DB, id-dibattitu dwar l-arkitettura tad-database jista 'jitwaqqaf faċilment. Hekk kif il-volumi tad-dejta jsiru akbar minn dak li jista 'jinkiteb f'nodu wieħed, issir meħtieġa arkitettura distribwita bis-sħiħ li tappoġġja l-iskalabbiltà tal-kitba lineari bi sharding/ibbilanċjar awtomatiku.

Barra minn hekk, kif intqal f'wieħed mill-artikoli Google Cloud,Arkitetturi transazzjonali, konsistenti ħafna issa huma aktar ,użati biex jipprovdu b'aġilità ta 'żvilupp aħjar minn arkitetturi mhux transazzjonali, ,eventwalment konsistenti.

Niġu lura għad-diskussjoni tad-disinn tad-database, huwa ġust li wieħed jgħid li ż-żewġ approċċi tad-disinn (SQL u NoSQL) huma meħtieġa għal kwalunkwe applikazzjoni kumplessa fid-dinja reali. L-approċċ tal-"immudellar tad-dejta" SQL jippermetti lill-iżviluppaturi jissodisfaw aktar faċilment ir-rekwiżiti tan-negozju li qed jinbidlu, filwaqt li l-approċċ tal-"mudellar tal-mistoqsijiet" NoSQL jippermetti lill-istess żviluppaturi joperaw fuq volumi kbar ta 'dejta b'latenza baxxa u throughput għoli. Huwa għal din ir-raġuni li YugaByte DB jipprovdi APIs SQL u NoSQL f'qalba komuni, aktar milli jippromwovi wieħed mill-approċċi. Barra minn hekk, billi tipprovdi kompatibilità ma’ lingwi ta’ database popolari inklużi PostgreSQL u Cassandra, YugaByte DB jiżgura li l-iżviluppaturi ma jkollhomx għalfejn jitgħallmu lingwa oħra biex jaħdmu b’magna ta’ database mqassma u konsistenti ħafna.

F'dan l-artikolu, ħares lejn kif il-prinċipji fundamentali tad-disinn tad-database huma differenti bejn PostgreSQL, Cassandra u MongoDB. F'artikoli futuri, ser nidħlu f'kunċetti ta' disinn avvanzati bħal indiċi, tranżazzjonijiet, JOINs, direttivi TTL, u dokumenti JSON.

Nawgurawlkom mistrieħ mill-isbaħ tal-weekend u nistednukom webinar b'xejn, li se ssir fl-14 ta’ Mejju.

Sors: www.habr.com

Żid kumment