Programavimas

„NoSQL“ pykčio rungtynės: „MongoDB“ ir „Couchbase Server“

Tinkamos darbo duomenų bazės pasirinkimas gali būti nelengva užduotis, ypač jei jūs praleidžiate visą SQL ir NoSQL parinkčių erdvę. Jei ieškote lanksčios, bendros paskirties parinkties, leidžiančios naudoti sklandžias schemas ir sudėtingas įdėtas duomenų struktūras, dokumentų duomenų bazė gali būti jums tinkama. „MongoDB“ ir „Couchbase Server“ yra du populiarūs pasirinkimai. Kaip turėtumėte pasirinkti?

„MongoDB“ sujungia didžiulio populiarumo, paprastų grafikų paieškų palaikymo ir galimybės atlikti SQL užklausas per BI jungtį, privalumus. „Couchbase“ turi savo didelę vartotojų bendruomenę, puikiai veikiančią rakto vertės architektūrą ir SQL tipo užklausų kalbą, galinčią naršyti įdėtose dokumentų struktūrose.

Trumpai tariant, tiek „MongoDB“, tiek „Couchbase“ yra galingos ir lanksčios į dokumentus orientuotos duomenų bazės su daugybe priedų. Be to, jie turi svarbių skirtumų, kurie vienaip ar kitaip pakreipia pusiausvyrą, atsižvelgiant į jūsų poreikius. Norėdami padėti jums apsispręsti, mes apžvelgsime šias duomenų bazes naudodamiesi svarbiausiais svarstymais, apimančiais kiekvieno jų diegimo ir sąrankos, administravimo, naudojimo paprastumo, mastelio keitimo ir dokumentavimo rezultatus.

Ši diskusija pagrįsta „MongoDB 3.4“ ir „Couchbase Server 4.6“. Taip pat galite peržiūrėti mano atskiras „MongoDB 3.4“ ir „Couchbase Server 4.0“ apžvalgas.

Diegimas ir sąranka

Į diegimą ir sąranką galima žiūrėti iš dviejų perspektyvų: kūrėjai, dirbantys prieš vietinę instanciją, ir infrastruktūros inžinieriai, kuriantys pradinį gamybos klasterį. Daugelis „NoSQL“ duomenų bazių turi tvirtas istorijas apie kūrėjų patogumą, padidindamos galimybes, kad kūrėjas išbandys produktą ir pristatys jį savo sistemoms. Paprasta vietos sąranka yra stipri pardavimo vieta. Kita vertus, duomenų bazė galiausiai įrodys savo vertę gamyboje, todėl gamybos sąranka yra tokia pat svarbi, kad būtų teisinga.

Kūrėjo sąranka

Užuot naudoję dvejetainius failus, veikiančius ant pliko metalo, mes panagrinėsime, ko reikia norint sukurti šias dvi duomenų bazes „Docker“ aplinkoje. „Docker“ sąranka tiek „MongoDB“, tiek „Couchbase“ yra gana paprasta. „Couchbase“ reikia atidaryti keletą papildomų prievadų, tačiau tai spręsti yra paprasta. Kai vaizdai bus ištraukti ir paleisti sudėtiniai rodiniai, kūrėjų patirtis pastebimai skiriasi. Su „MongoDB“ viskas baigta. Galite prisijungti per programą arba „Mongo“ apvalkalą ir nedelsdami pradėti dirbti. Priešingai, „Couchbase“ leidžia jums atlikti privalomą sąrankos procesą per vartotojo sąsają, kur susiduriate su daugybe konfigūracijos parinkčių, skirtų infrastruktūros inžinieriams. Kaip kūrėjas galite išsaugoti pasirinktas parinktis ir naudoti numatytąjį segmentą, tačiau tai padidina trintį.

„MongoDB“ laimi šį, bet ne be išlygos. Tai, kad vietos diegimas buvo lengvas, dar nereiškia, kad tą patį galite padaryti ir gamyboje. Gali atrodyti akivaizdu, kad gamybinė aplinka reikalauja daugiau priežiūros ir konfigūravimo, tačiau šių metų pradžioje įvykę neužtikrinti viešai prieinami „MongoDB“ atvejai išpirkos išpirkos rodo, kad daugelis parduotuvių naudoja pavojingus nuorodas.

Raundo nugalėtojas: MongoDB.

Gamybos sąranka

Išplatintos duomenų bazės diegimas gamybai paprastai apima daugybę žingsnių ir deramą koordinavimą; „MongoDB“ ir „Couchbase“ nesiskiria. Abiem atvejais sąrankos sunkumai priklausys nuo diegimo reikalavimų, o skirtingi našumo kompromisai apima skirtingą sudėtingumo lygį.

„MongoDB“ grupes sudarys arba kopijų rinkinys, arba suskaidytas klasteris. Replikų rinkinys yra „MongoDB“ serverių grupė, kurioje yra visi tie patys duomenys, o suskaidytas klasteris paskirsto duomenis keliems replikų rinkiniams. Replikų rinkinius lengva sukonfigūruoti, kuriuos sudaro vieno tipo serveriai, kuriuos reikia įdiegti. Labiau dalyvauja suskaidytos sankaupos, kurioms reikia trijų skirtingų tipų serverių, kuriuose kiekvienas yra pakartojamas. Grupes galima sukonfigūruoti naudojant komandų eilutės žymes, konfigūracijos failus ir duomenų bazių komandas.

„Couchbase“ grupes gali sudaryti vienas arba keli serverio tipai, atsižvelgiant į našumo charakteristikas, kurių jums reikia iš grupės. „Couchbase“ architektūrą sudaro įvairios paslaugos, kurias galima įjungti arba išjungti kiekvienam mazgui. Pagal paprastą scenarijų įgalinsite visas paslaugas visuose mazguose. Tačiau, jei norite suderinti su kiekvienos paslaugos poreikiais arba norite atskirai keisti mastelį, turėsite pradėti konfigūruoti skirtingus serverio tipus, paskirstyti prekių aparatinę įrangą duomenų tarnybai, SSD rodyklės paslaugai, optimizuotą procesoriui. užklausų tarnyba ir pan. Grupes galima sukonfigūruoti naudojant įmontuotą žiniatinklio vartotojo sąsają, komandinės eilutės sąsają ir REST API.

Kalbant apie duomenų infrastruktūros gamybos sąrangą, tiek „MongoDB“, tiek „Couchbase“ yra gana aiškios. Žinoma, galite pasinerti į konfigūracijos ir derinimo galimybes ir niekada neišeiti, tačiau daugeliu atvejų tai bus lengviau infrastruktūros inžinieriams.

Raundo nugalėtojas: kaklaraištis.

Administracija

Kai duomenų bazė veikia ir priima srautą, pagrindiniu rūpesčiu tampa administravimas. Norėdami įvertinti administravimo paprastumą, apžvelgsiu atsarginės kopijos kūrimo procesą, duomenų bazių naujovinimą ir stebėjimo būdus.

Atsarginės kopijos

Atsarginės kopijos yra svarbi gamybos duomenų bazių higienos dalis, o duomenų bazių valdymas labai prieinamu, paskirstytu būdu to nepakeičia.

„MongoDB“ siūlo keletą veikiančios sankaupos duomenų atsarginių kopijų kūrimo galimybių. Jei pagrindinė operacinė sistema palaiko momentines nuotraukas vienu metu, galite pasikliauti ta funkcija, kad užfiksuotumėte atsarginę kopiją tiksliu laiko momentu. Tai tampa šiek tiek keblu atsarginėms kopijoms suskaidytų grupių, nes vienu metu turėsite fotografuoti kiekvieno fragmento antrinį ir konfigūracijos serverį.

Sistemos lygio įrankiai, pvz., Cp arba rsync, gali būti naudojami duomenų bazės failams nukopijuoti į kitą vietą, tačiau rašymas proceso metu turi būti pristabdytas dėl tų įrankių pobūdžio. Nors „MongoDB“ tiekia komandų eilutės įrankius atsarginėms duomenų bazių kopijoms kurti ir atkurti, didesnių grupių šie įrankiai nerekomenduojami. Arba galite mokėti už „Cloud Manager“ arba „Ops Manager“ arba įdiegti per „MongoDB Atlas DBaaS“ platformą, kad gautumėte vartotojo sąsaja pagrįstus įrankius, kurie pasirūpins atsarginėmis kopijomis ir atkūrimais.

„Couchbase“ pristato komandinės eilutės įrankius, kad sukurtų atsargines įvairių tarnybų duomenų atsargines kopijas, ir jas galima sukonfigūruoti taip, kad būtų vykdomos visos atsarginės arba dviejų rūšių papildomos atsarginės kopijos. Prieauginės atsarginės kopijos gali būti padidėjusios nuo paskutinės visos atsarginės kopijos (kaupiamosios prieauginės) arba padidėjusios nuo paskutinės bet kokios rūšies atsarginės kopijos (diferencinės prieauginės). Tai leidžia sudaryti sudėtingas atsarginių kopijų struktūras, kurioms reikalingas skirtingas saugojimo vietos lygis ir įvairaus lygio atkūrimo sudėtingumas.

Įmonės klientai gali pasinaudoti „cbbackupmgr“ įrankiu, kuris naudoja skirtingas pagrindines duomenų struktūras, kad pasiektų geresnį našumą kuriant atsargines duomenų kopijas.

Raundo nugalėtojas: „Couchbase“ dėl didesnio lankstumo ir palaikymo papildomoms atsarginėms kopijoms.

Atnaujinimas

Ilgą laiką veikiantis klasteris turėtų turėti aiškų ir lengvą naujovinimo kelią. Kuo sunkiau atnaujinti, tuo mažesnė tikimybė, kad jis bus nuolat atnaujinamas. Tai reiškia, kad tiek kūrėjai, tiek administratoriai praleis naujas funkcijas.

„MongoDB“ atnaujinimus geriausiai galima suprasti pagal nustatytą kopijos lygį. Jei naudojate suskaidytą sankaupą, dažniausiai vykdote kiekvieno fragmento kopijų rinkinių naujovinimo veiksmus. Kiekvienoje antrinėje kopijoje uždaromi, atnaujinami ir paleidžiami. Kai antriniai nariai veiks ir atitiks pirminį, įsijungia perjungimas, o buvusį pirminį galima nuimti ir atnaujinti. Jis vėl pradės veikti kaip antrinis ir pasivys užrašus, kurių praleido neprisijungęs. Taigi, naujovinimai dažniausiai yra internetinis procesas, tačiau dėl pirminio perjungimo greičiausiai nebus parašyta 10–20 sekundžių, todėl reikalingas priežiūros langas su priimtina prastova.

„Couchbase“ prieina prie naujovinimo taip pat, kaip pridėtumėte ar pašalintumėte mazgą iš sankaupos. Visi naujovinančio mazgo duomenys turi būti iš naujo subalansuoti visoje grupėje, tada vėl subalansuoti, kai naujovinimas bus baigtas, o mazgas vėl prisijungs prie grupės. Tas balansavimo procesas turi vykti kiekvienam klasterio mazgui vienas po kito. Tai užtruks daug ilgiau nei atnaujinti „MongoDB“ grupę dėl visų duomenų, kuriuos reikia perkelti. Kita galimybė yra atjungti visą klasterį neprisijungus, atnaujinti kiekvieną mazgą ir vėl juos visus prijungti prie interneto.

Nors „Couchbase“ atnaujinimo keliui nereikia nulinės prastovos, procesas yra ilgas ir, norint dirbti, reikia daugybės duomenų maišymo.

Raundo nugalėtojas: kaklaraištis. „Tiebreaker“: Jei techninės priežiūros prastova yra priimtina, tada „MongoDB“ laimi. Jei ne, tada „Couchbase“ yra vienintelis pasirinkimas.

Stebėjimas

Matomumas veikiančiame klasteryje yra akivaizdžiai būtinas sėkmingam duomenų bazės administravimui. Kai viskas nesiseka, nieko nėra blogiau, kaip suvaržytą tiesos požiūrį į klasterį.

„MongoDB“ siūlo apvalkalo CLI įrankius ir komandas, kurie pateikia metriką apie egzemplioriaus aktyvumą ir našumą. Be to, „MongoDB“ naudingai nurodys jus apie trečiųjų šalių įrankius ar savo įmonės produktus („Cloud Manager“, „Ops Manager“, „Atlas“).

Kita vertus, „Couchbase“ pateikia interneto žiniatinklio sąsają, kurioje yra statistiniai duomenys ir vizualizacijos apie egzempliorius, mazgus, užklausų našumą ir dar daugiau. Be to, „Couchbase“ galima sukonfigūruoti siųsti el. Pašto įspėjimus, kai tam tikra statistika nepatenka į diapazoną.

Raundo nugalėtojas: „Couchbase“, skirtas vizualizacijoms ir įspėjimams iš visos dėžutės.

Naudojimo paprastumas

Sukūrus duomenų bazę ir patenkinus visus mūsų administravimo poreikius, didžiausias rūpestis pereina nuo operacijų prie naudojimo. Aš suskirstysiu tai į duomenų modeliavimą, indekso dizainą, pagrindines užklausas ir kaupimą.

Duomenų modeliavimas

Kaip dokumentų duomenų bazės, nei „MongoDB“, nei „Couchbase“ negali išvengti iššūkio, kaip elgtis su reliaciniais duomenimis. Abu jie suteikia galimybę saugoti reliacinius duomenis kaip įdėtus, denormalizuotus duomenis, taip pat kaip nuorodas į kitus aukščiausio lygio dokumentus. Šis požiūris į duomenų saugojimą galiausiai yra pagrindinis abiejų duomenų bazių duomenų modeliavimo aspektas, nepaisant to, kad kiekvienas iš jų palaiko vis daugiau naudojimo atvejų, funkcijų ir užklausų modelių.

Raundo nugalėtojas: kaklaraištis.

Rodyklės dizainas

Indeksai dokumentų duomenų bazėse atlieka tą pačią funkciją, kaip ir reliacinėse duomenų bazėse. Tai reiškia, kad jie pateikia tam tikrus duomenis efektyvesniais būdais, kad pagerintų užklausos našumą. „MongoDB“ ir „Couchbase“ labai skirtingai prižiūri indeksų kūrimą ir kūrimą.

„MongoDB“ palaiko vieno ar daugiau dokumento laukų indeksų kūrimą, leidžiantį nurodyti standartinių indeksų tvarką ir kryptį (didėjančią ar mažėjančią). Taip pat galima įtraukti specialias geoerdvines ir viso teksto rodykles kaip tos pačios sintaksės dalį. Užklausų variklis užklausoms pagreitinti naudos tuos indeksus, tų indeksų priešdėlius arba kelių indeksų derinį.

„Couchbase“ remiasi dviem skirtingais užklausų našumo gerinimo mechanizmais: „MapReduce“ rodiniais ir visuotiniu antriniu indeksu (GSI). „MapReduce“ rodinius sudaro vartotojo apibrėžtas „JavaScript“ kodas, kuris apdoroja duomenis eidamas per sistemą, pavyzdžiui, laipsniškas išankstinis agregavimas. „MapReduce“ rodiniai gali būti tokie paprasti, kaip leisti dokumentų paieškas vidiniame lauke, arba gali apimti sudėtingesnę logiką, atliekančią dokumentų duomenų skaičiavimus ir kaupimą.

„MapReduce“ rašymas „JavaScript“ sistemoje, kad būtų palaikomos užklausos, yra nepatogus, todėl paprastai norėsite naudoti GSI, jei įmanoma. GSI indeksai aprašomi naudojant N1QL (tariama „nikelis“), dalinį SQL diegimą „Couchbase“ viršuje. N1QL sintaksė yra gana aiški, o N1QL užklausos yra kur kas geresnės nei „MapReduce“, tačiau indeksą turite įdėti į konkretų mazgą. Jei norite, kad indeksas būtų labai prieinamas, turite rankiniu būdu sukurti tą indeksą daugiau nei viename mazge.

Turo nugalėtojas: „MongoDB“ už konsoliduotą indeksavimo API ir galimybę visiškai išvengti „MapReduce“.

Pagrindinės užklausos

Atsižvelgiant į tinkamą duomenų modelį, dauguma užklausų į duomenų bazę dažniausiai būna paprastos. Be CRUD operacijų, kai žinomas atitinkamo dokumento ID, svarbu mokėti išreikšti įvairius dokumentų filtravimo būdus ir pasirinkti, kurie laukai mus domina.

„MongoDB“ aprašo užklausas JSON, pateikdama deklaratyvią sintaksę sąlygų ir filtrų nurodymui laukuose. Užklausos dokumentą gali sudaryti bet koks užklausos parinkiklių skaičius, apibūdinantis, kaip turėtų atrodyti rezultatų rinkinys. Šiame užklausos dokumente galima apibrėžti diapazonus, lygybę, teksto paiešką ir geoerdvines užklausas. Dokumentas palaiko loginius operatorius, todėl logiškai gali būti sujungtos kelios užklausos sąlygos IR, ARBA, ir taip toliau. Užklausos dokumentas gali greitai išaugti į labai įdėtą JSON dokumentą, kuris kartais gali būti didžiulis ir prie kurio tikrai reikia priprasti. Taip pat galima naudoti projekcijas užklausose, o tai leidžia grąžinti tik jums rūpimus laukus ir per laidą sumažinti bendrą rezultato dydį.

$config[zx-auto] not found$config[zx-overlay] not found