Revue Couchbase: une base de données NoSQL intelligente

Chaque entreprise de taille moyenne à grande a besoin d'une base de données. Les grandes entreprises multinationales ont souvent besoin de bases de données distribuées à l'échelle mondiale, et lorsqu'elles utilisent leur base de données pour des applications financières ou d'inventaire, elles ont besoin d'une forte cohérence. Peu de bases de données peuvent répondre aux deux besoins.

Couchbase Server est une base de données de documents JSON flexible, distribuée et basée sur la mémoire, qui est fortement cohérente au sein d'un cluster local. Couchbase Server prend également en charge la réplication entre les centres de données avec une cohérence éventuelle entre les clusters. 

Couchbase Lite est une base de données mobile intégrée qui fonctionne hors ligne et se synchronise avec Couchbase Sync Gateway lorsqu'elle est en ligne. Sync Gateway se synchronise avec Couchbase Server ainsi qu'avec plusieurs instances Couchbase Lite.

Couchbase Server peut être déployé sur site, dans le cloud, sur Kubernetes ou dans des configurations hybrides. Il est disponible en version open source et entreprise.

Le langage de requête de Couchbase Server, N1QL, est un sur-ensemble SQL conçu pour les bases de données de documents JSON, avec des extensions pour l'analyse. Couchbase prend également en charge l'accès aux données clé-valeur et la recherche en texte intégral.

Couchbase, la société à l'origine de la base de données, est issue de la fusion de Membase (fabricant d'une base de données clé-valeur en cluster mise en cache en mémoire) et CouchOne (développeurs de la base de données de documents Apache CouchDB) en 2011. La nouvelle société a commencé avec la clé- couche de valeur, a ajouté la couche de document JSON en 2012 et a ajouté une base de données mobile en 2014, des requêtes de type SQL en 2015, une recherche en texte intégral en 2017 et des analyses en 2018.

Alternatives et concurrents de Couchbase

Les alternatives à Couchbase incluent MongoDB, une autre base de données de documents flexible; MongoDB combiné avec Redis pour la mise en cache; Oracle Database, une base de données relationnelle haut de gamme; et SQL Server, l'offre de base de données relationnelle de Microsoft. Les systèmes de bases de données relationnelles ont été conçus pour être utilisés sur de grands serveurs uniques et il est difficile de les faire évoluer. MongoDB a été conçu pour effectuer la réplication maître-esclave, qui évolue un peu, mais nécessite un partitionnement pour bien évoluer. Redis aide à accélérer MongoDB, mais introduit une autre partie mobile, ce qui peut compliquer la gestion des systèmes combinés.

D'autres alternatives récentes à Couchbase incluent CockroachDB, Azure Cosmos DB, Amazon Aurora, Aerospike, Amazon DocumentDB et Amazon DynamoDB. J'ai discuté des options relationnelles et NoSQL dans les critiques précédentes.

Architecture du serveur Couchbase

Couchbase Server remplit plusieurs rôles: service de données, service d'index, service de requête, sécurité, réplication, recherche, événement, analyse et gestion. Ces services peuvent chacun être exécutés sur un ou plusieurs nœuds.

Couchbase Server a été conçu autour de trois principes de base: la mémoire et l'architecture centrée sur le réseau, l'isolation de la charge de travail et une approche asynchrone de tout.

Les écritures sont validées dans la mémoire, puis conservées sur le disque et indexées de manière asynchrone sans bloquer les lectures ou les écritures. Les données et les index les plus utilisés sont conservés en mémoire de manière transparente pour des lectures rapides. Cette utilisation intensive de la mémoire est bonne pour la latence et le débit, bien qu'elle augmente les besoins en RAM de Couchbase.

Couchbase Server peut faire évoluer chacun de ses services indépendamment, pour les rendre plus efficaces. Le service de requête peut bénéficier de plus de ressources de processeur, le service d'index peut utiliser des disques SSD et le service de données peut utiliser plus de RAM. Couchbase appelle cette mise à l'échelle multidimensionnelle (MDS), et c'est l'une des caractéristiques distinctives de Couchbase Server.

Les opérations asynchrones aident Couchbase Server à éviter de bloquer les écritures, les lectures ou les requêtes. Le développeur peut équilibrer la durabilité et la cohérence avec la latence si nécessaire.

Le modèle de données JSON de Couchbase prend en charge les types de données de base et complexes: nombres, chaînes, objets imbriqués et tableaux. Vous pouvez créer des documents normalisés ou dénormalisés. Couchbase Server ne nécessite ni ne prend en charge les schémas. En revanche, MongoDB ne nécessite pas de schémas, mais peut les prendre en charge et les appliquer si le développeur le souhaite.

Comme je l'expliquerai plus en détail plus tard, vous pouvez accéder aux documents Couchbase Server via quatre mécanismes: clé-valeur, requêtes basées sur SQL, recherche en texte intégral et événements JavaScript. Si vos documents JSON ont des sous-documents ou des tableaux, vous pouvez y accéder directement à l'aide d'expressions de chemin sans avoir à transférer et analyser l'ensemble du document. Le modèle d'événement peut déclencher des changements de données ( OnUpdate) ou des minuteries. De plus, vous pouvez accéder aux documents Couchbase Server via la synchronisation avec Couchbase Mobile.  

Couchbase Server est organisé en buckets, vBuckets, nœuds et clusters. Les buckets contiennent des documents JSON. Les vBuckets sont essentiellement des fragments qui sont automatiquement répartis sur les nœuds. Les nœuds sont des machines physiques ou virtuelles qui hébergent des instances uniques de Couchbase Server. Les clusters sont des groupes de nœuds. La réplication synchrone se produit entre les nœuds d'un cluster.

Options de déploiement du serveur Couchbase

Vous pouvez installer Couchbase Server sur site, dans le cloud et sur Kubernetes. Couchbase Server Enterprise Edition est gratuit pour le développement et les tests et disponible sur abonnement pour la production. L'édition open source Couchbase Server Community Edition est gratuite à toutes fins. Hormis certaines fonctionnalités omises, Couchbase Server Community Edition est compatible API avec Couchbase Server Enterprise Edition.

J'ai créé une session de test de conduite dans le cloud sur Google Cloud Platform, qui (après un délai de déploiement de cinq minutes) m'a donné un cluster de serveurs Couchbase à trois nœuds et un nœud de passerelle de synchronisation, tous valables pendant trois heures. J'avais besoin d'environ une heure pour parcourir les quatre didacticiels Couchbase, ce qui m'a donné une idée de l'interrogation du serveur.

Opérateur autonome Couchbase

L'opérateur autonome Couchbase, uniquement pris en charge dans Enterprise Edition, fournit une intégration native de Couchbase Server avec Kubernetes open source et Red Hat OpenShift. L'opérateur étend l'API Kubernetes en créant une définition de ressource personnalisée et en s'enregistrant en tant que contrôleur de serveur Couchbase personnalisé pour gérer les clusters de serveurs Couchbase. Cela réduit la quantité d'efforts de devops nécessaires pour exécuter des clusters Couchbase sur Kubernetes et vous permet d'automatiser la gestion des tâches courantes du serveur Couchbase, telles que la configuration, la création, la mise à l'échelle et la récupération des clusters Couchbase Server. L'opérateur fonctionne également avec Azure Kubernetes Service, Amazon Elastic Kubernetes Service et Google Kubernetes Engine.

Réplication entre centres de données (XDCR)

Comme je l'ai mentionné précédemment, Couchbase Server effectue une réplication synchrone et a une forte cohérence au sein d'un cluster. Il effectue une réplication asynchrone, active-active sur les clusters, les centres de données et les zones de disponibilité, pour éviter des latences d'écriture élevées. XDCR permet à Couchbase d'être une base de données distribuée à l'échelle mondiale, au prix d'une éventuelle cohérence (plutôt que forte) entre les clusters.

Le Basic XDCR est pris en charge dans toutes les éditions de Couchbase Server. Le filtrage XDCR, la limitation et la résolution des conflits basée sur l'horodatage sont toutes des fonctionnalités Enterprise Edition.

Outils de requête Couchbase

Vous pouvez interroger Couchbase Server à l'aide d'une clé pour récupérer la valeur associée, qui peut être un document JSON ou un Blob. Vous pouvez également l'interroger avec le langage N1QL de type SQL ou avec une recherche en texte intégral. Les requêtes N1QL et en texte intégral sont plus rapides si le compartiment possède des index pour prendre en charge la requête.

N1QL

N1QL, prononcé «nickel», ressemble beaucoup au SQL standard, avec des extensions pour JSON. Je l'ai trouvé beaucoup plus facile à saisir que le pipeline d'agrégation de MongoDB, étant donné que j'utilise SQL depuis des décennies.

Il existe en fait deux variantes similaires de N1QL: une pour le service Couchbase Server Query et une pour le service Analytics, qui est une fonctionnalité Enterprise Edition. N1QL for Analytics est basé sur SQL ++.

Certaines des extensions N1QL sont USE KEYS, NEST, UNNESTet MISSING. USE KEYSet USE HASHsont des conseils de requête pour JOINs. NESTet UNNESTemballer et déballer les baies. MISSINGest une alternative spécifique à JSON à NULL; IS NOT MISSINGsignifie qu'une valeur spécifique est présente ou NULLdans un document. Le mot-clé des valeurs qui sont NOT MISSINGet NOT NULLsont KNOWN. Les requêtes N1QL peuvent utiliser des chemins, qui s'appliquent également aux recherches en texte intégral.

Recherche en texte intégral

Couchbase prend en charge les moteurs de recherche externes en texte intégral, tels que Solr, mais il dispose également de son propre moteur de recherche en texte intégral basé sur Go, Bleve. Bleve est inclus dans Couchbase Mobile ainsi que Couchbase Server, et il prend en charge la plupart des syntaxes de recherche attendues.

SDK Couchbase

Tous les principaux services de Couchbase sont exposés pour la programmation via le SDK. Les SDK sont disponibles pour C / C ++, .Net (C #, F # et Visual Basic .Net), Go, Java, Node.js, PHP, Python et Scala.

En plus des SDK, Couchbase offre une intégration étroite avec plusieurs frameworks: Spring Data, .NET LINQ et l'ODM Ottoman Node.js de Couchbase. Par exemple, l'exemple de requête suivant utilise Linq2Couchbase:

{

     Serveurs = nouvelle liste {new Uri ("// localhost: 8091 /")}

});

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

var query = (à partir d'un dans le contexte.

               où a.Country == "Royaume-Uni"

               Sélectionner un).

               Prenez (10).

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

ClusterHelper.Close ();

Couchbase Mobile

Couchbase Mobile comprend deux parties: Couchbase Lite, qui fonctionne sur un appareil mobile, et Couchbase Sync Gateway, qui s'exécute sur un nœud de serveur. Couchbase Lite fonctionne sur iOS, Android, .Net et Xamarin et prend en charge les langages Swift, Objective-C, Java, Kotlin et C ++.

Par exemple, le code Java suivant définit une requête à exécuter sur Android:

Base de données de base de données = DatabaseManager.getDatabase ();

Requête searchQuery = QueryBuilder

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

  .from (DataSource.database (base de données))

  .où(

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

      .and (Expression.property ("nom_aéroport"). like (Expression.string (préfixe + "%")))

);

Benchmarks de Couchbase

Bien qu'il n'ait pas évalué Couchbase Server, un tiers (Altoros) l'a fait en utilisant les tests YCSB JSON et de valeurs-clés et le test TPCx-IoT. Le tableau ci-dessous concerne le benchmark de document JSON. Comme vous pouvez le voir, Couchbase Server a surpassé MongoDB et DataStax. Vous pouvez réexécuter ces tests vous-même, car Altoros a fourni tous les scripts requis.

Altoros

Dans l'ensemble, Couchbase Server se combine bien comme une base de données de documents NoSQL JSON avec un langage de requête de type SQL et un moteur de recherche en texte intégral, et Couchbase Mobile étend la proposition de valeur aux appareils mobiles. La pertinence de Couchbase pour vous dépend de votre application et de vos exigences.

Si vous avez besoin de la structure de schéma fiable d'une base de données relationnelle, ou de l'orientation de connexion d'une base de données de graphes, Couchbase ne fera pas ce que vous voulez. Mais si vous avez besoin d'une base de données de documents globalement évolutive, Couchbase est un bon choix.

-

Coût: Couchbase Server Community Edition: gratuit. Couchbase Server Enterprise Edition: les abonnements annuels sont facturés par nœud et disponibles à différents niveaux de prix en fonction des cœurs et de la RAM nécessaires à un nœud. Les nœuds de développement et de test sont gratuits. Les déploiements cloud Enterprise Edition sont disponibles à l'heure, avec une tarification logicielle typique de 0,662 USD / nœud / heure sur AWS pour Couchbase Server et de 1,641 USD / nœud / heure pour la passerelle de synchronisation mobile, avec un modèle standard utilisant quatre nœuds de serveur et deux nœuds de synchronisation au départ , avec mise à l'échelle automatique. Les tarifs sont à peu près comparables sur Microsoft Azure et Google Cloud Platform. Vous pouvez également apporter votre propre licence et ne payer que les ressources cloud.

Plate-forme: Couchbase Server: Linux, Windows Server 2012 R2 et versions ultérieures; Kubernetes, OpenShift; AWS, Azure, GCP. Développement et test de Couchbase Server: MacOS 10.11 et versions ultérieures, Windows 10 Anniversary Update et versions ultérieures; Docker. Couchbase Lite: iOS, Android, .Net. Couchbase Sync Gateway: Linux, Windows Server 2010 et versions ultérieures, MacOS 10.12.6 et versions ultérieures; AWS, Docker, OpenShift.