Programovanie

Zápas NoSQL: MongoDB vs. Couchbase Server

Výber správnej databázy pre danú prácu môže byť skutočnou výzvou, najmä ak máte záujem o celý priestor možností SQL a NoSQL. Ak hľadáte flexibilnú možnosť na všeobecné použitie, ktorá umožňuje plynulé schémy a zložité vnorené dátové štruktúry, môže byť pre vás správna databáza dokumentov. MongoDB a Couchbase Server sú dve populárne možnosti. Ako by ste si mali vybrať?

MongoDB kombinuje výhody nesmiernej popularity, podpory jednoduchého vyhľadávania v grafoch a schopnosti vykonávať dotazy SQL prostredníctvom konektora BI. Couchbase má svoju vlastnú veľkú komunitu používateľov, výkonnú architektúru kľúč - hodnota a dotazovací jazyk podobný SQL, ktorý je schopný prechádzať vnorenými štruktúrami dokumentov.

Stručne povedané, MongoDB aj Couchbase sú výkonné a flexibilné databázy orientované na dokumenty s množstvom doplnkov. To znamená, že majú dôležité rozdiely, ktoré nakláňajú rovnováhu tak či onak, v závislosti od vašich potrieb. Aby sme vám pomohli rozhodnúť sa, vykonáme pochod s týmito databázami prostredníctvom rukavice kľúčových hľadísk, ktoré pokrývajú výkon jednotlivých z hľadiska inštalácie a nastavenia, správy, ľahkého použitia, škálovateľnosti a dokumentácie.

Táto diskusia je založená na MongoDB 3.4 a Couchbase Server 4.6. Môžete si tiež pozrieť moje samostatné recenzie na MongoDB 3.4 a Couchbase Server 4.0.

Inštalácia a nastavenie

Na inštaláciu a nastavenie sa dá pozerať z dvoch pohľadov: vývojári pracujúci proti miestnej inštancii a inžinieri infraštruktúry nastavujúci počiatočný produkčný klaster. Mnoho databáz NoSQL má silné príbehy o prívetivosti pre vývojárov, čo zvyšuje šance vývojára na vyskúšanie produktu a jeho zavedenie do svojich systémov. Priame miestne nastavenie je silnou stránkou predaja. Na druhej strane, databáza sa v konečnom dôsledku osvedčí pri výrobe, takže nastavenie výroby je rovnako dôležité pre správne fungovanie.

Nastavenie vývojára

Skôr ako použijeme binárne súbory spustené na bare metal, pozrieme sa na to, čo je potrebné na nastavenie týchto dvoch databáz v prostredí Docker. Nastavenie Dockeru pre MongoDB aj Couchbase je celkom jednoduché. Couchbase vyžaduje odhalenie niekoľkých ďalších portov, je však jednoduché sa s tým vyrovnať. Po stiahnutí obrázkov a spustení kontajnerov je v prostredí vývojárov znateľný rozdiel. S MongoDB ste hotoví. Môžete sa pripojiť cez aplikáciu alebo shell Mongo a okamžite sa pustiť do práce. Couchbase vás naopak prevedie povinným procesom nastavenia prostredníctvom používateľského rozhrania, kde čelíte množstvu možností konfigurácie zameraných na inžinierov infraštruktúry. Ako vývojár si môžete ponechať vybraté možnosti a použiť predvolený segment, ktorý však zvyšuje trenie.

MongoDB vyhráva tento, ale nie bez výhrady. To, že miestne nasadenie bolo jednoduché, ešte neznamená, že môžete robiť to isté vo výrobe. Môže sa javiť ako zrejmé, že produkčné prostredie vyžaduje väčšiu starostlivosť a konfiguráciu, ale rozsiahle výkupné útoky na nezabezpečené, verejne dostupné inštancie MongoDB začiatkom tohto roka naznačujú, že mnoho obchodov používa nebezpečné skratky.

Víťaz kola: MongoDB.

Výrobné nastavenie

Nasadenie distribuovanej databázy do výroby zvyčajne vyžaduje veľa krokov a spravodlivú mieru koordinácie; MongoDB a Couchbase sa nelíšia. V oboch prípadoch bude obtiažnosť nastavenia závisieť od požiadaviek nasadenia, pričom rôzne kompromisy výkonu budú mať rôznu úroveň zložitosti.

Klastre MongoDB budú pozostávať buď z repliky, alebo zo zlomku klastra. Sada replík je skupina serverov MongoDB, ktoré obsahujú všetky rovnaké údaje, zatiaľ čo zlomok klastra distribuuje údaje medzi niekoľko súprav replík. Sady replík sa dajú ľahko nakonfigurovať a pozostávajú z jedného typu servera, ktorý sa má nasadiť. Trhané klastre sú viac zapojené a vyžadujú nasadenie troch rôznych typov serverov, kde sa každý replikuje. Klastre je možné konfigurovať pomocou príznakov príkazového riadku, konfiguračných súborov a príkazov databázy.

Klastre Couchbase sa môžu skladať z jedného typu servera alebo viacerých typov serverov, v závislosti od výkonových charakteristík, ktoré klaster potrebujete. Architektúra Couchbase pozostáva z rôznych služieb, ktoré je možné povoliť alebo zakázať na základe jednotlivých uzlov. V jednoduchom scenári povolíte všetky služby na všetkých uzloch. Ak je však požadované vyladenie potrieb každej služby alebo ak chcete každú službu škálovať samostatne, budete musieť začať konfigurovať rôzne typy serverov, prideľovať komoditný hardvér pre dátovú službu, disky SSD pre indexovú službu, optimalizované pre CPU pre dopytovacia služba atď. Klastre je možné konfigurovať pomocou zabudovaného webového používateľského rozhrania, rozhrania príkazového riadku a rozhrania REST API.

Čo sa týka nastavenia výroby dátovej infraštruktúry, MongoDB aj Couchbase sú pomerne jednoznačné. Iste, môžete sa ponoriť do možností konfigurácie a ladenia a nikdy vyjsť, ale vo väčšine prípadov to bude pre inžinierov infraštruktúry jednoduchšie.

Víťaz kola: Kravata.

Administratíva

Akonáhle je databáza v prevádzke a prijíma prenos, správa sa stáva kľúčovým záujmom. Na vyhodnotenie ľahkosti správy sa pozriem na proces zálohovania, aktualizácie databáz a prístupy k monitorovaniu.

Zálohy

Zálohy sú dôležitou súčasťou hygieny produkčnej databázy a spustenie databáz vysoko dostupným a distribuovaným spôsobom to nezmení ani trochu.

MongoDB ponúka niekoľko možností zálohovania dát bežiaceho klastra. Ak podkladový operačný systém podporuje snímky typu point-in-time, môžete sa spoľahnúť, že táto funkcia zachytí zálohu v presnom okamihu. To bude trochu zložitejšie pre zálohovanie zlomkov klastrov, pretože budete musieť nasnímať sekundárny obraz z každého zlomku a konfiguračného servera súčasne.

Na kopírovanie databázových súborov do iného umiestnenia je možné použiť nástroje na úrovni systému, ako sú cp alebo rsync, ale kvôli charakteru týchto nástrojov sa počas procesu musia pozastaviť zápisy. Aj keď sa MongoDB dodáva s nástrojmi príkazového riadku na zálohovanie a obnovu databáz, tieto nástroje sa pre väčšie klastre neodporúčajú. Prípadne môžete zaplatiť za Cloud Manager alebo Ops Manager alebo nasadiť prostredníctvom platformy MongoDB Atlas DBaaS a získať nástroje založené na používateľskom rozhraní, ktoré sa postarajú o zálohy a obnovy za vás.

Couchbase sa dodáva s nástrojmi príkazového riadku na zálohovanie údajov z rôznych služieb, ktoré je možné nakonfigurovať na vykonávanie úplných záloh alebo dvoch druhov prírastkových záloh. Prírastkové zálohy môžu byť prírastkové od poslednej plnej zálohy (kumulatívne prírastkové) alebo prírastkové od poslednej zálohy ľubovoľného druhu (rozdielne prírastkové). To umožňuje zložité zálohovacie štruktúry, ktoré vyžadujú rôzne úrovne úložného priestoru a zahŕňajú rôzne úrovne zložitosti obnovy.

Podnikoví zákazníci môžu využiť obslužný program cbbackupmgr, ktorý na dosiahnutie lepšieho výkonu pri zálohovaní údajov používa rôzne podkladové dátové štruktúry.

Víťaz kola: Couchbase, vďaka svojej väčšej flexibilite a podpore prírastkových záloh.

Aktualizácia

Dlhodobo fungujúci klaster by mal mať jasnú a ľahkú cestu aktualizácie. Čím ťažšia je aktualizácia, tým menej je pravdepodobné, že bude udržiavaná v aktuálnom stave. To znamená, že vývojárom aj správcom budú chýbať nové funkcie.

Inovácie MongoDB sú najlepšie pochopiteľné z úrovne sady replík. Ak prevádzkujete rozdelený klaster, väčšinou postupujte podľa pokynov na aktualizáciu replík sád v každom zlomku. V rámci sady replík je každá sekundárna jednotka vypnutá, upgradovaná na danom mieste a uvedená do prevádzky. Akonáhle sú sekundárne bloky v prevádzke a sú v súlade s primárnym modulom, je indukované zlyhanie a bývalý primárny modul je možné stiahnuť a upgradovať. Znovu sa spustí ako sekundárne a vyrovná sa zápisom, ktoré sa minuli v režime offline. Inovácie sú teda väčšinou online proces, ale primárne zlyhanie pravdepodobne vyústi do 10 až 20 sekúnd bez zápisu, takže je potrebné okno údržby s prijateľnými prestojmi.

Couchbase pristupuje k upgradom rovnakým spôsobom, ako by ste pridali alebo odstránili uzol z klastra. Všetky údaje upgradujúceho uzla musia byť vyvážené v rámci klastra, potom musia byť znova vyvážené, keď je aktualizácia dokončená a uzol sa znova pripojí ku klastru. Tento proces vyváženia musí prebiehať pre každý uzol v klastri jeden za druhým. Bude to trvať oveľa dlhšie ako aktualizácia klastra MongoDB, kvôli všetkým údajom, ktoré sa musia presúvať. Ďalšou možnosťou je prepnúť celý klaster do režimu offline, inovovať každý uzol a vrátiť ich späť do režimu online.

Zatiaľ čo cesta upgradovania na Couchbase vyžaduje nulové prestoje, proces je dlhý a vyžaduje veľké množstvo prešmykovania údajov, aby mohol fungovať.

Víťaz kola: Kravata. Tiebreaker: Ak sú výpadky údržby prijateľné, potom vyhráva MongoDB. Ak nie, potom je Couchbase jedinou voľbou.

Monitorovanie

Viditeľnosť bežiaceho klastra je samozrejme nevyhnutná pre úspešnú správu databázy. Ak sa situácia zhoršuje, nie je nič horšie, ako mať obmedzený pohľad na pravdu v zhluku.

MongoDB ponúka nástroje a príkazy CLI v rámci shellu, ktoré poskytujú metriky o aktivite a výkone inštancie. Okrem toho vás MongoDB ochotne upozorní na nástroje tretích strán alebo vlastné podnikové produkty (Cloud Manager, Ops Manager, Atlas).

Couchbase sa na druhej strane dodáva s webovým používateľským rozhraním, ktoré obsahuje štatistiku a vizualizácie inštancií, uzlov, výkonu dotazov a ďalších. Couchbase môže byť navyše nakonfigurovaný na odosielanie e-mailových upozornení, keď určité štatistické údaje spadnú mimo rozsah.

Víťaz druhého kola: Couchbase, ktorý umožňuje vizualizácie a výstrahy pripravené na použitie.

Jednoduchosť použitia

Po nastavení databázy a splnení všetkých našich administratívnych potrieb sa hlavný problém presunie z prevádzky na použitie. Rozdelím to na dátové modelovanie, návrh indexu, základné dopytovanie a agregácie.

Dátové modelovanie

Ako databázy dokumentov sa MongoDB ani Couchbase nevyhnú výzve, ako zaobchádzať s relačnými údajmi. Oba ponúkajú možnosť ukladať relačné údaje ako vnorené, denormalizované údaje, ako aj vo forme odkazov na ďalšie dokumenty najvyššej úrovne. Tento prístup k ukladaniu údajov končí hlavným bodom úvahy pre modelovanie údajov pre obe databázy, napriek tomu, že každý z nich podporuje rastúcu šírku prípadov použitia, funkcií a vzorov dotazov.

Víťaz kola: Kravata.

Dizajn indexu

Indexy majú v databázach dokumentov rovnakú funkciu ako v relačných databázach. To znamená, že predstavujú určité údaje efektívnejším spôsobom, ako zvýšiť výkon dotazov. MongoDB a Couchbase používajú veľmi odlišné prístupy k návrhu a tvorbe indexov.

MongoDB podporuje vytváranie indexov pre jedno alebo viac polí v dokumente, čo vám umožňuje určiť poradie a smer (vzostupne alebo zostupne) štandardných indexov. Ako súčasť rovnakej syntaxe je tiež možné zahrnúť špeciálne geopriestorové indexy a fulltextové indexy. Dotazový stroj použije tieto indexy, predpony týchto indexov alebo kombináciu niekoľkých indexov na urýchlenie požiadaviek.

Couchbase sa pri zlepšovaní výkonu dotazov spolieha na dva rôzne mechanizmy: zobrazenia MapReduce a globálny sekundárny index (GSI). Zobrazenia MapReduce pozostávajú z používateľom definovaného kódu JavaScript, ktorý spracúva údaje pri ich prechode systémom, napríklad v prírastkovej predbežnej agregácii. Zobrazenia MapReduce môžu byť také jednoduché, ako umožňujú vyhľadávanie dokumentov vo vnútornom poli, alebo môžu obsahovať zložitejšiu logiku, ktorá vykonáva výpočty a agregácie údajov v dokumentoch.

Písanie MapReduce v JavaScripte na podporu dotazov je trochu nepraktické, takže GSI budete všeobecne chcieť používať, kde je to možné. Indexy v GSI sú opísané pomocou N1QL (vyslovuje sa „nikel“), čo je čiastočná implementácia SQL nad Couchbase. Syntax N1QL je pomerne jasná a dotazy N1QL sú oveľa lepšie ako MapReduce, musíte však umiestniť index na konkrétny uzol. Ak chcete, aby bol index vysoko dostupný, musíte ho manuálne vytvoriť na viac ako jednom uzle.

Víťaz kola: MongoDB za konsolidované indexovacie API a schopnosť úplne sa vyhnúť MapReduce.

Základné otázky

Pri vhodnom dátovom modeli býva väčšina dotazov do databázy jednoduchá. Okrem operácií CRUD, kde je známe ID predmetného dokumentu, je dôležité vedieť vyjadriť rôzne spôsoby filtrovania dokumentov a zvoliť si oblasti, ktoré nás zaujímajú.

MongoDB popisuje dotazy v JSON a poskytuje deklaratívnu syntax na špecifikáciu podmienok a filtrov v poliach. Dokument dotazu môže pozostávať z ľubovoľného počtu selektorov dotazu, ktoré popisujú, ako by mala výsledná sada vyzerať. V tomto dokumente dotazu je možné definovať rozsahy, rovnosť, textové vyhľadávanie a geopriestorové dotazy. Tento dokument podporuje logické operátory, takže s ním možno logicky spojiť viac klauzúl dotazu A, ALEBO, a tak ďalej. Dotazový dokument môže rýchlo prerásť do silne vnoreného dokumentu JSON, ktorý môže byť občas ohromujúci a určite si treba trochu zvyknúť. Je tiež možné použiť projekcie v dotazoch, čo vám umožní vrátiť iba tie polia, na ktorých vám záleží, a zmenšiť celkovú veľkosť výsledku po drôte.

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