Берилиштер базасынын дизайн негиздери - PostgreSQL, Кассандра жана MongoDB салыштыруу

Салам достор. Май майрамынын экинчи бөлүгүнө кетердин алдында курста жаңы агымдын башталышын утурлай которгон материалды сиздер менен бөлүшөбүз. "Реляциялык DBMS".

Берилиштер базасынын дизайн негиздери - PostgreSQL, Кассандра жана MongoDB салыштыруу

Тиркемени иштеп чыгуучулар бир нече оперативдүү маалымат базаларын салыштырууга көп убакыт коротушат, ал эң ылайыктуу жүктөмгө эң туура келгенин тандоо үчүн. Муктаждыктарга жөнөкөйлөтүлгөн маалыматтарды моделдөө, транзакциялык кепилдиктер, окуу/жазуу көрсөткүчтөрү, горизонталдуу масштабдоо жана каталарга сабырдуулук кирет. Адаттагыдай, тандоо маалымат базасы категориясынан башталат, SQL же NoSQL, анткени ар бир категорияда ачык-айкын соодалашуулар бар. Төмөнкү кечигүү жана жогорку өткөрүү жөндөмдүүлүгү боюнча жогорку аткаруу жалпысынан соода-сатыксыз талап катары каралат жана ошондуктан ар кандай үлгүдөгү маалымат базасы үчүн маанилүү.

Бул макаланын максаты колдонмону иштеп чыгуучуларга тиркемелердин берилиштерин моделдөө контекстинде SQL жана NoSQL ортосунда туура тандоо жасоого жардам берүү болуп саналат. Биз бир SQL маалымат базасын, тактап айтканда PostgreSQLди жана эки NoSQL маалымат базасын, Кассандра жана MongoDB карап чыгабыз, таблицаларды түзүү, аларды толтуруу, таблицадан берилиштерди окуу жана аны жок кылуу сыяктуу маалыматтар базасын долбоорлоонун негиздерин камтыйт. Кийинки макалада биз индекстерди, транзакцияларды, JOINдерди, TTL директиваларды жана JSON негизиндеги маалымат базасынын дизайнын сөзсүз карайбыз.

SQL жана NoSQL ортосунда кандай айырма бар?

SQL маалымат базалары ACID транзакциялык кепилдиктери аркылуу тиркеменин ийкемдүүлүгүн жогорулатат, ошондой эле алардын учурдагы нормалдаштырылган реляциялык маалымат базасынын моделдеринин үстүнө күтүлбөгөн жолдор менен JOIN аркылуу маалыматтарды суроо мүмкүнчүлүгүн жогорулатат.

Алардын монолиттүү/бир түйүндүү архитектурасын жана ашыкча иштөө үчүн мастер-кул репликация моделин колдонууну эске алуу менен, салттуу SQL маалымат базаларында эки маанилүү өзгөчөлүк жок - сызыктуу жазуу масштабдуулугу (б.а. бир нече түйүн боюнча автоматтык түрдө бөлүү) жана автоматтык/нөлдүк маалыматтарды жоготуу. Бул алынган маалыматтардын көлөмү бир түйүндүн максималдуу жазуу өткөрүү жөндөмдүүлүгүнөн ашпашы керек дегенди билдирет. Мындан тышкары, кээ бир убактылуу маалыматтардын жоготуулары катага чыдамдуулукту эске алуу керек (бөлүштүрүлгөн эч нерсе жок архитектурада). Бул жерде сиз акыркы милдеттенмелер кул көчүрмөсүндө чагылдырыла элек экенин эстен чыгарбашыңыз керек. SQL маалымат базаларында иштебей турган жаңыртууларга жетишүү да кыйын.

NoSQL маалымат базалары адатта табияты боюнча бөлүштүрүлөт, б.а. аларда маалыматтар бөлүктөргө бөлүнөт жана бир нече түйүндөр боюнча бөлүштүрүлөт. Алар нормалдаштырууну талап кылат. Бул сиз жөнөткөн конкреттүү суроо-талаптарга жооп берүү үчүн киргизилген маалыматтар дагы бир нече жолу көчүрүлүшү керек дегенди билдирет. Жалпы максат - окуу учурунда жеткиликтүү сыныктардын санын азайтуу аркылуу жогорку өндүрүмдүүлүктү алуу. Бул NoSQL сиздин сурооңузду моделдешиңизди талап кылат, ал эми SQL маалыматыңызды моделдешиңизди талап кылат.

NoSQL бөлүштүрүлгөн кластерде жогорку өндүрүмдүүлүккө жетишүүгө багытталган жана бул ACID транзакциясынын жоготууларын, JOINдерди жана ырааттуу глобалдык экинчилик индекстерди камтыган көптөгөн маалыматтар базасынын дизайнын алмаштыруунун негизги жүйөсү болуп саналат.

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, Cassandra менен шайкеш келген YugaByte DB API, NoSQL APIге бир жана көп ачкычтуу ACID транзакцияларынын жана глобалдык экинчилик индекстердин түшүнүктөрүн кошуп, ошону менен транзакциялык NoSQL маалымат базаларынын доорун ачат. Кошумчалай кетсек, YCQL, PostgreSQL менен шайкеш келген YugaByte DB API, SQL API'ге сызыктуу жазуу масштабы жана автоматтык катачылыкка чыдамкайлык түшүнүктөрүн кошуп, дүйнөгө бөлүштүрүлгөн SQL маалымат базаларын алып келет. YugaByte DB транзакциялык мүнөзгө ээ болгондуктан, NoSQL API азыр миссия үчүн маанилүү маалыматтардын контекстинде колдонулушу мүмкүн.

Берилиштер базасынын дизайн негиздери - PostgreSQL, Кассандра жана MongoDB салыштыруу

Макалада мурда айтылгандай "YSQL менен тааныштыруу: YugaByte DB үчүн PostgreSQL менен шайкеш бөлүштүрүлгөн SQL API", YugaByte ДБдагы SQL же NoSQL ортосундагы тандоо толугу менен негизги жүктүн өзгөчөлүктөрүнө жараша болот:

  • Эгерде сиздин негизги иш жүгүңүз көп баскычтуу JOIN операциялары болсо, анда YSQLди тандап жатканда, ачкычтарыңыз бир нече түйүндөр боюнча бөлүштүрүлүшү мүмкүн экенин түшүнүңүз, натыйжада NoSQLге караганда кечигүү жана/же өткөрүү жөндөмдүүлүгү жогору болот.
  • Болбосо, эки NoSQL API'нин бирин тандаңыз, бир эле учурда бир түйүндөн кызмат кылган сурамдардын натыйжасында жакшыраак иштешиңизди унутпаңыз. YugaByte DB бир эле учурда бир нече жумуш жүгүн башкарууга муктаж болгон реалдуу, татаал тиркемелер үчүн бирдиктүү оперативдүү маалымат базасы катары кызмат кыла алат.

Кийинки бөлүмдөгү Маалыматтарды моделдөө лабораториясы жергиликтүү маалымат базаларынан айырмаланып, PostgreSQL жана Cassandra API шайкеш YugaByte DB маалымат базаларына негизделген. Бул ыкма эки башка маалымат базаларынын толугу менен көз карандысыз кластерлерин колдонуудан айырмаланып, бир эле маалымат базасы кластеринин эки башка API менен (эки башка портто) өз ара аракеттенүүнүн жеңилдигин баса белгилейт.
Кийинки бөлүмдөрдө биз камтылган маалымат базаларынын айырмачылыктарын жана айрым жалпы жактарын көрсөтүү үчүн маалыматтарды моделдөө лабораториясын карап чыгабыз.

Маалыматтарды моделдөө лабораториясы

Маалымат базасын орнотуу

Берилиштер моделинин дизайнына басым жасоону эске алуу менен (татаал жайылтуу архитектураларына караганда) биз жергиликтүү машинадагы Docker контейнерлерине маалымат базаларын орнотуп, андан кийин алар менен тиешелүү буйрук сабынын кабыктарын колдонуп иштешебиз.

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'лер үчүн буйрук сабынын кабыгын колдонуп, маалымат базаларына туташалы.

PostgreSQL

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 менен өз ара аракеттенүү үчүн буйрук сабынын кабыгы. Аны 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ге абдан окшош. Негизги айырмачылыктардын бири - бүтүндүк чектөөлөрүнүн жоктугу (мисалы, NO 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

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

MongoDB

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

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

Мурунку мисалдарда көрсөтүлгөндөй, 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 мисалына окшош.

MongoDB

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
операция жаңыртуу () 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

MongoDBде документтерди жок кылуу боюнча операциялардын эки түрү бар deleteOne() /deleteMany() и алып салуу (). Эки түрү тең документтерди жок кылат, бирок башка натыйжаларды берет.

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

Таблица жок кылынууда

PostgreSQL

DROP TABLE Music;

Кассандра

Жогорудагы PostgreSQL мисалына окшош.

MongoDB

db.music.drop();

жыйынтыктоо

SQL жана NoSQL ортосунда тандоо боюнча талаш-тартыштар 10 жылдан ашык убакыттан бери уланып келет. Бул талаш-тартыштын эки негизги аспектиси бар: маалымат базасы кыймылдаткычынын архитектурасы (монолиттик, транзакциялык SQL жана бөлүштүрүлгөн, транзакциялык эмес NoSQL) жана маалымат базасын долбоорлоо ыкмасы (SQLдеги маалыматтарыңызды моделдөө жана NoSQLде сурамдарды моделдөө).

YugaByte DB сыяктуу бөлүштүрүлгөн транзакциялык маалымат базасы менен маалымат базасынын архитектурасы жөнүндө талаш-тартыштарды оңой эле токтотсо болот. Берилиштердин көлөмү бир түйүнгө жазыла тургандан чоңойгон сайын, автоматтык түрдө бөлүштүрүү/калыбына келтирүү менен сызыктуу жазуу масштабдуулугун колдогон толук бөлүштүрүлгөн архитектура зарыл болуп калат.

Мындан тышкары, макалалардын биринде айтылгандай Google Cloud,Транзакциялык, катуу ырааттуу архитектуралар азыр транзакциялык эмес, акыры ырааттуу архитектураларга караганда өнүгүүнүн жакшыраак шамдагайлыгын камсыз кылуу үчүн көбүрөөк колдонулат.

Берилиштер базасынын дизайнын талкуулоого кайра келе турган болсок, эки долбоорлоо ыкмалары (SQL жана NoSQL) ар кандай татаал реалдуу тиркемелер үчүн зарыл деп айтуу туура болот. SQL "маалыматтарды моделдөө" ыкмасы иштеп чыгуучуларга бизнестин өзгөргөн талаптарын оңой канааттандырууга мүмкүндүк берет, ал эми NoSQL "суроо моделдөө" ыкмасы ошол эле иштеп чыгуучуларга аз күтүү жана жогорку өткөрүү жөндөмдүүлүгү менен чоң көлөмдөгү маалыматтарды иштетүүгө мүмкүндүк берет. Дал ушул себептен улам, YugaByte DB ыкмалардын бирин илгерилетпей, SQL жана NoSQL API'лерин жалпы өзөктө камсыз кылат. Кошумчалай кетсек, PostgreSQL жана Cassandra сыяктуу популярдуу маалымат базасы тилдери менен шайкештикти камсыз кылуу менен, YugaByte DB иштеп чыгуучуларга бөлүштүрүлгөн, жогорку ырааттуу маалымат базасы кыймылдаткычы менен иштөө үчүн башка тилди үйрөнүүнүн кереги жок экенин камсыздайт.

Бул макалада биз маалымат базасынын дизайн негиздери PostgreSQL, Cassandra жана MongoDB ортосунда кандайча айырмаланарын карап чыктык. Келечектеги макалаларда биз индекстер, транзакциялар, JOINдер, TTL директивалары жана JSON документтери сыяктуу өркүндөтүлгөн дизайн концепцияларына кирип чыгабыз.

Дем алыш күндөрүндө жакшы эс алууну каалайбыз жана сиздерди майрамга чакырабыз акысыз вебинар, ал 14-майда болот.

Source: www.habr.com

Комментарий кошуу