Programiranje

NoSQL nezadovoljstvo: MongoDB proti Couchbase Server

Izbira prave baze podatkov za to opravilo je lahko zastrašujoča naloga, še posebej, če se zabavate s celotnim prostorom možnosti SQL in NoSQL. Če iščete prilagodljivo, splošno uporabno možnost, ki omogoča fluidne sheme in zapletene ugnezdene podatkovne strukture, je zbirka dokumentov morda prava za vas. MongoDB in Couchbase Server sta dve priljubljeni izbiri. Kako naj se odločim?

MongoDB združuje prednosti izjemne priljubljenosti, podporo za preprosto iskanje grafov in zmožnost izvajanja poizvedb SQL prek priključka BI. Couchbase ima lastno veliko skupnost uporabnikov, zmogljivo arhitekturo ključ-vrednost in poizvedbeni jezik, podoben SQL-u, ki je sposoben krmariti po ugnezdenih strukturah dokumentov.

Skratka, MongoDB in Couchbase sta zmogljivi in ​​prilagodljivi zbirki podatkov, usmerjeni v dokumente, z veliko dodatki. Kljub temu imajo pomembne razlike, ki nagibajo tehtnico tako ali drugače, odvisno od vaših potreb. Da bi se lažje odločili, bomo te zbirke podatkov prenesli skozi seznam ključnih premislekov, ki bodo zajemali delovanje vsake od njih glede namestitve in namestitve, upravljanja, enostavnosti uporabe, razširljivosti in dokumentacije.

Ta razprava temelji na MongoDB 3.4 in Couchbase Server 4.6. Ogledate si lahko tudi moja samostojna mnenja o MongoDB 3.4 in Couchbase Server 4.0.

Namestitev in namestitev

Namestitev in namestitev je mogoče gledati z dveh vidikov: razvijalci, ki delujejo proti lokalnemu primerku, in inženirji infrastrukture, ki postavljajo začetno proizvodno gručo. Številne zbirke podatkov NoSQL imajo močne zgodbe o prijaznosti do razvijalcev, kar povečuje možnosti, da razvijalec preizkusi izdelek in ga predstavi v svojih sistemih. Enostavna lokalna nastavitev je močna prodajna točka. Po drugi strani pa bo baza podatkov na koncu dokazala svojo vrednost pri izdelavi, zato je za pravilno nastavitev produkcije prav tako pomembno.

Nastavitev za razvijalce

Namesto da bi uporabljali binarne datoteke, ki delujejo na goli kovini, bomo preučili, kaj je potrebno za nastavitev teh dveh baz podatkov v okolju Docker. Nastavitev Dockerja za MongoDB in Couchbase je precej preprosta. Couchbase zahteva nekaj dodatnih vrat, ki jih je treba izpostaviti, vendar je preprosto reševanje. Ko se slike potegnejo navzdol in se vsebniki zaženejo, je opazna razlika v izkušnji razvijalca. Z MongoDB ste končali. Povežete se lahko prek aplikacije ali lupine Mongo in takoj začnete z delom. Nasprotno pa vas Couchbase skozi uporabniški vmesnik popelje skozi obvezen postopek nastavitve, kjer se soočate s kopico možnosti konfiguracije, ki so namenjene infrastrukturnim inženirjem. Kot razvijalec lahko obdržite izbrane možnosti in uporabite privzeti segment, vendar izkušnji doda trenje.

MongoDB to zmaga, vendar ne brez opozorila. Ker je bila lokalna uvedba enostavna, še ne pomeni, da lahko isto storite tudi v proizvodnji. Morda se zdi očitno, da proizvodna okolja zahtevajo več nege in konfiguracije, vendar razširjeni napadi odkupnin na nezavarovane, javno dostopne primerke MongoDB v začetku letošnjega leta kažejo, da številne trgovine uporabljajo nevarne bližnjice.

Zmagovalec kroga: MongoDB.

Nastavitev proizvodnje

Uvajanje porazdeljene baze podatkov v produkcijo ponavadi vključuje veliko korakov in primerno stopnjo usklajevanja; MongoDB in Couchbase se ne razlikujeta. V obeh primerih bo težava namestitve odvisna od zahtev po uvajanju, pri čemer bodo različni kompromisi glede zmogljivosti, ki vključujejo različne stopnje zapletenosti.

Grozdi MongoDB bodo sestavljeni iz nabora replik ali ostrene gruče. Nabor replik je skupina strežnikov MongoDB, ki vsebujejo enake podatke, medtem ko ostri grozd podatke razdeli v več naborov replik. Nabore kopij je enostavno konfigurirati, sestavljene so iz ene vrste strežnika, ki ga je treba namestiti. Ostrejše gruče so bolj vključene, zato je treba razporediti tri različne vrste strežnikov, kjer se vsak ponovi. Grozde je mogoče konfigurirati prek zastavic ukazne vrstice, konfiguracijskih datotek in ukazov baze podatkov.

Skupine Couchbase lahko sestavljajo en sam strežnik ali več tipov strežnikov, odvisno od značilnosti delovanja, ki jih potrebujete v gruči. Arhitektura Couchbase je sestavljena iz različnih storitev, ki jih je mogoče omogočiti ali onemogočiti na posamezno vozlišče. V preprostem primeru omogočite vse storitve na vseh vozliščih. Če pa želite prilagoditi potrebe posamezne storitve ali če želite vsako storitev prilagoditi samostojno, boste morali začeti konfigurirati različne vrste strežnikov, dodeliti osnovno strojno opremo za podatkovno storitev, SSD-je za indeksno storitev, CPU-optimiziran za storitev poizvedb itd. Grozde lahko konfigurirate prek vgrajenega spletnega uporabniškega vmesnika, vmesnika ukazne vrstice in API-ja REST.

Kar zadeva proizvodno nastavitev podatkovne infrastrukture, sta tako MongoDB kot Couchbase precej jasna. Seveda se lahko poglobite v možnosti konfiguracije in uglaševanja in nikoli ne pridete ven, toda v večini primerov bodo to za infrastrukturne inženirje lažje.

Zmagovalec kroga: Kravata.

Administracija

Ko se baza podatkov zažene v proizvodnji in sprejme promet, je skrbništvo ključna skrb. Za oceno enostavnosti upravljanja si bom ogledal postopek varnostnega kopiranja, nadgradnje baze podatkov in pristope spremljanja.

Varnostne kopije

Varnostne kopije so pomemben del higiene produkcijskih baz podatkov in vodenje baz podatkov na zelo razpoložljiv, porazdeljen način ne spremeni tega niti enega kosa.

MongoDB ponuja več možnosti za varnostno kopiranje podatkov delujoče gruče. Če osnovni operacijski sistem podpira trenutne posnetke, se lahko zanesete na to funkcijo, da zajamete varnostno kopijo v natančnem trenutku. To postane nekoliko težavno za varnostno kopiranje ostrenih gruč, ker boste morali hkrati posneti sekundarni del vsakega drobca in konfiguracijskega strežnika.

Orodja na sistemski ravni, kot sta cp ali rsync, se lahko uporabljajo za kopiranje datotek zbirke podatkov na drugo mesto, vendar mora biti zapisovanje med postopkom zaustavljeno zaradi narave teh orodij. Čeprav je MongoDB opremljen z orodji ukazne vrstice za varnostno kopiranje in obnavljanje baz podatkov, ta orodja niso priporočljiva za večje grozde. Lahko pa plačate za Cloud Manager ali Ops Manager ali pa se postavite prek platforme MongoDB Atlas DBaaS, da dobite orodje na osnovi uporabniškega vmesnika, ki bo za vas poskrbelo za varnostne kopije in obnovitve.

Couchbase je opremljen z orodji ukazne vrstice za varnostno kopiranje podatkov iz različnih storitev in jih je mogoče konfigurirati za izvajanje celotnih varnostnih kopij ali dveh vrst postopnih varnostnih kopij. Prirastne varnostne kopije so lahko prirastne od zadnje celotne varnostne kopije (kumulativni prirastek) ali prirastne od zadnje kakršne koli varnostne kopije (prirastne razlike). To omogoča zapletene varnostne strukture, ki zahtevajo različne stopnje prostora za shranjevanje in vključujejo različne stopnje zapletenosti obnovitve.

Podjetniške stranke lahko črpajo iz pripomočka cbbackupmgr, ki uporablja različne osnovne podatkovne strukture za doseganje boljše učinkovitosti pri varnostnem kopiranju podatkov.

Zmagovalec kroga: Couchbase zaradi večje prilagodljivosti in podpore za postopno varnostno kopiranje.

Nadgradnja

Dolgo delujoča grozd mora imeti jasno in enostavno pot do nadgradnje. Težje kot je nadgraditi, manj verjetno je, da bo na tekočem. To pomeni, da bodo razvijalci in skrbniki zamudili nove funkcije.

Nadgradnje MongoDB je najbolje razumeti z ravni nabora replik. Če uporabljate ostreno gručo, večinoma sledite korakom za nadgradnjo naborov replik na vsakem drobcu. Znotraj kompleta replik se vsak sekundarni sistem izklopi, nadgradi in zažene. Ko sekundarni elementi delujejo in se skladajo s primarnimi, se sproži preklop in prejšnji primarni lahko odstrani in nadgradi. Ponovno se bo zagnal kot sekundarni in nadoknadil zapise, ki jih je zamudil brez povezave. Tako so nadgradnje večinoma spletni postopek, vendar bo primarna preusmeritev verjetno povzročila 10 do 20 sekund brez zapisov, zato je potrebno okno za vzdrževanje s sprejemljivimi časi izpada.

Couchbase pristopi k nadgradnjam na enak način, kot bi dodali ali odstranili vozlišče iz gruče. Vse podatke nadgrajevalnega vozlišča je treba znova uravnotežiti po gruči, nato pa znova uravnotežiti, ko je nadgradnja končana in se vozlišče znova pridruži grozdu. Ta postopek uravnoteženja se mora zgoditi za vsako vozlišče v gruči, eno za drugo. To bo trajalo veliko dlje kot nadgradnja grozda MongoDB zaradi vseh podatkov, ki jih je treba premikati. Druga možnost je, da celotno gručo izključite iz omrežja, nadgradite vsako vozlišče in jih znova povežete v splet.

Medtem ko pot nadgradnje Couchbase zahteva nič izpadov, je postopek dolg in za delovanje zahteva veliko mešanje podatkov.

Zmagovalec kroga: Kravata. Tiebreaker: Če so izpadi vzdrževanja sprejemljivi, potem MongoDB zmaga. V nasprotnem primeru je Couchbase edina izbira.

Spremljanje

Vidnost delujoče gruče je očitno bistvenega pomena za uspešno upravljanje baz podatkov. Ko gre narobe, ni nič hujšega kot imeti omejen pogled na resnico v skupini.

MongoDB v lupini ponuja orodja in ukaze CLI, ki zagotavljajo meritve o aktivnosti in zmogljivosti primerkov. Poleg tega vas bo MongoDB koristno usmeril na tuja orodja ali lastne izdelke podjetja (Cloud Manager, Ops Manager, Atlas).

Couchbase pa ima spletni uporabniški vmesnik, ki vključuje statistiko in vizualizacije primerkov, vozlišč, zmogljivosti poizvedb in še več. Poleg tega je Couchbase mogoče konfigurirati za pošiljanje opozoril po e-pošti, kadar nekatere statistike ne spadajo v domet.

Zmagovalec kroga: Couchbase, za predočene vizualizacije in opozorila.

Enostavnost uporabe

Po vzpostavitvi baze podatkov in izpolnitvi vseh potreb po administraciji se glavna skrb preusmeri z operacij na uporabo. To bom razčlenil na modeliranje podatkov, oblikovanje indeksa, osnovno poizvedbo in združevanje.

Modeliranje podatkov

Kot zbirki dokumentov se niti MongoDB niti Couchbase ne moreta izogniti izzivu, kako ravnati z relacijskimi podatki. Oba ponujata možnost shranjevanja relacijskih podatkov kot ugnezdenih, denormaliziranih podatkov kot tudi v obliki sklicev na druge dokumente najvišje ravni. Ta pristop hrambe podatkov je na koncu glavna točka za modeliranje podatkov za obe zbirki podatkov, kljub temu, da vsaka podpira večjo širino primerov uporabe, funkcij in vzorcev poizvedb.

Zmagovalec kroga: Kravata.

Oblikovanje indeksa

Kazala opravljajo enako funkcijo v podatkovnih bazah dokumentov kot v relacijskih zbirkah podatkov. To pomeni, da predstavljajo nekatere podatke na učinkovitejši način za izboljšanje učinkovitosti poizvedb. MongoDB in Couchbase imata zelo različne pristope k oblikovanju in ustvarjanju indeksov.

MongoDB podpira ustvarjanje indeksov za eno ali več polj v dokumentu, kar omogoča določanje vrstnega reda in smeri (naraščajoče ali padajoče) standardnih indeksov. Prav tako je mogoče vključiti posebne geoprostorske indekse in indekse celotnega besedila kot del iste sintakse. Poizvedbeni mehanizem bo za pospešitev zahtev uporabil te indekse, predpone teh indeksov ali kombinacijo več indeksov.

Couchbase se zanaša na dva različna mehanizma za izboljšanje učinkovitosti poizvedb: poglede MapReduce in globalni sekundarni indeks (GSI). Pogledi MapReduce so sestavljeni iz uporabniško določene kode JavaScript, ki obdeluje podatke med prehodom skozi sistem, kot je postopno predhodno združevanje. Pogledi MapReduce so lahko tako preprosti, kot da omogočajo iskanje dokumentov v notranjem polju, ali pa vključujejo bolj zapleteno logiko, ki izvaja izračune in združevanje podatkov v dokumentih.

Pisanje MapReduce v JavaScript za podporo poizvedbam je nekako okorno, zato boste na splošno želeli uporabiti GSI, kjer je to mogoče. Indeksi v GSI so opisani z uporabo N1QL (izgovarja se "nikelj"), delna izvedba SQL na vrhu Couchbase. Sintaksa N1QL je precej jasna in poizvedbe N1QL so veliko boljše od MapReduce, vendar morate indeks postaviti na določeno vozlišče. Če želite, da je indeks zelo dostopen, ga morate ročno ustvariti na več vozliščih.

Zmagovalec kroga: MongoDB zaradi konsolidiranega API-ja za indeksiranje in zmožnosti, da se popolnoma izogne ​​MapReduceu.

Osnovne poizvedbe

Glede na ustrezen podatkovni model je večina poizvedb v zbirki podatkov ponavadi preprostih. Poleg operacij CRUD, pri katerih je ID zadevnega dokumenta znan, je pomembno, da lahko izrazimo različne načine filtriranja dokumentov in izberemo, katera polja nas zanimajo.

MongoDB opisuje poizvedbe v JSON-u in zagotavlja deklarativno sintakso za določanje pogojev in filtrov v poljih. Dokument poizvedbe je lahko sestavljen iz poljubnega števila izbirnikov poizvedb, ki opisujejo, kako naj bo videti rezultat. V tem dokumentu poizvedbe je mogoče določiti obsege, enakost, iskanje po besedilu in geoprostorske poizvedbe. Dokument podpira logične operatorje, zato je več logičnih stavkov mogoče logično združiti z IN, ALI, in tako naprej. Poizvedbeni dokument lahko hitro preraste v močno ugnezden dokument JSON, ki je včasih lahko ogromen in vsekakor traja nekaj navajanja. Projekcije je mogoče uporabiti tudi v poizvedbah, kar vam omogoča vrnitev samo polj, ki vas zanimajo, in zmanjšanje celotne velikosti rezultata po žici.

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