Ma'lumotni modellashtirish asoslari - PostgreSQL va boshqalar. Cassandra va MongoDB

Ilovalarni ishlab chiquvchilar odatda ularning yuklamalari ehtiyojlariga eng mos keladigan bitta ma'lumotlar bazasini topish uchun ko'pgina operatsion ma'lumotlar bazalarini baholash uchun ko'p vaqt sarflashadi. Ushbu ehtiyojlar soddalashtirilgan ma'lumotlarni modellashtirish, tranzaktsion kafolatlar, o'qish / yozish samaradorligi, gorizontal o'lchov va xatolarga bardoshlilikni o'z ichiga oladi. An'anaga ko'ra, ushbu tanlov SQL vs. NoSQL ma'lumotlar bazasi kategoriyalaridan boshlanadi, chunki har bir toifada aniq savdolar to'plami mavjud. Kechikish va yuqori o'tkazuvchanlik jihatidan yuqori ishlash odatda siqilmaydigan talab sifatida qabul qilinadi va shuning uchun tanlangan har qanday ma'lumotlar bazasida kutiladi.

Ushbu maqola dastur ishlab chiquvchilariga SQL va NoSQL-ni tanlovni ma'lumot modellashtirish ehtiyojlari kontekstida tushunishga yordam berishdan iborat. Ma'lumotlar modellashtirish asoslarini jadvallarni yaratish, ma'lumotlarni kiritish, skanerlash va ma'lumotlarni o'chirish kabi tushuntirish uchun misol sifatida biz bitta SQL ma'lumotlar bazasini, ya'ni PostgreSQL va 2 NoSQL ma'lumotlar bazasini, ya'ni Cassandra va MongoDB-ni ishlatamiz. Keyingi postda biz indekslar, tranzaktsiyalar, qo'shilishlar, jonli (TTL) direktivalar va JSON-ga asoslangan hujjat ma'lumotlarini modellashtirish kabi ilg'or mavzularni qamrab olamiz.

Ma'lumotni modellashtirishda SQL dan NoSQL qanday farq qiladi?

SQL ma'lumotlar bazalari ACID tranzaktsion kafolatlari orqali, shuningdek, mavjud normallashgan relyatsion ma'lumotlar modellarining yuqori qismida kutilmagan tarzda JOIN-dan foydalanib ma'lumotlarni so'rash qobiliyatini oshirib, dasturlarni tezlashtiradi.

Ularning monolitik / bitta tugunli arxitekturasi va ko'paytirish uchun master-qul nusxasini ko'paytirish modelidan foydalanishni hisobga olgan holda an'anaviy SQL ma'lumotlar bazalarida ikkita muhim imkoniyat yo'q - chiziqli yozishning ko'lamliligi (ya'ni, bir nechta tugunlarni avtomatik ravishda silkitib qo'yish) va ma'lumotlarning avtomatik / nol qiymatini yo'qotish. Bu shuni anglatadiki, yuborilgan ma'lumotlar hajmi bitta tugunning maksimal yozish qobiliyatidan oshmaydi. Bunga qo'shimcha ravishda, yaqinda bajarilgan majburiyatlar qul replikatsida ko'rsatilmaganligini hisobga olib, ba'zi vaqtinchalik ma'lumotlar yo'qotilishini kutish kerak. SQL ma'lumotlar bazasi dunyosida nol darajadagi yangilanishlarga erishish juda qiyin.

NoSQL ma'lumotlar bazasi odatda tabiatda taqsimlanadi, bu erda ma'lumotlar bir nechta tugunlarga bo'linadi yoki saqlanadi. Ular denormalizatsiya qilishni buyuradilar, ya'ni kiritilgan ma'lumotlarni eslab qolgan aniq so'rovlarga xizmat qilish uchun bir necha marta nusxalash kerak. Maqsad, o'qiyotgan vaqt davomida kirish mumkin bo'lgan shardlar sonini aniq kamaytirish orqali yuqori ko'rsatkichlarga erishish. Demak, NoSQL sizning so'rovlaringizni modellashtirishingizni talab qiladi, SQL esa sizning ma'lumotlaringizni modellashtirishingizni talab qiladi.

NoSQL-ning taqsimlangan klasterda yuqori ko'rsatkichlarga erishishga yo'naltirilganligi ACID tranzaktsiyalarining yo'qolishi, JOIN va izchil global ikkilamchi indekslarni o'z ichiga oladigan ko'p sonli modellashtirish murosalari uchun asosiy sabab sifatida ko'rsatilgan.

Umumiy tushuncha shundan iboratki, NoSQL ma'lumotlar bazasi chiziqli yozish hajmini va yuqori xatolarga bardoshliligini ta'minlasa ham, tranzaktsion kafolatlar yo'qolishi ularni vazifa-tanqidiy ma'lumotlar uchun yaroqsiz holga keltiradi.

Quyidagi jadvalda NoSQL-ni modellashtirish SQL-dan qanday farq qilishi haqida ma'lumotlar mavjud.

SQL vs. NoSQL - Modellashtirishning asosiy farqlari

SQL va NoSQL: Nega ikkalangiz ham kerak?

Amazon.com, Netflix, Uber va Airbnb kabi foydalanuvchi tajribasini jalb qiladigan haqiqiy dunyodagi ko'plab amaliy dasturlar bir nechta ish yukining murakkab aralashmasidan quvvatlanadi. Masalan Amazon.com kabi elektron tijorat ilovasi past hajmli, yuqori darajadagi muhim, masalan, foydalanuvchilar, mahsulotlar, buyurtmalar, schyot-fakturalarni mahsulotni ko'rib chiqish, yordam paneli xabarlari, yuqori hajmli va kam topshiriqli ma'lumotlar bilan birga saqlashi kerak. foydalanuvchi faoliyati, foydalanuvchi tavsiyalari. Tabiiyki, ushbu ilovalar kamida bitta SQL ma'lumotlar bazasiga va kamida bitta NoSQL ma'lumotlar bazasiga suyanadi. Ko'p mintaqaviy va global miqyosda, NoSQL ma'lumotlar bazasi haqiqat manbasida saqlanadigan ma'lumotlarning yagona mintaqada ishlaydigan SQL ma'lumotlar bazasi uchun taqsimlangan kesh vazifasini bajaradi.

Qanday qilib YugaByte MB SQL va NoSQL ni umumiy ma'lumotlar bazasida birlashtiradi?

Tizimli tuzilgan birlashtirishni saqlash vositasi, avto-sharding, per-shard bo'yicha taqsimlangan konsensusni ko'paytirish va ACID bitimlarini tarqatish (Google Spanner-dan ilhomlangan) noyob kombinatsiyasi asosida qurilgan, YugaByte DB dunyodagi birinchi ochiq manbali ma'lumotlar bazasi bo'lib, u ham NoSQL (Cassandra & Redis) hisoblanadi. mos) va SQL (PostgreSQL muvofiq) bir vaqtning o'zida. Quyidagi jadvalda ko'rsatilgandek, YCQL, YugaByte MB ning Cassandra-ga mos keladigan API, bitta kalitli va ko'p kalitli ACID operatsiyalari va global ikkilamchi indekslarni NoSQL API-lariga qo'shadi va shu bilan Transactional NoSQL davriga kirib boradi. Bundan tashqari, YSQL, YugaByte DB-ning PostgreSQL-ga mos keladigan API, SQL API-ga chiziqli yozish miqyosi va avtoulovlarga bardoshlilik tushunchalarini qo'shadi, shu bilan Distribution SQL dunyosi paydo bo'ladi. YugaByte MB juda muhim tranzaktsion bo'lgani uchun, endi NoSQL API-lar ham vazifa-kritik ma'lumotlar kontekstida ishlatilishi mumkin.

YugaByte DB - yagona ma'lumotlar bazasi bazasida SQL va NoSQL

Oldin YSQL bilan tanishtirishda aytilganidek: YugaByte MB uchun PostgreSQL-ga mos taqsimlangan SQL API, YugaByte MB-da SQL va NoSQL-ni tanlash to'liq ish yukining xususiyatlariga bog'liq.

  • Agar ko'pchilik ish yuki JOINS bilan ko'p tugmachali operatsiyalar bo'lsa, unda YSQL-ni tanlang, bu sizning tugmachalaringiz NoSQL-ga qaraganda yuqori kutish va / yoki past o'tkazuvchanlikka olib keladigan bir nechta tugunlarga taqsimlanishi mumkin.
  • Aks holda, ikkala NoSQL API-ni tanlang, shunda so'rovlar natijasida bir vaqtning o'zida bitta tugunga xizmat ko'rsatish natijasida yuqori samaraga erishasiz. YugaByte MB, bir vaqtning o'zida boshqarish uchun bir nechta ish yukiga ega bo'lgan murakkab real dasturlar uchun birlashtirilgan operatsion ma'lumotlar bazasi bo'lib xizmat qilishi mumkin.

Keyingi qismdagi ma'lumotlarni modellashtirish laboratoriyasi asl ma'lumotlar bazasidan farqli ravishda YugaByte MB ning PostgreSQL va Cassandra bilan mos keladigan API-lariga asoslangan. Ushbu yondashuv ikki xil ma'lumotlar bazalarining mutlaqo mustaqil klasterlarini ishlatishdan farqli o'laroq, bitta ma'lumotlar bazasi klasterining ikki xil API (ikki xil portda) bilan o'zaro ishlashning soddaligini ta'kidlaydi.

Keyingi bo'limlarda biz turli xil ma'lumotlar bazalari o'rtasidagi farqlar va bir nechta o'xshashliklarni aks ettirish uchun laboratoriyada ma'lumotlarni modellashtirishni ko'rib chiqamiz.

Ma'lumotlarni modellashtirish laboratoriyasi

Ma'lumotlar bazalarini o'rnating

Ma'lumotni modellashtirishga e'tiborni qaratgan holda (va murakkab joylashish arxitekturasiga emas), biz ma'lumotlar bazalarini mahalliy mashinalarimizga Docker konteynerlariga o'rnatamiz va keyin buyruqlar satridan foydalanib ular bilan o'zaro aloqada bo'lamiz.

YugaByte DB, PostgreSQL va Cassandra bilan mos keladigan ma'lumotlar bazasi

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

MongoDB

docker run - nomi my-mongo -d mongo: so'nggi

Shell buyrug'i yordamida kirish

Keyingi tegishli API uchun buyruq satri qobig'idan foydalangan holda ma'lumotlar bazalariga ulanamiz.

PostgreSQL

psql - bu PostgreSQL bilan o'zaro ishlash uchun buyruq satrining qobig'i. Foydalanish qulayligi uchun, YugaByte DB o'zining katalogida psql versiyasini taqdim etadi.

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

Kassandra

cqlsh - Cassandra va unga mos keladigan ma'lumotlar bazalari bilan CQL (Cassandra Query Language) orqali o'zaro ishlash uchun buyruq satrining qobig'i. Foydalanish qulayligi uchun, YugaByte DB o'zining katalogida cqlsh versiyasini yuboradi.

E'tibor bering, CQL jadvallar, satrlar, ustunlar va indekslarning o'xshash tushunchasiga ega bo'lgan SQL-dan ilhomlangan. Ammo, NoSQL tili sifatida, cheklovlarning ma'lum bir to'plamini qo'shib qo'yadi, ularning ko'plarini bloglar qatorida ko'rib chiqamiz.

docker Exec -it yb-tserver-n1 / home / yugabayt / bin / cqlsh

MongoDB

mongo - bu MongoDB bilan o'zaro ishlash uchun buyruq satri qobig'i. Buni MongoDB-ning o'rnatilishi qutidagi katalogdan topish mumkin.

docker exec -it my-mongo bash
CD qutisi
mongo

Jadval yarating

Endi biz buyruqlar satri qobig'idan foydalanib, turli xil operatsiyalar uchun ma'lumotlar bazasi bilan o'zaro bog'lanishimiz mumkin. Rassomlar tomonidan e'lon qilingan qo'shiqlar haqidagi ma'lumotlarni saqlaydigan jadval yaratishni boshlaylik. Ushbu qo'shiqlar ba'zan albomning bir qismidir. Qo'shiqning boshqa ixtiyoriy xususiyatlari - bu yil, narx, janr va tanqidchi reytingidir. Yarim tuzilgan ma'lumotlarni kalit-qiymat juftlari sifatida saqlashi mumkin bo'lgan 'teglar' maydoni orqali kelajakda bizga kerak bo'lishi mumkin bo'lgan qo'shimcha xususiyatlarni hisobga olishimiz kerak.

PostgreSQL

Jadval yaratish Musiqasi (
    Rassom VARCHAR (20) NULL EMAS,
    SongTitle VARCHAR (30) NULL emas,
    AlbumTitle VARCHAR (25),
    Yil INT,
    FLOAT narxi,
    VARCHAR janri (10),
    Tanqidchi FLOAT,
    TEXT teglari,
    PRIMARY KEY (Artist, SongTitle)
);

Kassandra

Cassandra-da jadval yaratish PostgreSQL-ga juda o'xshash. Bitta katta farq - bu butunlikni cheklashning yo'qligi (masalan, NULL emas), bu NoSQL dunyosidagi ma'lumotlar bazasi emas, balki ilovaning javobgarligi hisoblanadi. Birlamchi kalit qism tugmachasidan (quyida keltirilgan rasmdagi Ijrochi ustuni) va klasterli ustunlar to'plamidan (quyidagi rasmdagi SongTitle ustunidan) iborat. Bo'lim tugmachasi satrni qaysi qism / qismga bo'lish kerakligini va klasterli ustunlar berilgan shard ichidagi ma'lumotlarni qanday tartibga solish kerakligini belgilaydi.

KEYSPACE dasturini yarating;
Myapp-dan FOYDALANING;
Jadval yaratish Musiqasi (
    TEXT rassomi,
    SongTitle TEXT,
    AlbumTitle TEXT,
    Yil INT,
    FLOAT narxi,
    TEXT janri,
    Tanqidchi FLOAT,
    TEXT teglari,
    PRIMARY KEY (Ijrochi, SongTitle)
);

MongoDB

MongoDB Hujjatlarga ega bo'lgan (jadvaldagi qatorga ekvivalent) To'plamlarga ega (Cassandra Keyspace-ga teng) ma'lumotlar bazasida ma'lumotlarni tashkil qiladi. "Sxematik" ma'lumotlar bazasi sifatida MongoDB-da sxemani oldindan belgilash kerak emas. Quyida ko'rsatilgan "foydalanish ma'lumotlar bazasi" buyrug'i ma'lumotlar bazasini birinchi marta ishga tushirishga yordam beradi va yangi yaratilgan ma'lumotlar bazasiga kontekstni o'zgartirish bilan bir vaqtda. To'plamlarni ham aniq yaratish kerak emas, aksincha birinchi hujjatni yangi to'plamga kiritish orqali avtomatik ravishda yaratiladi. Shuni esda tutingki, MongoDB standart ma'lumotlar bazasi sinovdir, shuning uchun ma'lumotlar bazasini ko'rsatmasdan bajariladigan yig'ish darajasidagi har qanday operatsiya ushbu standart kontekstda bajariladi.

myNewDatabase-dan foydalanish;

Jadval haqida ma'lumot oling

PostgreSQL

\ d Musiqa
"Public.music" jadvali
    Ustun | Turi | Taqqoslash | Nullable | Standart
-------------- + ----------------------- + ----------- + ---------- + --------
 rassom | belgi o'zgaruvchan (20) | | null emas |
 songtitle | belgi o'zgaruvchan (30) | | null emas |
 albumtitle | belgi o'zgaruvchan (25) | | |
 yil | butun son | | |
 narxlari | ikki aniqlik | | |
 janr | belgi o'zgaruvchan (10) | | |
 tanqid | ikki aniqlik | | |
 teglar | matn | | |
Indekslar:
    "music_pkey" PRIMARY KEY, btree (ijrochi, qo'shiqchi)

Kassandra

JINSIY MUSIQANI DESCRIBE;
Myapp.music TABLE yarating (
    rassom matni,
    qo'shiq matni matni,
    albom sarlavhasi matni,
    yil int,
    narx o'zgarishi,
    janr matni,
    teglar matni,
    PRIMARY KEY (qo'shiqchi, qo'shiqchi)
) Buyurtma BERISh BILAN (ASC qo'shig'i)
    VA default_time_to_live = 0
    VA tranzaktsiyalar = {'yoqilgan': 'noto'g'ri'};

MongoDB

myNewDatabase-dan foydalanish;
to'plamlarni namoyish qilish;

Jadvalga ma'lumotlarni joylashtiring

PostgreSQL

INSERT INTO Musiqa
    (Artist, SongTitle, AlbumTitle,
    Yil, narx, janr, tanqidiy baho,
    Teglar)
QIYMATLAR(
    "Siz taniydigan hech kim", "Bugunga qo'ng'iroq qiling", "Bir oz taniqli",
    2015, 2.14, 'Mamlakat', 7.8,
    '{"Bastakorlar": ["Smit", "Jons", "Devis"], "LengthInSeconds": 214}'
);
INSERT INTO Musiqa
    (Artist, SongTitle, AlbumTitle,
    Narx, janr, tanqidchi)
QIYMATLAR(
    "Siz biladigan hech kim", "Mening itimning joyi", "Hey hozir",
    1.98, 'Mamlakat', 8.4
);
INSERT INTO Musiqa
    (Artist, SongTitle, AlbumTitle,
    Narxi, janri)
QIYMATLAR(
    "Acme Band", "Qarang, dunyo", "Buck bu erda boshlanadi",
    0.99, 'Rok'
);
INSERT INTO Musiqa
    (Artist, SongTitle, AlbumTitle,
    Narxi, janri,
    Teglar)
QIYMATLAR(
    "Acme Band", "Hali ham sevadi", "Buck shu erda boshlanadi",
    2.47, "Rok",
    '{"radioStationsPlaying": ["KHCR", "KBQX", "WTNR", "WJJH"], "tourDates": {"Sietl": "20150625", "Klivlend": "20150630"}, "aylanish": Og'ir} '
);

Kassandra

Cassandra INSERT bayonotlari umuman olganda PostgreSQL bayonotiga juda o'xshash. Ammo semantikada bitta katta farq bor. INSERT aslida Cassandra-dagi yuqori darajadagi operatsiya bo'lib, unda satr allaqachon mavjud bo'lsa, qator so'nggi qiymatlar bilan yangilanadi.

Yuqoridagi PostgreSQL INSERT bayonotlari bilan bir xil.

MongoDB

MongoDB ham Cassandra-ga o'xshash NoSQL ma'lumotlar bazasiga ega bo'lsa ham, uni kiritish jarayoni Cassandra bilan bir xil semantik xatti-harakatlarga ega emas. MongoDB insert () -ni PostgreSQL-ga o'xshash qilish uchun hech qanday yangi imkoniyat yo'q. Belgilanmagan odatiy kiritish harakati, to'plamga yangi hujjat qo'shilishiga olib keladi.

db.music.insert ({
rassom: "Siz taniydigan hech kim",
   songTitle: "Bugun menga qo'ng'iroq qiling",
    albumTitle: "Biroz mashhur",
    yil: 2015,
    narx: 2.14,
    janr: "Mamlakat",
    teglar: {
Bastakorlar: ["Smit", "Jons", "Devis"],
LengthInSekundlar: 214
}
   }
);
db.music.insert ({
    rassom: "Siz taniydigan hech kim",
    songTitle: "Mening itimning joyi",
    albumTitle: "Hey Endi",
    narx: 1.98,
    janr: "Mamlakat",
    tanqidiy: 8.4
   }
);
db.music.insert ({
    rassom: "The Acme Band",
    songTitle: "Qarang, dunyo",
    albumTitle: "Buck bu erda boshlanadi",
    narx: 0.99,
    janr: "Rok"
   }
);
db.music.insert ({
    rassom: "The Acme Band",
    songTitle: "Hali ham oshiq",
    albumTitle: "Buck bu erda boshlanadi",
    narx: 2.47,
    janr: "Rok",
    teglar: {
        radiostansiyalarni ijro etish: ["KHCR", "KBQX", "WTNR", "WJJH"],
        tur kunlari: {
            Sietl: "20150625",
            Klivlend: "20150630"
        },
        aylanish: "og'ir"
}
    }
);

Jadvalga savol bering

Ehtimol, SQL va NoSQL o'rtasidagi so'rovlar modellashtirish nuqtai nazaridan eng muhim farq FROM va WHERE bo'limlaridan foydalanishdir. SQL FROM so'zlariga bir nechta jadvallarni va WHERE so'zlarini o'zboshimchalik bilan murakkablashtirishga imkon beradi (jadvallar bo'ylab JOINlarni qo'shgan holda). Shunga qaramay, NoSQL faqat bitta jadvalni belgilash uchun va WHERE qayerda bo'lsa ham asosiy kalitni belgilab qo'yishi uchun FROM gapiga qattiq cheklov qo'yishga intiladi. Buning sababi, biz ilgari muhokama qilgan NoSQL-ning yuqori darajadagi ishlashi, stol va kalitlarning o'zaro ta'sirini kamaytirishga qaratilgan. Bunday o'zaro ta'sir so'rovlarga javob berish vaqtiga yuqori kechiktirilgan o'zaro bog'lanishni kiritishi mumkin va shuning uchun umuman oldini olish mumkin. Masalan Cassandra bo'limlarning kalitlarida operatorlar tomonidan so'rovlar cheklanishi kerak (faqat =, IN, <,>, =>, <= ruxsat berilgan), ikkilamchi indeksni so'rashdan tashqari (faqat = operatoriga ruxsat beriladi).

PostgreSQL

Quyida SQL ma'lumotlar bazasi tomonidan osonlikcha ta'minlanadigan 3 turdagi so'rovlar keltirilgan.

  • Ijrochining barcha qo'shiqlarini qaytaring
  • Sarlavhaning birinchi qismiga to'g'ri keladigan qo'shiqchining barcha qo'shiqlarini qaytaring
  • Sarlavhada ma'lum bir so'z bilan qo'shiqchining barcha qo'shiqlarini qaytaring, faqat narxi 1.00 dan past bo'lsa
TANLANG * Musiqa
Qaerda Artist = 'Siz tanimaydigan hech kim';
TANLANG * Musiqa
Qaerda Artist = 'Siz taniydigan hech kim' va SongTitle 'Chaqiriq%' ga o'xshaydi;
TANLANG * Musiqa
Qaerda Artist = 'Siz taniydigan hech kim yo'q' va qo'shiq matni '% Today%' KO'RING
VA narx> 1.00;

Kassandra

Yuqorida sanab o'tilgan PostgreSQL so'rovlaridan faqat birinchisi Cassandra bilan o'zgartirilmaydi, chunki SongTitle kabi klasterli ustunlarda LIKE operatoriga yo'l qo'yilmaydi. Bunday holda faqat = va IN operatorlariga ruxsat beriladi.

TANLANG * Musiqa
Qaerda Artist = 'Siz tanimaydigan hech kim';
TANLANG * Musiqa
Qaerda Artist = 'Siz taniydigan hech kim' va SongTitle IN ('Menga qo'ng'iroq qiling bugun', 'Mening itim joyi')
VA narx> 1.00;

MongoDB

Oldingi misollarda ko'rsatilgandek, MongoDB-ni so'rashning asosiy usuli db.collection.find () usuli hisoblanadi. Ushbu usul to'plam nomi bo'yicha aniqlanadi (quyidagi misolda musiqa), shuning uchun to'plamlar bo'ylab so'rov o'tkazish aniq taqiqlangan.

db.music.find ({
  rassom: "Siz taniydigan hech kim"
 }
);
db.music.find ({
  rassom: "Siz taniydigan hech kim",
  songTitle: / qo'ng'iroq /
 }
);

Jadvaldagi barcha qatorlarni o'qing

Barcha satrlarni o'qish - biz ilgari kuzatgan umumiy so'rovlar namunasining alohida holati.

PostgreSQL

TANLASH *
FROM musiqa;

Kassandra

Yuqoridagi PostgreSQL SELECT bayonoti bilan bir xil.

MongoDB

db.music.find ({});

Jadvaldagi ma'lumotlarni o'zgartirish

PostgreSQL

PostgreSQL ma'lumotlarni o'zgartirish uchun UPDATE bayonotini taqdim etadi. Bu biron bir ortib ketish imkoniyatini bermaydi, shuning uchun agar ma'lumotlar bazasida satr mavjud bo'lmasa, bayonot muvaffaqiyatsiz bo'ladi.

YANGI Musiqa
SET janri = 'Disko'
Qaerda Artist = 'Acme guruhi' VA SongTitle = 'Hali ham muhabbatda';

Kassandra

Kassandra ham PostgreSQL-ga o'xshash UPDATE bayonotiga ega. UPDATE shuningdek, INSERT bayonotidagi kabi semantikani ham o'zgartirdi.

Yuqoridagi PostgreSQL UPDATE bayonoti bilan bir xil.

MongoDB

MongoDB-ni yangilash () jarayoni mavjud hujjatni to'liq yangilashi yoki faqat ma'lum maydonlarni yangilashi mumkin. Odatiy bo'lib, u yuqori semantikani o'chirgan holda faqat bitta hujjatni yangilaydi. Ko'p hujjatli yangilanishlar va yuqori darajadagi ishlarni operatsiyaga qo'shimcha bayroqlarni o'rnatish orqali yoqish mumkin. Masalan Quyidagi misol ijrochining qo'shiqlari bo'yicha ma'lum bir san'atkorning janrini yangilaydi.

db.music.update (
  {"artist": "The Acme Band"},
  {
    $ to'plami: {
      "janr": "Disko"
    }
  },
  {"multi": true, "upsert": true}
);

Jadvaldagi ma'lumotlarni o'chirish

PostgreSQL

Musiqani O'CHIRISH
Qaerda Artist = 'Acme guruhi' VA SongTitle = 'Dunyoga qara';

Kassandra

Yuqoridagi PostgreSQL DELETE bayonoti bilan bir xil.

MongoDB

MongoDB hujjatlarni o'chirishni boshqarish uchun ikki xil operatsiyaga ega - deleteOne () / deleteMany () va delete (). Ikkala hujjat (lar) ni o'chiradilar, ammo qaytish natijalari turlicha.

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

Jadvalni olib tashlang

PostgreSQL

DROP TABLE Musiqa;

Kassandra

Yuqoridagi PostgreSQL DROP TABLE bayonoti bilan bir xil;

MongoDB

db.music.drop ();

Xulosa

SQL va NoSQL munozaralari o'n yildan ortiq davom etmoqda. Ushbu munozaraning ikkita jihati mavjud: ma'lumotlar bazasi yadro arxitekturasi (monolit, tranzaktsion SQL va boshqalar, taqsimlanmagan NoSQL) va ma'lumotlarni modellashtirishga yondashuv (ma'lumotlaringizni SQL-da va NoSQL-da so'rovlaringizni modellashtirish).

YugaByte DB singari taqsimlangan, tranzaktsion ma'lumotlar bazasi bilan munozaraning bazasi arxitektura qismi osongina dam olishga imkon beradi. Ma'lumotlar hajmi bitta tugunga yozib bo'lmaydigan darajadan oshib ketganda, avtomatik ravishda tebranish / qayta muvozanatlash bilan chiziqli yozish hajmini yaratishga imkon beradigan to'liq taqsimlangan arxitektura kerak bo'ladi. Bundan tashqari, Google Cloud-dan ushbu maqolada aytib o'tilganidek, tranzaktsion bo'lmagan, oxir-oqibat izchil arxitekturalarga qaraganda, yuqori darajadagi ishlab chiquvchilar va operatsiyalarni bajarish qobiliyatiga ega arxitekturalar hozirda keng qabul qilinmoqda.

Ma'lumotni modellashtirish bo'yicha munozaralarga kelsak, SQL va NoSQL ma'lumotlarini modellashtirish yondoshuvi har qanday murakkab real hayot uchun juda muhimdir. SQL-sizning-ma'lumotlaringizga yondoshish ishlab chiquvchilarga o'zgaruvchan biznes talablariga osonlikcha javob berishga imkon beradi, NoSQL-model-sizning so'rovingiz esa bir xil ishlab chiquvchilarga katta hajmli ma'lumotlarni past kechikish va yuqori o'tkazish qobiliyatiga ega boshqarishga imkon beradi. Aynan shuning uchun YugaByte MB SQL va NoSQL API-larini umumiy yadroda ishlatadi, chunki bitta yondashuv boshqasiga qaraganda ancha yaxshi. Bundan tashqari, PostgreSQL va Cassandra kabi ommabop ma'lumotlar bazasi tillari bilan simlarning muvofiqligini ta'minlash orqali YugaByte DB taqsimlangan kuchli izchil ma'lumotlar bazasidan foydalanish uchun ishlab chiquvchilar boshqa tilni o'rganmasliklarini ta'minlaydi.

Ushbu post bizga ma'lumotlarni modellashtirish asoslari PostgreSQL, Cassandra va MongoDB o'rtasidagi farqni tushunishga yordam berdi. Serialning keyingi xabarlarida biz indekslar, tranzaktsiyalar, JOINlar, TTL direktivalari va JSON hujjatlari kabi ma'lumotlarni modellashtirishning ilg'or tushunchalariga kirib boramiz.

Keyingisi nima?

  • YugaByte MB ni Amazon DynamoDB, Cassandra, MongoDB va Azure Cosmos DB kabi ma'lumotlar bazalari bilan taqqoslang.
  • MacOS, Linux, Docker va Kubernetes-da YugaByte MB bilan boshlang.
  • Litsenziyalash, narx belgilash yoki texnik ko'rishni rejalashtirish haqida ko'proq ma'lumot olish uchun biz bilan bog'laning.

Dastlab YugaByte ma'lumotlar bazasi blogida nashr etilgan.