Programmering

NoSQL vred match: MongoDB vs. Couchbase Server

At vælge den rigtige database til jobbet kan være en skræmmende opgave, især hvis du underholder hele pladsen med SQL- og NoSQL-muligheder. Hvis du leder efter en fleksibel, generel mulighed, der giver mulighed for flydende skemaer og komplekse indlejrede datastrukturer, kan en dokumentdatabase måske være det rigtige for dig. MongoDB og Couchbase Server er to populære valg. Hvordan skal du vælge?

MongoDB kombinerer fordelene ved enorm popularitet, understøttelse af enkle grafsøgninger og muligheden for at udføre SQL-forespørgsler via et BI-stik. Couchbase har sit eget store brugerfællesskab, en performant nøgleværdearkitektur og et SQL-lignende forespørgselssprog, der er i stand til at navigere i indlejrede dokumentstrukturer.

Kort sagt er både MongoDB og Couchbase stærke og fleksible dokumentorienterede databaser med masser af ekstra. Når det er sagt, har de vigtige forskelle, der vipper balancen på en eller anden måde afhængigt af dine behov. For at hjælpe dig med at beslutte, marcherer vi disse databaser gennem handsken med vigtige overvejelser, der dækker, hvordan de hver især klarer sig med hensyn til installation og opsætning, administration, brugervenlighed, skalerbarhed og dokumentation.

Denne diskussion er baseret på MongoDB 3.4 og Couchbase Server 4.6. Du kan også tjekke mine stand-alone anmeldelser af MongoDB 3.4 og Couchbase Server 4.0.

Installation og opsætning

Installation og opsætning kan ses fra to perspektiver: udviklere, der arbejder mod en lokal instans, og infrastrukturteknikere opretter en indledende produktionsklynge. Mange NoSQL-databaser har stærke historier omkring udviklervenlighed, hvilket øger chancerne for, at en udvikler prøver produktet og introducerer det til deres systemer. En ligefrem lokal opsætning er et stærkt salgsargument. På den anden side vil databasen i sidste ende bevise sin værdi i produktionen, så produktionsopsætningen er lige så vigtig for at få ret.

Opsætning af udvikler

I stedet for at bruge binære filer, der kører på det bare metal, ser vi på, hvad der kræves for at opsætte disse to databaser i et Docker-miljø. Docker-opsætningen til både MongoDB og Couchbase er ret ligetil. Couchbase kræver et par ekstra porte, der skal eksponeres, men det er en enkel sag at håndtere. Når billederne er trukket ned og containerne startet op, er der en mærkbar forskel i udvikleroplevelsen. Med MongoDB er du færdig. Du kan oprette forbindelse via et program eller Mongo-skallen og komme i gang med det samme. Derimod fører Couchbase dig gennem en obligatorisk installationsproces via brugergrænsefladen, hvor du står over for en masse konfigurationsindstillinger rettet mod infrastrukturteknikere. Som udvikler kan du beholde de valgte indstillinger og bruge en standardspand, men det tilføjer friktion til oplevelsen.

MongoDB vinder denne, men ikke uden en advarsel. Bare fordi den lokale implementering var let, betyder det ikke, at du kan gøre det samme i produktionen. Det kan synes åbenlyst, at produktionsmiljøer kræver mere pleje og konfiguration, men de udbredte løsesumangreb på usikrede, offentligt tilgængelige MongoDB-forekomster tidligere på året antyder, at mange butikker tager farlige genveje.

Runde vinder: MongoDB.

Produktionsopsætning

Implementering af en distribueret database til produktion har tendens til at involvere mange trin og en rimelig grad af koordinering; MongoDB og Couchbase er ikke anderledes. I begge tilfælde afhænger opsætningsvanskeligheden af ​​implementeringskravene med forskellige kompromiser med ydeevne, der involverer forskellige niveauer af kompleksitet.

MongoDB-klynger vil enten bestå af et replika-sæt eller en knust klynge. Et replika-sæt er en gruppe MongoDB-servere, der alle indeholder de samme data, mens en fragmenteret klynge distribuerer data på tværs af et antal replika-sæt. Replikasæt er enkle at konfigurere og består af en enkelt type server, der skal implementeres. Skårne klynger er mere involverede, hvilket kræver, at der indsættes tre forskellige typer servere, hvor hver replikeres. Klynger kan konfigureres via kommandolinjeflag, konfigurationsfiler og databasekommandoer.

Couchbase-klynger kan bestå af en enkelt servertype eller flere servertyper afhængigt af de præstationsegenskaber, du har brug for fra klyngen. Couchbase-arkitekturen består af forskellige tjenester, der kan aktiveres eller deaktiveres pr. Node-basis. I et simpelt scenario aktiverer du alle tjenester på alle noder. Men hvis det ønskes at indstille sig efter behovene i hver tjeneste, eller hvis du vil skalere hver tjeneste uafhængigt, skal du begynde at konfigurere forskellige servertyper, tildele råvarehardware til datatjenesten, SSD'er til indekstjenesten, CPU-optimeret til forespørgselstjeneste og så videre. Klynger kan konfigureres via det indbyggede web-UI, kommandolinjegrænsefladen og REST API.

Hvad angår produktionsopsætning af datainfrastruktur, er både MongoDB og Couchbase ret klare. Sikker på, du kan dykke ned i konfigurations- og tuningindstillinger og aldrig komme ud, men i de fleste tilfælde vil disse være i den lettere ende for infrastrukturteknikere.

Runde vinder: Slips.

Administration

Når databasen kører i produktion og accepterer trafik, bliver administration et centralt anliggende. For at evaluere administrationens lethed vil jeg se på sikkerhedskopieringsprocessen, databaseopgraderinger og overvågningsmetoder.

Sikkerhedskopier

Sikkerhedskopier er en vigtig del af produktionsdatabasehygiejne, og kørsel af databaser på en meget tilgængelig, distribueret måde ændrer ikke den ene bit.

MongoDB tilbyder flere muligheder for sikkerhedskopiering af data fra en kørende klynge. Hvis det underliggende operativsystem understøtter snap-in-time snapshots, kan du stole på, at denne funktion fanger en sikkerhedskopi på et præcist tidspunkt. Dette bliver lidt vanskeligt at sikkerhedskopiere sharded-klynger, fordi du bliver nødt til at tage et sekundært billede af hver shard og en konfigurationsserver på samme tid.

Værktøj på systemniveau som cp eller rsync kan bruges til at kopiere databasefilerne til en anden placering, men skrivning skal stoppes midlertidigt under processen på grund af disse værktøjers art. Selvom MongoDB leveres med kommandolinjeværktøjer til sikkerhedskopiering og gendannelse af databaser, anbefales disse værktøjer ikke til større klynger. Alternativt kan du betale for Cloud Manager eller Ops Manager eller implementere via MongoDB Atlas DBaaS-platformen for at få UI-baseret værktøj, der tager sig af sikkerhedskopier og gendannelser for dig.

Couchbase leveres med kommandolinjeværktøjer til sikkerhedskopiering af data fra de forskellige tjenester, og disse kan konfigureres til at køre fulde sikkerhedskopier eller to slags inkrementelle sikkerhedskopier. Inkrementelle sikkerhedskopier kan enten være trinvis fra den sidste fulde sikkerhedskopi (kumulativ inkrementel) eller inkrementel fra den sidste sikkerhedskopi af enhver art (differentiel inkrementel). Dette giver mulighed for komplekse sikkerhedskopieringsstrukturer, der kræver forskellige niveauer af lagerplads og involverer forskellige niveauer af gendannelseskompleksitet.

Virksomhedskunder kan trække på cbbackupmgr-værktøjet, som bruger forskellige underliggende datastrukturer for at opnå bedre ydeevne, når der sikkerhedskopieres data.

Runde vinder: Couchbase på grund af dens større fleksibilitet og understøttelse af trinvise sikkerhedskopier.

Opgradering

En langvarig klynge skal have en klar, let opgraderingssti. Jo sværere det er at opgradere, jo mindre sandsynligt holdes det ajour. Det betyder, at både udviklere og administratorer går glip af nye funktioner.

MongoDB-opgraderinger forstås bedst fra replikaindstillingsniveauet. Hvis du kører en knust klynge, følger du for det meste trinene til opgradering af replika-sæt på hver skår. Inden for et replika sæt lukkes hver sekundær, opgraderes på plads og startes op. Når sekundærerne er i drift og i overensstemmelse med den primære, induceres en failover, og den tidligere primære kan tages ned og opgraderes. Det starter igen som en sekundær og indhenter skriver, det savnede, når det var offline. Således er opgraderinger for det meste en online proces, men den primære failover vil sandsynligvis resultere i 10 til 20 sekunder uden skrivning, så der kræves et vedligeholdelsesvindue med acceptabel nedetid.

Couchbase nærmer sig opgraderinger på samme måde, som du vil tilføje eller fjerne en node fra en klynge. Alle data fra opgraderingsnoden skal genbalanceres på tværs af klyngen og derefter balanceres igen, når opgraderingen er afsluttet, og noden slutter sig til klyngen igen. Denne genbalanceringsproces skal ske for hver node i klyngen, den ene efter den anden. Dette vil tage meget længere tid end at opgradere en MongoDB-klynge på grund af alle de data, der skal flyttes rundt. En anden mulighed er at tage hele klyngen offline, opgradere hver node og bringe dem alle tilbage online.

Mens Couchbase-opgraderingsstien kræver nul nedetid, er processen lang og kræver en rigelig mængde data, der blandes for at arbejde.

Runde vinder: Slips. Tiebreaker: Hvis nedetid for vedligeholdelse er acceptabel, vinder MongoDB. Hvis ikke, så er Couchbase det eneste valg.

Overvågning

Synlighed i en kørende klynge er naturligvis afgørende for en vellykket databaseadministration. Når ting går galt, er intet værre end at have et begrænset syn på sandheden i klyngen.

MongoDB tilbyder CLI-værktøjer og kommandoer inden i skallen, der giver målinger på instansaktivitet og ydeevne. Ud over dette vil MongoDB med hjælp henvise dig til tredjepartsværktøjer eller dets egne virksomhedsprodukter (Cloud Manager, Ops Manager, Atlas).

Couchbase leveres derimod med et web-UI, der inkluderer statistik og visualiseringer for forekomster, noder, forespørgselsydeevne og mere. Derudover kan Couchbase konfigureres til at sende e-mail-alarmer, når visse statistikker falder uden for rækkevidde.

Runde vinder: Couchbase, til visualiseringer og alarmer uden for boksen.

Brugervenlighed

Når databasen er oprettet, og alle vores administrationsbehov er opfyldt, skifter det største problem fra operation til brug. Jeg vil nedbryde det til datamodellering, indeksdesign, grundlæggende forespørgsel og aggregeringer.

Datamodellering

Som dokumentdatabaser kan hverken MongoDB eller Couchbase undgå udfordringen med at håndtere relationsdata. Begge giver mulighed for at gemme relationsdata som indlejrede, denormaliserede data såvel som i form af referencer til andre dokumenter på øverste niveau. Denne tilgang til datalagring ender med at være det vigtigste overvejelsespunkt for datamodellering for begge databaser, på trods af at hver understøtter en stigende bredde af brugssager, funktioner og forespørgselsmønstre.

Runde vinder: Slips.

Indeks design

Indekser udfører den samme funktion i dokumentdatabaser som de gør i relationelle databaser. Det vil sige, at de repræsenterer bestemte data på mere effektive måder for at forbedre forespørgselens ydeevne. MongoDB og Couchbase tager meget forskellige tilgange til indeksdesign og oprettelse.

MongoDB understøtter oprettelse af indeks for et eller flere felter i et dokument, så du kan specificere rækkefølge og retning (stigende eller faldende) af standardindekser. Det er også muligt at medtage specielle geospatiale indekser og fuldtekstindekser som en del af den samme syntaks. Forespørgselsmotoren bruger disse indekser, præfikser til disse indekser eller en kombination af flere indekser til at fremskynde anmodninger.

Couchbase er afhængig af to forskellige mekanismer til forbedring af forespørgselens ydeevne: MapReduce-visninger og Global Secondary Index (GSI). MapReduce-visninger består af brugerdefineret JavaScript-kode, der behandler data, når de passerer gennem systemet, som en inkrementel præaggregering. MapReduce-visninger kan være så enkle som at tillade dokumentsøgninger i et indre felt, eller de kan omfatte mere kompleks logik, der udfører beregninger og aggregeringer af dataene i dokumenter.

Skrivning af MapReduce i JavaScript for at understøtte forespørgsler er lidt besværligt, så du vil generelt bruge GSI, hvor det er muligt. Indekser i GSI er beskrevet ved hjælp af N1QL (udtalt "nikkel"), en delvis SQL-implementering oven på Couchbase. N1QL-syntaks er ret klar, og N1QL-forespørgsler er langt bedre end MapReduce, men du skal placere indekset på en bestemt node. Hvis du vil have et indeks til at være meget tilgængeligt, skal du manuelt oprette dette indeks på mere end en node.

Runde vinder: MongoDB for sin konsoliderede indekserings-API og evne til helt at undgå MapReduce.

Grundlæggende forespørgsler

Givet en passende datamodel, har de fleste forespørgsler til databasen tendens til at være enkle. Ud over CRUD-operationer, hvor id'et for det pågældende dokument er kendt, er det vigtigt at være i stand til at udtrykke forskellige måder at filtrere dokumenter på og vælge, hvilke felter vi er interesseret i.

MongoDB beskriver forespørgsler i JSON og giver en deklarativ syntaks til angivelse af betingelser og filtre på felter. Forespørgselsdokumentet kan bestå af et hvilket som helst antal forespørgselsvælgere, der beskriver, hvordan resultatsættet skal se ud. Områder, lighed, tekstsøgning og geospatiale forespørgsler kan alle defineres i dette forespørgselsdokument. Dokumentet understøtter boolske operatorer, så flere forespørgselsklausuler kan logisk sammenføjes med OG, ELLER, og så videre. Forespørgselsdokumentet kan hurtigt vokse til et stærkt indlejret JSON-dokument, hvilket til tider kan være overvældende og bestemt tager noget at vænne sig til. Det er også muligt at bruge fremskrivninger i forespørgsler, hvilket giver dig mulighed for kun at returnere de felter, du holder af, og mindske den samlede resultatstørrelse over ledningen.

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