Преглед на Couchbase: Интелигентна база данни NoSQL

Всеки среден до голям бизнес се нуждае от база данни. Големите мултинационални предприятия често се нуждаят от глобално разпределени бази данни и когато използват своята база данни за финансови или инвентарни приложения, те се нуждаят от силна последователност. Малко бази данни могат да задоволят и двете потребности.

Couchbase Server е първоначално разпределена, гъвкава JSON база данни с документи, която е силно съгласувана в локален клъстер. Couchbase Server също поддържа репликация на кръстосани центрове за данни с евентуална последователност между клъстери. 

Couchbase Lite е вградена мобилна база данни, която работи офлайн и се синхронизира с Couchbase Sync Gateway, когато е онлайн. Sync Gateway се синхронизира с Couchbase Server, както и с множество инстанции на Couchbase Lite.

Couchbase Server може да бъде разположен в помещения, в облака, на Kubernetes или в хибридни конфигурации. Предлага се както с отворен код, така и с корпоративна версия.

Езикът за заявки на Couchbase Server, N1QL, е SQL надмножество, предназначено за бази данни на JSON документи, с разширения за анализ. Couchbase също така поддържа достъп до данни с ключ-стойност и търсене на пълен текст.

Couchbase, компанията, която стои зад базата данни, се разрасна от сливането на Membase (създател на кеширана в паметта клъстерирана база данни ключ-стойност) и CouchOne (разработчици на базата данни на Apache CouchDB) през 2011 г. Новата компания стартира с ключ- стойностен слой, добавя слоя документ JSON през 2012 г. и продължава да добавя мобилна база данни през 2014 г., SQL-подобни заявки през 2015 г., пълнотекстово търсене през 2017 г. и анализи през 2018 г.

Couchbase алтернативи и конкуренти

Алтернативите на Couchbase включват MongoDB, друга гъвкава база данни с документи; MongoDB в комбинация с Redis за кеширане; Oracle Database, релационна база данни от висок клас; и SQL Server, релационна база данни на Microsoft. Системите за релационни бази данни са проектирани за използване на единични, големи сървъри и е трудно да ги мащабирате. MongoDB е проектиран да прави репликация главно-подчинен, която се мащабира малко, но се нуждае от острие, за да се мащабира добре. Redis помага да се ускори MongoDB, но представя друга движеща се част, която може да усложни управлението на комбинираните системи.

Други скорошни алтернативи на Couchbase включват CockroachDB, Azure Cosmos DB, Amazon Aurora, Aerospike, Amazon DocumentDB и Amazon DynamoDB. Обсъждах както релационните, така и NoSQL опциите в предишни рецензии.

Сървърна архитектура на Couchbase

Couchbase Server изпълнява множество роли: услуга за данни, услуга за индексиране, услуга за заявки, защита, репликация, търсене, събития, анализи и управление. Тези услуги могат да се изпълняват на един или повече възли.

Couchbase Server е проектиран около три основни принципа: архитектура, ориентирана към паметта и мрежата, изолиране на работното натоварване и асинхронен подход към всичко.

Записванията се ангажират с памет, след това се запазват на диск и се индексират асинхронно, без да се блокират четенията или записите. Най-използваните данни и индекси се поддържат прозрачно в паметта за бързо четене. Това интензивно използване на паметта е добро за латентност и пропускателна способност, въпреки че увеличава изискванията за RAM на Couchbase.

Couchbase Server може да мащабира всяка от своите услуги независимо, за да ги направи по-ефективни. Услугата за заявки може да се възползва от повече ресурси на процесора, услугата за индекс може да използва SSD, а услугата за данни може да използва повече RAM. Couchbase нарича това многомерно мащабиране (MDS) и това е една от отличителните характеристики на Couchbase Server.

Асинхронните операции помагат на Couchbase Server да избегне блокиране на запис, четене или заявки. Разработчикът може да балансира трайността и последователността спрямо латентността, когато е необходимо.

Моделът за данни на Couchbase JSON поддържа както основни, така и сложни типове данни: числа, низове, вложени обекти и масиви. Можете да създавате документи, които са нормализирани или денормализирани. Couchbase Server не изисква или дори поддържа схеми. За разлика от това, MongoDB не изисква схеми, но може да ги поддържа и налага, ако разработчикът реши.

Както ще обсъдя по-подробно по-късно, можете да получите достъп до документите на Couchbase Server чрез четири механизма: ключ-стойност, SQL-базирани заявки, пълнотекстово търсене и JavaScript събития. Ако вашите JSON документи имат поддокументи или масиви, можете да получите директен достъп до тях, като използвате изрази на пътя, без да е необходимо да прехвърляте и анализирате целия документ. Моделът за събития може да задейства промени в данните ( OnUpdate) или таймери. Освен това можете да осъществите достъп до документи на Couchbase Server чрез синхронизация с Couchbase Mobile.  

Couchbase Server е организиран в групи, vBuckets, възли и клъстери. Кофите съдържат JSON документи. vBuckets са по същество парчета, които автоматично се разпределят между възлите. Възлите са физически или виртуални машини, които хостват единични екземпляри на Couchbase Server. Клъстерите са групи възли. Синхронна репликация възниква между възлите в клъстера.

Опции за разполагане на Couchbase Server

Можете да инсталирате Couchbase Server на място, в облака и на Kubernetes. Couchbase Server Enterprise Edition е безплатен за разработка и тестване и е достъпен чрез абонамент за производство. Отвореното издание Couchbase Server Community Edition е безплатно за всички цели. Освен някои пропуснати функции, Couchbase Server Community Edition е съвместим с API с Couchbase Server Enterprise Edition.

Създадох облачна сесия за тестово шофиране на Google Cloud Platform, която (след петминутно забавяне на внедряването) ми даде три възела Couchbase Server клъстер и възел Sync Gateway, всичките добри за три часа. Имах нужда от около час, за да премина през четирите урока на Couchbase, което ми даде усещане за заявка към сървъра.

Автономният оператор на Couchbase

Автономният оператор Couchbase, поддържан само в Enterprise Edition, осигурява интегрирана интеграция на Couchbase Server с Kubernetes с отворен код и Red Hat OpenShift. Операторът разширява Kubernetes API чрез създаване на персонализирана дефиниция на ресурси и се регистрира като персонализиран контролер на Couchbase Server за управление на клъстери на Couchbase Server. Това намалява количеството усилия на devops, необходими за стартиране на Couchbase клъстери на Kubernetes, и ви позволява да автоматизирате управлението на общи задачи на Couchbase Server, като конфигуриране, създаване, мащабиране и възстановяване на клъстери на Couchbase Server. Операторът работи също така с Azure Kubernetes Service, Amazon Elastic Kubernetes Service и Google Kubernetes Engine.

Репликация на кръстосани центрове за данни (XDCR)

Както споменах по-рано, Couchbase Server извършва синхронна репликация и има силна последователност в рамките на клъстер. Той прави асинхронна, активно-активна репликация в клъстери, центрове за данни и зони за наличност, за да избегне възникването на големи латентности при запис. XDCR позволява на Couchbase да бъде глобално разпределена база данни, като цената позволява евентуална (а не силна) съгласуваност между клъстерите.

Basic XDCR се поддържа във всички издания на Couchbase Server. XDCR филтриране, регулиране и разрешаване на конфликти въз основа на времеви печат са всички функции на Enterprise Edition.

Инструменти за заявки на Couchbase

Можете да направите заявка към Couchbase Server, като използвате ключ за извличане на свързаната стойност, която може да бъде JSON документ или Blob. Можете също да го направите с SQL-подобен език N1QL или с пълнотекстово търсене. И N1QL, и пълнотекстовите заявки вървят по-бързо, ако групата има индекси, които да поддържат заявката.

N1QL

N1QL, произнася се „никел“, много прилича на стандартния SQL, с разширения за JSON. Открих, че е много по-лесно да го взема, отколкото агрегиращата тръба на MongoDB, като се има предвид, че използвам SQL от десетилетия.

Всъщност има два подобни варианта на N1QL: един за услугата Couchbase Server Query и един за услугата Analytics, която е функция на Enterprise Edition. N1QL за Анализ се основава на SQL ++.

Някои от разширения N1QL са USE KEYS, NEST, UNNEST, и MISSING. USE KEYSи USE HASHса подсказки за заявки за JOINs. NESTи UNNESTопаковайте и разопаковайте масиви. MISSINGе специфична за JSON алтернатива на NULL; IS NOT MISSINGозначава, че определена стойност присъства или е NULLв документ. Ключовата дума за стойности, които са NOT MISSINGи NOT NULLса KNOWN. Заявките за N1QL могат да използват пътища, които се отнасят и за пълнотекстови търсения.

Търсене на пълен текст

Couchbase поддържа външни пълнотекстови търсачки, като Solr, но има и своя собствена Go-базирана, пълнотекстова търсачка Bleve. Bleve е включен в Couchbase Mobile, както и в Couchbase Server и поддържа повечето синтаксиси на търсенето, които бихте очаквали.

Couchbase SDK

Всички основни услуги на Couchbase са изложени за програмиране чрез SDK. Налични са SDK за C / C ++, .Net (C #, F # и Visual Basic .Net), Go, Java, Node.js, PHP, Python и Scala.

В допълнение към SDK, Couchbase предлага тясна интеграция с няколко рамки: Spring Data, .NET LINQ и собствения Ochoman Node.js ODM на Couchbase. Например следната примерна заявка използва Linq2Couchbase:

{

     Сървъри = нов списък {нов Uri ("// localhost: 8091 /")}

});

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

var query = (от a in context.Query ()

               където a.Country == "Обединеното кралство"

               Избери).

               Вземете (10);

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

ClusterHelper.Close ();

Couchbase Mobile

Couchbase Mobile има две части: Couchbase Lite, която работи на мобилно устройство, и Couchbase Sync Gateway, която работи на сървърен възел. Couchbase Lite работи на iOS, Android, .Net и Xamarin и поддържа езиците Swift, Objective-C, Java, Kotlin и C ++.

Например, следният Java код определя заявка, която да се изпълнява на Android:

База данни на базата данни = DatabaseManager.getDatabase ();

Query searchQuery = QueryBuilder

  .select (SelectResult.expression (Expression.property ("airportname")))

  .from (DataSource.database (база данни))

  .където(

    Expression.property ("type"). JednakTo (Expression.string ("airport"))

      .and (Expression.property ("airportname"). like (Expression.string (prefix + "%")))

);

Couchbase еталони

Въпреки че не е направил бенчмарк на Couchbase Server, трета страна (Altoros) е направила това, използвайки YCSB JSON и тестовете за ключ-стойност и TPCx-IoT теста. Графиката по-долу е за бенчмарка на документ JSON. Както можете да видите, Couchbase Server превъзхожда MongoDB и DataStax. Можете сами да повторите тези еталони, тъй като Altoros е предоставил всички необходими скриптове.

Altoros

Като цяло, Couchbase Server подрежда добре база данни с документи NoSQL JSON с SQL-подобен език за заявки и пълнотекстова търсачка, а Couchbase Mobile разширява предложението за стойност към мобилни устройства. Дали Couchbase има смисъл за вас, зависи от вашето приложение и изисквания.

Ако имате нужда от надеждната структура на схемата на релационна база данни или ориентацията на връзката на база данни на графики, тогава Couchbase няма да направи това, което искате. Но ако имате нужда от глобално мащабируема база данни с документи, тогава Couchbase е добър избор.

-

Цена: Couchbase Server Community Edition: Безплатно. Couchbase Server Enterprise Edition: Годишните абонаменти се определят от възел и се предлагат на различни ценови точки в зависимост от необходимите ядра и RAM памет. Възлите за разработка и тестване са безплатни. Разполаганията в облачно издание Enterprise се предлагат на час, с типично ценообразуване на софтуера от 0,662 $ / възел / час на AWS за Couchbase Server и 1,641 $ / възел / час за Mobile Sync Gateway, със стандартен шаблон, използващ първоначално четири сървърни възела и два възела за синхронизиране , с автоматично мащабиране. Ценообразуването е приблизително сравнима за Microsoft Azure и Google Cloud Platform. Можете също така да донесете свой собствен лиценз и да платите само за облачните ресурси.

Платформа: Couchbase сървър: Linux, Windows Server 2012 R2 и по-нови версии; Kubernetes, OpenShift; AWS, Azure, GCP. Разработка и тест на Couchbase Server: MacOS 10.11 и по-нови версии, Windows 10 Anniversary Update и по-нови версии; Докер. Couchbase Lite: iOS, Android, .Net. Couchbase Sync Gateway: Linux, Windows Server 2010 и по-нови версии, MacOS 10.12.6 и по-нови версии; AWS, Docker, OpenShift.