Programavimas

„Couchbase“ apžvalga: išmanioji „NoSQL“ duomenų bazė

Kiekvienam vidutiniam ir dideliam verslui reikia duomenų bazės. Didelėms tarptautinėms įmonėms dažnai reikia visame pasaulyje išplatintų duomenų bazių, o kai jie naudoja savo duomenų bazę finansinėms ar atsargų programoms, jiems reikia nuoseklumo. Keletas duomenų bazių gali patenkinti abu poreikius.

„Couchbase Server“ yra pirmiausia atmintyje paskirstyta, lanksti JSON dokumentų duomenų bazė, kuri yra nuosekli vietiniame klasteryje. „Couchbase Server“ taip pat palaiko kryžminį duomenų centro replikavimą, galiausiai nuosekliai vykdant klasterius.

„Couchbase Lite“ yra įterptoji mobiliojo ryšio duomenų bazė, veikianti neprisijungus ir sinchronizuojama su „Couchbase Sync Gateway“, kai ji veikia internete. Sinchronizavimo šliuzas sinchronizuojamas su „Couchbase Server“, taip pat su keliais „Couchbase Lite“ egzemplioriais.

„Couchbase Server“ galima diegti patalpose, debesyje, „Kubernetes“ arba hibridinėse konfigūracijose. Tai tiek atvirojo kodo, tiek įmonės versijos.

„Couchbase Server“ užklausos kalba N1QL yra SQL superset rinkinys, sukurtas JSON dokumentų duomenų bazėms, su analizės plėtiniais. „Couchbase“ taip pat palaiko pagrindinės vertės duomenų prieigą ir viso teksto paiešką.

Duomenų bazės įmonė „Couchbase“ išaugo sujungus 2011 m. „Membase“ (atmintyje talpykloje kaupiamos klasterinės raktų vertės duomenų bazės kūrėjas) ir „CouchOne“ („Apache CouchDB“ dokumentų duomenų bazės kūrėjai). Nauja įmonė pradėjo nuo vertės sluoksnį, 2012 m. pridėjo JSON dokumentų sluoksnį ir 2014 m. pridėjo mobiliojo duomenų bazę, į SQL panašias užklausas 2015 m., viso teksto paiešką 2017 m. ir analizę 2018 m.

„Couchbase“ alternatyvos ir konkurentai

„Couchbase“ alternatyvos yra „MongoDB“, kita lanksti dokumentų duomenų bazė; „MongoDB“ kartu su „Redis“ talpykloje; „Oracle Database“, aukščiausios klasės reliacinė duomenų bazė; ir „SQL Server“, „Microsoft“ reliacinės duomenų bazės pasiūlymas. Reliacinių duomenų bazių sistemos buvo sukurtos naudoti viename, dideliame serveryje, ir sunku juos išplėsti. „MongoDB“ buvo sukurtas norint atlikti pagrindinio ir vergo replikavimą, kuris šiek tiek keičiamas, tačiau norint jį gerai išplėsti, reikia suskaidyti. „Redis“ padeda pagreitinti „MongoDB“, tačiau pristato dar vieną judančią dalį, kuri gali apsunkinti kombinuotų sistemų valdymą.

Kitos naujausios „Couchbase“ alternatyvos yra „CockroachDB“, „Azure Cosmos DB“, „Amazon Aurora“, „Aerospike“, „Amazon DocumentDB“ ir „Amazon DynamoDB“. Ankstesnėse apžvalgose aptariau tiek reliacinius, tiek NoSQL variantus.

„Couchbase Server“ architektūra

„Couchbase Server“ atlieka kelis vaidmenis: duomenų tarnybą, rodyklių paslaugą, užklausų tarnybą, saugumą, replikavimą, paiešką, įvykių rengimą, analizę ir valdymą. Kiekviena iš šių paslaugų gali būti vykdoma viename ar keliuose mazguose.

„Couchbase Server“ sukurtas vadovaujantis trimis pagrindiniais principais: į atmintį ir į tinklą orientuota architektūra, darbo krūvio izoliacija ir asinchroniniu požiūriu į viską.

Raštai priskiriami atminčiai, tada laikomi diske ir indeksuojami asinchroniškai, neužblokuojant skaitymo ar rašymo. Dažniausiai naudojami duomenys ir rodyklės yra skaidriai palaikomi atmintyje, kad būtų galima greitai skaityti. Šis didelis atminties naudojimas yra naudingas vėlavimui ir pralaidumui, nors tai padidina „Couchbase“ RAM reikalavimus.

„Couchbase Server“ gali atskirai keisti savo paslaugas, kad jos būtų efektyvesnės. Užklausų tarnybai gali būti naudinga daugiau procesoriaus išteklių, indeksų tarnybai gali būti naudojami SSD diskai, o duomenų tarnybai - daugiau RAM. „Couchbase“ vadina šį daugialypį mastelį (MDS), ir tai yra viena iš „Couchbase Server“ skiriamųjų savybių.

Asinchroninės operacijos padeda „Couchbase Server“ išvengti blokavimo rašymo, skaitymo ar užklausų. Kūrėjas gali subalansuoti patvarumą ir nuoseklumą bei vėlavimą, kai to reikia.

„Couchbase JSON“ duomenų modelis palaiko pagrindinius ir sudėtingus duomenų tipus: skaičius, eilutes, įdėtus objektus ir masyvus. Galite kurti normalizuotus arba denormalizuotus dokumentus. „Couchbase Server“ nereikia ar net nepalaiko schemų. Priešingai, „MongoDB“ nereikia schemų, tačiau gali jas palaikyti ir vykdyti, jei kūrėjas pasirenka.

Kaip vėliau išsamiau aptarsiu, prie „Couchbase Server“ dokumentų galite prisijungti naudodamiesi keturiais mechanizmais: raktų reikšmė, SQL pagrįstos užklausos, viso teksto paieška ir „JavaScript“ įvykiai. Jei jūsų JSON dokumentuose yra subdokumentai arba masyvai, galite juos pasiekti tiesiogiai naudodami kelio išraiškas, nereikėdami perkelti ir išanalizuoti viso dokumento. Įvykių sudarymo modelis gali sukelti duomenų pasikeitimus (Atnaujinti) arba laikmačiai. Be to, galite pasiekti „Couchbase Server“ dokumentus sinchronizuodami su „Couchbase Mobile“.

„Couchbase Server“ yra suskirstytas į grupes, „vBuckets“, mazgus ir grupes. Kibiruose yra JSON dokumentai. „vBuckets“ iš esmės yra skeveldros, kurios automatiškai paskirstomos mazgams. Mazgai yra fizinės ar virtualios mašinos, kuriose talpinami pavieniai „Couchbase Server“ egzemplioriai. Grupės yra mazgų grupės. Sinchroninė replikacija vyksta tarp klasterio mazgų.

„Couchbase Server“ diegimo parinktys

„Couchbase Server“ galite įdiegti patalpose, debesyje ir „Kubernetes“. „Couchbase Server Enterprise Edition“ yra nemokama plėtoti ir testuoti, ją galima užsisakyti prenumerata. Atvirojo kodo „Couchbase Server“ bendruomenės leidimas yra nemokamas visiems tikslams. Be kai kurių praleistų funkcijų, „Couchbase Server Community Edition“ yra suderinama su API ir „Couchbase Server Enterprise Edition“.

„Google Cloud Platform“ sukūriau debesies bandomojo važiavimo sesiją, kuri (po penkių minučių diegimo atidėjimo) davė man trijų mazgų „Couchbase Server“ sankaupą ir „Sync Gateway“ mazgą. Man reikėjo maždaug vienos valandos pereiti keturias „Couchbase“ mokymo programas, o tai leido jausti užklausas serveryje.

„Couchbase“ autonominis operatorius

Autonominis „Couchbase“ operatorius, palaikomas tik „Enterprise Edition“, suteikia savąją „Couchbase“ serverio integraciją su atvirojo kodo „Kubernetes“ ir „Red Hat OpenShift“. Operatorius išplečia „Kubernetes“ API sukurdamas „Custom Resource Definition“ ir užregistruodamas save kaip pasirinktinį „Couchbase Server“ valdiklį, kad galėtų valdyti „Couchbase Server“ sankaupas. Tai sumažina sunaudojimo pastangų, kurių reikia „Couchbase“ grupėms paleisti „Kubernetes“, kiekį ir leidžia automatizuoti įprastų „Couchbase Server“ užduočių, tokių kaip „Couchbase Server“ grupių konfigūravimas, kūrimas, mastelis ir atkūrimas, valdymą. Operatorius taip pat dirba su „Azure Kubernetes Service“, „Amazon Elastic Kubernetes Service“ ir „Google Kubernetes Engine“.

Kryžminio duomenų centro replikacija (XDCR)

Kaip jau minėjau anksčiau, „Couchbase Server“ atlieka sinchroninį replikavimą ir turi tvirtą klasterio nuoseklumą. Kad būtų išvengta didelių rašymo delsų, ji atlieka asinchroninį, aktyvųjį aktyvųjį replikavimą klasteriuose, duomenų centruose ir prieinamumo zonose. „XDCR“ leidžia „Couchbase“ būti visame pasaulyje paskirstyta duomenų baze, kainuojančia galimą (o ne stiprų) nuoseklumą tarp grupių.

Pagrindinis „XDCR“ palaikomas visuose „Couchbase Server“ leidimuose. XDCR filtravimas, ribojimas ir laiko žyma pagrįstas konfliktų sprendimas yra visos „Enterprise Edition“ funkcijos.

„Couchbase“ užklausų įrankiai

Galite pateikti užklausą „Couchbase Server“ naudodami raktą, kad gautumėte susietą vertę, kuri gali būti JSON dokumentas arba „Blob“. Taip pat galite pateikti užklausą naudodami SQL tipo N1QL kalbą arba ieškodami viso teksto. Tiek N1QL, tiek viso teksto užklausos vyksta greičiau, jei segmente yra indeksai, palaikantys užklausą.

N1QL

N1QL, tariamas „nikeliu“, labai panašus į standartinį SQL su JSON plėtiniais. Man pasirodė, kad jį pasiimti yra daug lengviau nei „MongoDB“ sujungimo vamzdyną, atsižvelgiant į tai, kad SQL naudoju dešimtmečius.

Iš tikrųjų yra du panašūs N1QL variantai: vienas skirtas „Couchbase Server Query“ paslaugai ir kitas „Analytics“ paslaugai, kuri yra „Enterprise Edition“ funkcija. „N1QL for Analytics“ yra pagrįstas SQL ++.

Kai kurie iš N1QL plėtinių yra NAUDOTI RAKTUS, Lizdas, NESVYKSTAir DINGĘS. NAUDOTI RAKTUS ir NAUDOTI HASH yra užklausos užuominos PRISIJUNGTIs. Lizdas ir NESVYKSTA supakuoti ir išpakuoti masyvus. DINGĘS yra JSON būdinga alternatyva NULL; NETEKA reiškia, kad esama konkrečios vertės arba NULL dokumente. Reikšmių, kurios yra, raktinis žodis NETRUKA ir NE NULL yra ŽINOMAS. N1QL užklausose gali būti naudojami keliai, kurie taip pat taikomi viso teksto paieškoms.

Viso teksto paieška

„Couchbase“ palaiko išorinius viso teksto paieškos variklius, tokius kaip „Solr“, tačiau ji taip pat turi savo „Go“ pagrindu veikiantį viso teksto paieškos variklį „Bleve“. „Bleve“ yra įtraukta į „Couchbase Mobile“, taip pat į „Couchbase Server“, ir ji palaiko daugumą paieškos sintaksių, kurių tikitės.

„Couchbase“ SDK

Visos pagrindinės „Couchbase“ paslaugos yra programuojamos per SDK. SDK galima naudoti C / C ++, .Net (C #, F # ir Visual Basic .Net), Go, Java, Node.js, PHP, Python ir Scala.

Be SDK, „Couchbase“ siūlo glaudų integravimą su keliomis sistemomis: „Spring Data“, .NET LINQ ir pačios „Couchbase“ Osmanų Node.js ODM. Pvz., Šioje pavyzdinėje užklausoje naudojama „Linq2Couchbase“:

{

Serveriai = naujas sąrašas {new URI ("// localhost: 8091 /")}

});

var context = naujas „BucketContext“ („ClusterHelper.GetBucket“ („kelionės pavyzdys“));

var query = (iš kontekste. Užklausa ()

kur a.Country == "Jungtinė Karalystė"

pasirinkite a).

Imtis (10);

užklausa.ToList (). ForEach (Console.WriteLine);

ClusterHelper.Close ();

„Couchbase Mobile“

„Couchbase Mobile“ turi dvi dalis: „Couchbase Lite“, kuri veikia mobiliajame įrenginyje, ir „Couchbase Sync Gateway“, kuri veikia serverio mazge. „Couchbase Lite“ veikia „iOS“, „Android“, .Net ir „Xamarin“ ir palaiko „Swift“, „Objective-C“, „Java“, „Kotlin“ ir C ++ kalbas.

Pvz., Šis „Java“ kodas apibrėžia užklausą vykdyti „Android“:

Duomenų bazės duomenų bazė = DatabaseManager.getDatabase ();

Query searchQuery = QueryBuilder

.select („SelectResult.expression“ („Expression.property“ („oro uosto pavadinimas“)))

. iš („DataSource.database“ (duomenų bazė))

.kur (

„Expression.property“ („type“). EquTo (Expression.string („airport“))

.ir (Expression.property ("airportname"). like (Expression.string (prefiksas + "%")))

);

„Couchbase“ etalonai

Nors „Couchbase“ serveris nebuvo lyginamas, trečioji šalis („Altoros“) tai padarė naudodama YCSB JSON ir raktų vertės testus bei TPCx-IoT testą. Žemiau pateikiama JSON dokumentų etalono diagrama. Kaip matote, „Couchbase Server“ pranoko tiek „MongoDB“, tiek „DataStax“. Šiuos etalonus galite iš naujo paleisti patys, nes „Altoros“ pateikė visus reikiamus scenarijus.

Altoros

Apskritai „Couchbase Server“ kaupia „NoSQL JSON“ dokumentų duomenų bazę su SQL tipo užklausų kalba ir viso teksto paieškos varikliu, o „Couchbase Mobile“ išplečia vertės pasiūlymą ir į mobiliuosius įrenginius. Ar „Couchbase“ turi prasmę, priklauso nuo jūsų programos ir reikalavimų.

Jei jums reikia patikimos reliacinės duomenų bazės schemos struktūros arba diagramų duomenų bazės orientacijos į ryšį, tada „Couchbase“ nedarys to, ko norite. Bet jei jums reikia pasaulinio mastelio dokumentų duomenų bazės, „Couchbase“ yra geras pasirinkimas.

Kaina: „Couchbase Server“ bendruomenės leidimas: nemokamas. „Couchbase Server Enterprise Edition“: Metinės prenumeratos kainuoja pagal mazgą ir yra prieinamos skirtingomis kainomis, priklausomai nuo mazgo reikalingų branduolių ir RAM. Kūrimo ir bandymo mazgai yra nemokami. „Enterprise Edition“ debesies diegimas galimas valandomis. Įprasta programinės įrangos kaina yra 0,662 USD / mazgas / val. AWS „Couchbase Server“ ir 1,641 USD / mazgas / val. „Mobile Sync Gateway“ su standartiniu šablonu, iš pradžių naudojant keturis serverio mazgus ir du sinchronizavimo mazgus. , su automatiniu mastelio keitimu. Kainos apytiksliai palyginamos „Microsoft Azure“ ir „Google Cloud Platform“. Taip pat galite atsinešti savo licenciją ir mokėti tik už debesies išteklius.

Platforma: „Couchbase Server“: „Linux“, „Windows Server 2012 R2“ ir naujesnės versijos; „Kubernetes“, „OpenShift“; AWS, „Azure“, GSP. „Couchbase Server“ kūrimas ir testavimas: „MacOS 10.11“ ir naujesnės versijos, „Windows 10 Anniversary Update“ ir naujesnės versijos; Dokeris. „Couchbase Lite“: „iOS“, „Android“, .Net. „Couchbase Sync Gateway“: „Linux“, „Windows Server 2010“ ir naujesnės versijos, „MacOS 10.12.6“ ir naujesnės versijos; AWS, „Docker“, „OpenShift“.

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