# Couchbase Server

Couchbase Server, initialement connu sous le nom Membase, est une base de données orientée document, NoSQL, open-source, et multi-modèle, optimisée pour les applications interactives. Ces applications peuvent servir de nombreux utilisateurs simultanés en créant, stockant, récupérant, agrégeant, manipulant et présentant des données. Pour prendre en charge ces types de besoins d'application, Couchbase Server fournit un accès facile aux valeurs-clés ou aux documents JSON avec une faible latence et un débit soutenu élevé. Elle est conçue pour regrouper des déploiements à très grande échelle en une seule ou plusieurs machines.
Couchbase Server a fourni la compatibilité du protocole client avec Memcached, mais a ajouté la persistance du disque, la réplication des données, la reconfiguration de cluster en direct, le rééquilibrage et la multi-location avec le partitionnement des données .

## Histoire du produit

Membase a été développé par plusieurs chefs de file du projet Memcached, qui avaient fondé une société, NorthScale, pour développer une plateforme de stockage à valeur-clé avec la simplicité, la rapidité et l'évolutivité de Memcached, mais aussi les capacités de stockage, de persistance et d'interrogation d'une base de données. Le code source original de Membase a été fourni par NorthScale et les co-sponsors du projet Zynga et Naver Corporation (alors connue sous le nom de NHN) pour un nouveau projet sur membase.org en juin 2010.
Le 8 février 2011, les fondateurs du projet Membase et Membase, Inc. ont annoncé une fusion avec CouchOne (une société avec plusieurs des principaux acteurs derrière CouchDB ). La société fusionnée a été nommée Couchbase, Inc. En janvier 2012, Couchbase a commercialisé le Couchbase Server 1.8. En septembre 2012, Orbitz a déclaré avoir changé certains de ses systèmes pour utiliser Couchbase. En décembre 2012, Couchbase Server 2.0 (annoncé en juillet 2011) a été publié et comprenait un nouveau magasin de documents JSON, l'indexation & interrogation, le MapReduce incrémentiel, et la réplication dans les centres de données$^,$.

## Architecture

Chaque nœud Couchbase se compose d'un service de données, d'un service d'index, d'un service de requête et d'un composant de gestionnaire de cluster. À partir de la version 4.0, les trois services peuvent être distribués pour s'exécuter sur des nœuds distincts du cluster si nécessaire. Dans le langage du théorème CAP d'Eric Brewer, Couchbase est normalement un système de type CP, ce qui signifie qu'il fournit une cohérence et une tolérance de partition, et qu'il peut être configuré comme un système AP avec plusieurs clusters.

### Gestionnaire de cluster

Le gestionnaire de cluster supervise la configuration et le comportement de tous les serveurs d'un cluster Couchbase. Il configure et supervise le comportement inter-nœuds comme la gestion des flux de réplication et les opérations de rééquilibrage. Il fournit également des fonctions d'agrégation métriques et de consensus pour le cluster, ainsi qu'une interface de gestion de cluster RESTful. Le gestionnaire de cluster utilise le langage de programmation Erlang et la plate-forme Open Telecom.

#### Réplication et basculement

La réplication des données dans les nœuds d'un cluster peut être contrôlée avec plusieurs paramètres. En décembre 2012, la prise en charge de la réplication entre différents centres de données a été ajoutée.

### Manager de données

Le gestionnaire de données stocke et récupère les documents en réponse aux opérations sur les données des applications. Il écrit les données de manière asynchrone sur le disque après avoir accusé réception du client. Dans les versions 1.7 et ultérieures, les applications peuvent éventuellement s'assurer que les données sont écrites sur plusieurs serveurs ou sur disque avant d'autoriser une écriture sur le client. Les paramètres définissent les âges des éléments qui affectent le moment où les données sont persistantes et la façon dont la mémoire maximale et la migration de la mémoire principale vers le disque sont gérées. Il prend en charge les ensembles de travail supérieurs à un quota de mémoire par «nœud» ou «compartiment». Les systèmes externes peuvent s'abonner à des flux de données filtrés, prenant en charge, par exemple, l'indexation de la recherche en texte intégral, l'analyse des données, ou l'archivage.

#### Format des données

Le document est l'unité la plus élémentaire de manipulation de données dans Couchbase Server. Les documents sont stockés au format de document JSON sans schéma prédéfini. Les documents non-JSON peuvent également être stockés dans Couchbase Server (binaire, valeurs sérialisées, XML, etc.).

#### Cache géré par objets

Couchbase Server comprend un cache géré par objets multi-thread intégré qui implémente des API compatibles Memcached telles que : get, set, delete, append, prefend, etc.

#### Moteur de stockage

Couchbase Server a une conception de stockage en appendice, immunisée contre la corruption des données, les OOM Killers et la perte soudaine de puissance. Les données sont écrites dans le fichier de données de manière à uniquement s'ajouter, ce qui permet à Couchbase d'effectuer principalement des écritures séquentielles pour la mise à jour, et de fournir des modèles d'accès optimisés pour les E/S de disque.

### Performance

Un benchmark de performances réalisé par Altoros en 2012, compare Couchbase Server à d'autres technologies. Cisco Systems a publié un benchmark mesurant la latence et le débit de Couchbase Server avec une charge de travail mixte en 2012.

## Licence et assistance

Couchbase Server est une version packagée de la technologie logicielle open source de Couchbase et est disponible dans une édition communautaire sans correctifs de bugs récents avec une licence Apache 2.0 et une édition pour un usage commercial. Les versions de Couchbase Server sont disponibles pour les systèmes d'exploitation Ubuntu, Debian, Red Hat, SUSE, Oracle Linux, Microsoft Windows et macOS.
Couchbase a pris en charge les kits des développeurs de logiciels pour les langages de programmation .NET, PHP, Ruby, Python, C, Node.js, Java, Go et Scala .

## N1QL

Un langage de requête appelé langage de requête de forme normale non-primaire, N1QL (prononcé nickel), est utilisé pour manipuler les données JSON dans Couchbase, tout comme SQL manipule les données dans SGBDR. Il a des instructions SELECT, INSERT, UPDATE, DELETE, MERGE pour fonctionner sur les données JSON. Il a été annoncé en mars 2015 sous le nom de « SQL for documents ».
Le modèle de données N1QL est une autre forme normale (N1NF) avec prise en charge des attributs imbriqués et de la normalisation orientée domaine. Le modèle de données N1QL est également un sur-ensemble et une généralisation appropriés du modèle relationnel .

### Exemple
#### Comme requête

    SELECT * FROM `bucket` WHERE email LIKE "%@example.org";

#### Requête de tableau

    SELECT * FROM `bucket` WHERE ANY x IN friends SATISFIES x.name = "cate" END;

## Couchbase Mobile

Couchbase Mobile est une suite de produits pour fournir des bases de données NoSQL et de la réplication de données pour les appareils mobiles et embarqués.
Couchbase Lite (à l'origine TouchDB) fournit des bibliothèques natives pour les bases de données NoSQL hors ligne avec des mécanismes de réplication peer-to-peer ou client-serveur intégrés. Sync Gateway gère l'accès sécurisé et la synchronisation des données entre Couchbase Lite et Couchbase Server.