Обзор Couchbase: умная и эффективная NoSQL база данных

Обзор Couchbase: умная и эффективная NoSQL база данных
Андрей Волков

Андрей Волков

Системное, сетевое администрирование +DBA. И немного программист!))  Профиль автора.

Гибкая, распределенная база данных документов предлагает простой язык запросов, мобильную синхронизацию, независимо масштабируемые сервисы и высокую согласованность в кластере.

Среднему и крупному бизнесу нужна база данных. Гигантские транснациональные корпорации часто нуждаются в глобально распределенных базах данных, и когда они используют свою базу данных для финансовых приложений или складских систем, им нужна сильная согласованность. Немногие базы данных могут удовлетворить обе потребности.



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 также поддерживает key-value (ключ-значение) доступ к данным и полнотекстовый поиск.

Couchbase, компания, стоящая за базой данных, стала известной в 2011 году в результате слияния Membase (создателя key-value кэшированной кластерной базы данных в памяти (in-memory)) и CouchOne (разработчиков базы данных документов Apache CouchDB). Новая компания начинала разработку key-value слоя новой базы данных, добавив слой документов 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. 

 

Архитектура Couchbase Server

Couchbase Server выполняет несколько функций: служба данных, служба индексации, служба запросов, безопасность, репликация, поиск, обработка событий, аналитика и управление. Эти службы могут быть запущены на одном или нескольких узлах.

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

Данные изначально записываются в память, затем сохраняются на диск и асинхронно индексируются без блокирования чтения или записи. Наиболее часто используемые данные и индексы прозрачно хранятся в памяти для быстрого чтения. Такое интенсивное использование памяти хорошо для производительности и пропускной способности, хотя увеличивает требования к оперативной памяти Couchbase.

Couchbase Server может масштабировать каждую из своих служб независимо, чтобы сделать их более эффективными. Служба запросов может получить больше ресурсов ЦП, служба индексирования может использовать твердотельные накопители, а служба данных может использовать больше ОЗУ. Couchbase называет это многомерным масштабированием (MDS), и это одна из отличительных особенностей Couchbase Server.

Асинхронные операции помогают Couchbase Server избегать блокирования записи, чтения или запросов. При необходимости разработчик может сбалансировать долговечность хранения и согласованность данных с допустимым уровнем задержки.

Модель данных Couchbase JSON поддерживает как базовые, так и сложные типы данных: числа, строки, вложенные объекты и массивы. Вы можете создавать документы, которые нормализованы или денормализованы. Couchbase Server не требует и даже не поддерживает схемы. Напротив, MongoDB не требует схем, но может поддерживать и применять их, если разработчик выберет.

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

Couchbase Server организован в сегменты (Buckets), виртуальные сегменты (vBuckets), узлы (Nodes) и кластеры (Clusters). В сегментах содержатся документы 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 Server. Это тест-драйв в Google Cloud Platform сразу после загрузки пакета с примерами авиаперевозок.

 

Couchbase Автономный Оператор

Автономный оператор Couchbase (Autonomous Operator) поддерживаемый только в Enterprise Edition, обеспечивает встроенную интеграцию Couchbase Server с открытым исходным кодом Kubernetes и Red Hat OpenShift. Оператор расширяет API Kubernetes, создавая пользовательское определение ресурса и регистрируясь как пользовательский контроллер 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 быть глобально распределенной базой данных за счет обеспечения возможной (а не строгой) согласованности между кластерами.

Базовая XDCR поддерживается во всех выпусках Couchbase Server. Фильтрация XDCR, регулирование и разрешение конфликтов на основе меток времени - все эти функции доступны уже только в Enterprise Edition.

 

Инструменты запросов Couchbase

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

 

N1QL

N1QL, произносится как «никель», очень похож на стандартный SQL с расширениями для JSON. Я обнаружил, что его намного легче освоить, чем конвейер агрегации MongoDB, с учетом того, что я использую SQL десятилетиями.

На самом деле есть два аналогичных варианта N1QL: один для службы запросов сервера Couchbase, а другой для службы аналитики, которая является функцией Enterprise Edition. N1QL для аналитики основан на SQL ++.

Некоторые из расширений N1QL: USE KEYS, NEST, UNNEST и MISSING. USE KEYS и USE HASH являются подсказками запросов для JOIN. NEST и UNNEST упаковщиков и распаковвщиков массивов. MISSING - это JSON-специфическая альтернатива NULL; IS NOT MISSING означает, что в документе присутствует конкретное значение или значение NULL. Ключевое слово для значений, которые НЕ пропущены и не пустые, - KNOWN. N1QL-запросы могут использовать пути (paths), которые также применяются к полнотекстовым поискам.

Пример запроса на N1QL

Это простой запрос N1QL к тестовому сегменту авиапутешествий для Couchbase Server. Обратите внимание, насколько N1QL похож на SQL.

Список индексов Couchbase Server  

Список индексов в Couchbase Server для тестового сегмента авиаперевозок, разбитого по узлам.

Индекс def_type необходим для работы оператора WHERE t.type =… на предыдущем снимке экрана.

 

Полнотекстовый поиск

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

полнотекстовый поиск с использованием движка Bleve сервера Couchbase

Полнотекстовый поиск с использованием движка Bleve сервера Couchbase.

Этот запрос требует полнотекстового индекса.

 

Couchbase SDKs

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

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

{
     Servers = new List<Uri> {new Uri("http://localhost:8091/")}
});

var context = new BucketContext(ClusterHelper.GetBucket("travel-sample"));
var query = (from a in context.Query<AirLine>()
               where a.Country == "United Kingdom"
               select a).
               Take(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:

Database database = DatabaseManager.getDatabase();
Query searchQuery = QueryBuilder
  .select(SelectResult.expression(Expression.property("airportname")))
  .from(DataSource.database(database))
  .where(
    Expression.property("type").equalTo(Expression.string("airport"))
      .and(Expression.property("airportname").like(Expression.string(prefix + "%")))
);

 

Тесты производительности Couchbase

Сторонние разработчики (Altoros) производили тестирование производительности с помощью тестов JCSB и ключей-значений YCSB, а также теста TPCx-IoT. Приведенная ниже диаграмма предназначена для теста JSON-документа. Как видите, Couchbase Server превзошел как MongoDB, так и DataStax. Вы можете самостоятельно выполнить эти тесты, поскольку Altoros предоставил все необходимые сценарии.

тест документа json couchbase - benchmark

JSON Benchmark от Altoros: сравнение Couchbase Server, MongoDB и DataStax.

Как видите, в этом тесте Couchbase обеспечил более высокую пропускную способность и меньшую задержку, которые улучшились по мере масштабирования данных и сервера.

В целом, Couchbase Server - это хороший вариант базы данных для документов NoSQL JSON с SQL-подобным языком запросов и механизмом полнотекстового поиска, а Couchbase Mobile расширяет предложение для мобильных устройств. Имеет ли смысл использование Couchbase для вас, зависит от вашего приложения и требований.

Если вам нужна строгая структура схемы реляционной базы данных или Вы ориентированы на использование графовой база данных, то Couchbase навряд ли Вас устроит. Но если вам нужна глобально масштабируемая база данных документов, то Couchbase - хороший выбор.

 

Цены и платформы

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

Платформа:

  • Couchbase Server: Linux, Windows Server 2012 R2 и более поздние версии;
  • Кубернетес, OpenShift;
  • AWS, Azure, GCP.

Разработка и тестирование Couchbase Server:

  • MacOS 10.11 и более поздние версии;
  • Windows 10 Anniversary Update и более поздние версии;
  • Docker.

Couchbase Lite:

iOS, Android, .Net.

Couchbase Sync Gateway:

  • Linux;
  • Windows Server 2010 и более поздние версии;
  • MacOS 10.12.6 и более поздние версии;
  • AWS;
  • Docker;
  • OpenShift.

 

Краткие выводы

Couchbase Server - это гибкая распределенная база данных документов JSON, ориентированная на память, которая строго согласована с локальным кластером. Мобильная версия Couchbase Lite может работать в автономном режиме и синхронизироваться с сервером при подключении.

Плюсы

  • Масштабируется как вертикально, так и горизонтально
  • Может масштабировать различные сервисы независимо от максимальной производительности
  • Мобильная база данных может синхронизироваться с сервером при подключении и работать независимо, если не подключена
  • Модель документа (JSON) является гибкой и не нуждается в схеме
  • N1QL похож на SQL и прост в освоении
  • Высокая степень согласованности в кластере

Минусы

  • Нет способа применить схему
  • Некоторые из лучших функций доступны только в Enterprise Edition
  • Не полная степень согласованности между кластерами

 

 

Вас заинтересует / Intresting for you:

Отношения в базе данных и  тех...
Отношения в базе данных и тех... 2425 просмотров Андрей Волков Wed, 14 Nov 2018, 09:14:11
Материализованные представлени...
Материализованные представлени... 1689 просмотров Андрей Волков Wed, 14 Nov 2018, 11:20:02
Графовые базы данных: хранение...
Графовые базы данных: хранение... 4085 просмотров Андрей Волков Wed, 14 Nov 2018, 10:04:37
Неструктурированные базы данны...
Неструктурированные базы данны... 3642 просмотров Андрей Волков Wed, 14 Nov 2018, 10:57:25
Войдите чтобы комментировать