Programovanie

Recenzia Couchbase: Inteligentná databáza NoSQL

Každý stredný až veľký podnik potrebuje databázu. Veľké nadnárodné podniky často potrebujú globálne distribuované databázy, a keď používajú svoju databázu na finančné alebo inventárne aplikácie, potrebujú silnú konzistenciu. Len málo databáz dokáže uspokojiť obe potreby.

Couchbase Server je pamäťovo orientovaná, distribuovaná a flexibilná databáza dokumentov JSON, ktorá je v lokálnom klastri silne konzistentná. Couchbase Server podporuje aj krížovú replikáciu dátových centier s konečnou konzistenciou naprieč klastrami.

Couchbase Lite je zabudovaná mobilná databáza, ktorá pracuje offline a synchronizuje sa s Couchbase Sync Gateway, keď je online. Sync Gateway sa synchronizuje so serverom Couchbase, ako aj s viacerými inštanciami Couchbase Lite.

Server Couchbase je možné nasadiť v prevádzkach, v cloude, na Kubernetes alebo v hybridných konfiguráciách. Dodáva sa v otvorenej aj podnikovej verzii.

Dotazovací jazyk Couchbase Server, N1QL, je nadmnožina SQL určená pre databázy dokumentov JSON s rozšíreniami pre analytiku. Couchbase tiež podporuje prístup k údajom kľúč - hodnota a fulltextové vyhľadávanie.

Spoločnosť Couchbase, ktorá za touto databázou stojí, vzišla zo spojenia spoločností Membase (výrobca zoskupenej databázy kľúčov a hodnôt v pamäti) a CouchOne (vývojári databázy dokumentov Apache CouchDB) v roku 2011. Nová spoločnosť začala s kľúčom hodnotová vrstva, v roku 2012 bola pridaná vrstva dokumentu JSON a v roku 2014 bolo možné pridať mobilnú databázu, v roku 2015 dotazy typu SQL, v roku 2017 fulltextové vyhľadávanie a v roku 2018 analytiku.

Alternatívy a konkurenti Couchbase

Alternatívy k Couchbase zahŕňajú MongoDB, ďalšiu flexibilnú databázu dokumentov; MongoDB kombinovaný s Redisom na ukladanie do pamäte cache; Oracle Database, špičková relačná databáza; a SQL Server, ponuka relačných databáz spoločnosti Microsoft. Relačné databázové systémy boli navrhnuté na použitie na samostatných veľkých serveroch a je ťažké ich škálovať. MongoDB bol navrhnutý na vykonávanie replikácií typu master-slave, ktorá má mierku, ale je potrebné ju rozdeliť, aby sa mohla dobre škálovať. Redis pomáha zrýchliť MongoDB, ale predstavuje ďalšiu pohyblivú časť, ktorá môže komplikovať správu kombinovaných systémov.

Medzi ďalšie nedávne alternatívy k Couchbase patria CockroachDB, Azure Cosmos DB, Amazon Aurora, Aerospike, Amazon DocumentDB a Amazon DynamoDB. V predošlých recenziách som hovoril o relačných aj NoSQL možnostiach.

Architektúra servera Couchbase

Server Couchbase plní rôzne úlohy: dátovú službu, indexovú službu, dotazovaciu službu, bezpečnosť, replikáciu, vyhľadávanie, udalosti, analytiku a správu. Každá z týchto služieb môže byť spustená na jednom alebo viacerých uzloch.

Server Couchbase bol navrhnutý na základe troch základných princípov: architektúra zameraná na pamäť a sieť, izolácia pracovného zaťaženia a asynchrónny prístup ku všetkému.

Zápisy sú vyhradené pre pamäť, potom sa zachovajú na disku a asynchrónne sa indexujú bez blokovania čítania alebo zápisu. Najpoužívanejšie údaje a indexy sú transparentne uchovávané v pamäti na rýchle načítanie. Toto veľké využitie pamäte je dobré pre latenciu a priepustnosť, aj keď zvyšuje požiadavky RAM na Couchbase.

Couchbase Server môže škálovať každú zo svojich služieb nezávisle, aby boli efektívnejšie. Dotazová služba môže ťažiť z väčšieho množstva prostriedkov CPU, indexová služba môže využívať disky SSD a dátová služba môže využívať viac pamäte RAM. Couchbase nazýva toto viacrozmerné škálovanie (MDS) a je jednou z charakteristických vlastností servera Couchbase.

Asynchrónne operácie pomáhajú serveru Couchbase vyhnúť sa blokovaniu zápisov, čítaní alebo dotazov. V prípade potreby môže vývojár vyvážiť trvanlivosť a konzistenciu s latenciou.

Dátový model Couchbase JSON podporuje základné aj zložité dátové typy: čísla, reťazce, vnorené objekty a polia. Môžete vytvárať dokumenty, ktoré sú normalizované alebo denormalizované. Couchbase Server nevyžaduje alebo dokonca nepodporuje schémy. Naproti tomu MongoDB nevyžaduje schémy, ale môže ich podporovať a vynucovať, ak sa vývojár rozhodne.

Ako budem podrobnejšie diskutovať neskôr, k dokumentom na serveri Couchbase môžete pristupovať prostredníctvom štyroch mechanizmov: kľúč - hodnota, dotazy založené na SQL, fulltextové vyhľadávanie a udalosti JavaScriptu. Ak vaše dokumenty JSON obsahujú vnorené dokumenty alebo polia, môžete k nim získať priamy prístup pomocou výrazov cesty bez toho, aby ste museli prenášať a analyzovať celý dokument. Model udalostí sa môže spustiť pri zmenách údajov (OnUpdate) alebo časovače. Okrem toho máte prístup k dokumentom na serveri Couchbase prostredníctvom synchronizácie s Couchbase Mobile.

Couchbase Server je organizovaný do segmentov, vBuckets, uzlov a klastrov. Vedrá obsahujú dokumenty JSON. vBuckets sú v podstate zlomky, ktoré sú automaticky distribuované medzi uzlami. Uzly sú fyzické alebo virtuálne stroje, ktoré hostia jednotlivé inštancie servera Couchbase. Klastre sú skupiny uzlov. Medzi uzlami v klastri dochádza k synchrónnej replikácii.

Možnosti nasadenia servera Couchbase

Couchbase Server môžete inštalovať lokálne, v cloude a na Kubernetes. Couchbase Server Enterprise Edition je zadarmo pre vývoj a testovanie a je k dispozícii na základe predplatného pre produkciu. Open source komunitná edícia Couchbase Server je zadarmo pre všetky účely. Okrem niektorých vynechaných funkcií je Couchbase Server Community Edition kompatibilná s API s Couchbase Server Enterprise Edition.

Vytvoril som reláciu cloudovej testovacej jazdy na Google Cloud Platform, ktorá mi (po päťminútovom oneskorení nasadenia) poskytla trojuzlový klaster servera Couchbase Server a uzol Sync Gateway, všetko dobré na tri hodiny. Potreboval som asi jednu hodinu na to, aby som prešiel štyrmi výukovými programami Couchbase, ktoré mi dali pocit, že som sa mohol pýtať na serveri.

Autonómny operátor Couchbase

Autonómny operátor Couchbase, ktorý je podporovaný iba v Enterprise Edition, poskytuje natívnu integráciu servera Couchbase s otvoreným zdrojom Kubernetes a Red Hat OpenShift. Prevádzkovateľ rozširuje Kubernetes API vytvorením vlastnej definície zdroja a registráciou ako vlastný radič servera Couchbase na správu klastrov servera Couchbase. To znižuje množstvo úsilia, ktoré je potrebné vyvinúť na spustenie klastrov Couchbase na Kubernetes, a umožňuje vám automatizovať správu bežných úloh servera Couchbase, ako je konfigurácia, tvorba, zmena mierky a obnova klastrov servera Couchbase. Prevádzkovateľ tiež spolupracuje so službami Azure Kubernetes Service, Amazon Elastic Kubernetes Service a Google Kubernetes Engine.

Cross Datacenter Replication (XDCR)

Ako som už spomenul, server Couchbase vykonáva synchrónnu replikáciu a má silnú konzistenciu v rámci klastra. Robí asynchrónnu, aktívnu a aktívnu replikáciu naprieč klastrami, dátovými centrami a zónami dostupnosti, aby sa predišlo vysokej latencii zápisu. XDCR umožňuje Couchbase byť globálne distribuovanou databázou za cenu umožnenia prípadnej (skôr než silnej) konzistencie medzi klastrami.

Základné XDCR je podporované vo všetkých vydaniach servera Couchbase. Filtrovanie XDCR, obmedzovanie a riešenie konfliktov založené na časovej pečiatke sú všetko funkcie edície Enterprise Edition.

Couchbase dotazovacie nástroje

Na server Couchbase môžete dotazovať pomocou kľúča na získanie súvisiacej hodnoty, ktorou môže byť dokument JSON alebo objekt Blob. Môžete tiež zadať dotaz pomocou jazyka N1QL podobného SQL alebo pomocou fulltextového vyhľadávania. N1QL aj fulltextové dotazy idú rýchlejšie, ak má segment k dispozícii indexy na podporu dotazu.

N1QL

N1QL, vyslovovaný ako „nikel“, vyzerá veľmi podobne ako štandardný SQL s rozšíreniami pre JSON. Zistil som, že je oveľa jednoduchšie ho vyzdvihnúť ako agregačný plynovod MongoDB, keďže používam SQL už celé desaťročia.

V skutočnosti existujú dve podobné varianty N1QL: jedna pre službu Couchbase Server Query a druhá pre službu Analytics, čo je funkcia Enterprise Edition. N1QL pre Analytics je založený na SQL ++.

Niektoré z rozšírení N1QL sú POUŽÍVAJTE KLÁVESY, Hniezdo, NEZNÁSŤa CHÝBAJÚ. POUŽÍVAJTE KLÁVESY a POUŽIŤ HASH sú tipy na dotaz pre PRIPOJTE SAs. Hniezdo a NEZNÁSŤ zbaliť a rozbaliť polia. CHÝBAJÚ je alternatíva špecifická pre JSON NULOVÝ; NECHýba znamená, že existuje konkrétna hodnota alebo NULOVÝ v dokumente. Kľúčové slovo pre hodnoty, ktoré sú NECHýba a NIE NULL je VEDIEŤ. Dotazy N1QL môžu používať cesty, ktoré sa vzťahujú aj na fulltextové vyhľadávanie.

Fulltextové vyhľadávanie

Couchbase podporuje externé fulltextové vyhľadávače, ako je Solr, ale má tiež svoj vlastný Go fulltextový vyhľadávací engine Bleve. Bleve je zahrnutý v Couchbase Mobile aj na Couchbase Serveri a podporuje väčšinu hľadaných syntaxí, ktoré by ste očakávali.

Couchbase SDK

Všetky hlavné služby Couchbase sú prístupné pre programovanie prostredníctvom SDK. SDK sú k dispozícii pre C / C ++, .Net (C #, F # a Visual Basic .Net), Go, Java, Node.js, PHP, Python a Scala.

Okrem SDK ponúka Couchbase úzku integráciu s niekoľkými rámcami: Spring Data, .NET LINQ a vlastný ODM spoločnosti Ottoman Node.js ODM od Couchbase. Napríklad nasledujúci vzorový dotaz používa Linq2Couchbase:

{

Servery = nový zoznam {new Uri ("// localhost: 8091 /")}

});

var context = new BucketContext (ClusterHelper.GetBucket ("travel-sample"));

var query = (z a v context.Query ()

kde a.Country == "Spojené kráľovstvo"

vyberte a).

Vezmite (10);

query.ToList (). ForEach (Console.WriteLine);

ClusterHelper.Close ();

Couchbase Mobile

Couchbase Mobile má dve časti: Couchbase Lite, ktorá beží na mobilnom zariadení, a Couchbase Sync Gateway, ktorá beží na uzle servera. Couchbase Lite beží na iOS, Android, .Net a Xamarin a podporuje jazyky Swift, Objective-C, Java, Kotlin a C ++.

Napríklad nasledujúci kód Java definuje dopyt, ktorý sa má spustiť v systéme Android:

Databáza databázy = DatabaseManager.getDatabase ();

Query searchQuery = QueryBuilder

.select (SelectResult.expression (Expression.property ("názov letiska")))

.from (DataSource.database (databáza))

.kde(

Expression.property ("typ"). EqualTo (Expression.string ("letisko"))

. a (Expression.property ("názov letiska"). ako (Expression.string (predpona + "%")))

);

Couchbase benchmarky

Aj keď server Couchbase nenastavil porovnanie, tretia strana (Altoros) tak urobila pomocou testov YCSB JSON a párov kľúč - hodnota a testu TPCx-IoT. Nasledujúca tabuľka slúži ako referenčná hodnota pre dokument JSON. Ako vidíte, server Couchbase prekonal MongoDB aj DataStax. Tieto kritériá môžete znova spustiť sami, pretože Altoros dodal všetky požadované skripty.

Altoros

Celkovo možno povedať, že server Couchbase kombinuje databázu dokumentov NoSQL JSON s dotazovacím jazykom podobným SQL a fulltextovým vyhľadávacím nástrojom a Couchbase Mobile rozširuje túto hodnotovú ponuku na mobilné zariadenia. To, či má Couchbase pre vás zmysel, závisí od vašej žiadosti a požiadaviek.

Ak potrebujete spoľahlivú štruktúru schémy relačnej databázy alebo orientáciu pripojenia databázy grafov, Couchbase nebude robiť to, čo chcete. Ak však potrebujete globálne škálovateľnú databázu dokumentov, potom je Couchbase dobrou voľbou.

Náklady: Komunitné vydanie servera Couchbase: Zadarmo. Couchbase Server Enterprise Edition: Ročné predplatné sa účtujú podľa uzlov a sú k dispozícii za rôzne ceny v závislosti od jadier a pamäte RAM potrebných pre daný uzol. Vývojové a testovacie uzly sú zadarmo. Cloudové nasadenie Enterprise Edition je k dispozícii hodinu, s typickou cenou softvéru 0,662 USD / uzol / hodinu na AWS pre Couchbase Server a 1,641 USD / uzol / hodinu pre Mobile Sync Gateway, so štandardnou šablónou, ktorá pôvodne používa štyri uzly servera a dva uzly synchronizácie , s automatickým škálovaním. Cena je zhruba porovnateľná v službách Microsoft Azure a Google Cloud Platform. Môžete si tiež priniesť vlastnú licenciu a platiť iba za cloudové zdroje.

Plošina: Couchbase Server: Linux, Windows Server 2012 R2 a novší; Kubernetes, OpenShift; AWS, Azure, GCP. Vývoj a testovanie servera Couchbase: MacOS 10.11 a novší, Windows 10 Anniversary Update a novší; Docker. Couchbase Lite: iOS, Android, .Net. Couchbase Sync Gateway: Linux, Windows Server 2010 a novší, MacOS 10.12.6 a novší; AWS, Docker, OpenShift.