# Servidor de CouchBase

Servidor de Couchbase, originalmente conocido como Membase, es un proyecto de código abierto, un paquete de software distribuido (del inglés arquitecturas shared-nothing) multi-modelo orientado a base de datos documental y que está optimizado para aplicaciones interactivas. Estas aplicaciones pueden servir a muchos usuarios al mismo tiempo mediante la creación, almacenamiento, recuperación, agregación, manipulación y presentación de datos. Para soportar este tipo de necesidades, Couchbase Server está diseñado para proporcionar acceso a documentos de valor-clave (del inglés key - value documents) o documentos JSON de fácil escala, con baja latencia y alto rendimiento sostenido. Está diseñado para ser agrupado a partir de una sola máquina a gran escala que abarca muchas máquinas (clúster).
El Servidor de Couchbase proporciona compatibilidad con el protocolo de cliente memcached, agregando persistencia de disco, replicación de datos, reconfiguración del clúster en vivo, reequilibrio y multiusuario con partición de datos.

## Historia del Producto

Membase fue desarrollado por varios dirigentes del proyecto memcached, que habían fundado la compañía, NorthScale, para desarrollar un almacén de datos claves-valor con la simplicidad, velocidad y escalabilidad de memcached, pero que también proporcionara el almacenamiento, la persistencia y las capacidades de consulta de una base de datos. El código fuente membase original fue aportado por NorthScale, y por los co-patrocinadores de Zynga y Naver (entonces conocido como NHN) a un nuevo proyecto sobre membase.org en junio de 2010.
El 8 de febrero de 2011, los fundadores del proyecto Membase y Membase, Inc. anunciaron una fusión con CouchOne (una empresa con muchas de las principales figuras detrás de CouchDB) con una mezcla de proyecto asociado. La empresa fusionada fue llamada Couchbase, Inc. En enero de 2012, Couchbase lanzó Couchbase Server 1.8. En septiembre de 2012, Orbitz dijo que trasladó algunos de sus sistemas a utilizar Couchbase. En diciembre de 2012, Couchbase Server 2.0 (anunciado en julio de 2011 y lanzado el 12 de diciembre), incluyó un nuevo almacén de documentos JSON, indexación y consulta, MapReduce incremental y replicación a través de los centros de datoss.

## Arquitectura

Cada nodo de Couchbase consta de un servicio de datos, servicio de índice, servicio de consulta y componente de administrador de clúster. A partir de la versión 4.0, los tres servicios se pueden distribuir para ejecutarse en nodos separados del clúster si es necesario. En términos del teorema CAP de Eric Brewer, Couchbase es normalmente un sistema de tipo CP lo que significa que proporciona consistencia de datos y tolerancia de partición, o puede ser configurado como un sistema de punto de acceso (AP) con varios clústeres.

### Administrador de clústeres

El administrador del clúster supervisa la configuración y el comportamiento de todos los servidores de un clúster de Couchbase. Configura y supervisa el comportamiento entre nodos, así como la gestión de flujos de replicación y operaciones de reequilibrio. También proporciona funciones de agregación y de consenso métricas en el clúster y una interfaz de gestión de clústeres REST. El gestor de clúster utiliza el lenguaje de programación Erlang y Open Telecom Platform.

#### Replicación y conmutación por error

La replicación (informática) dentro de los nodos de un clúster se puede controlar con varios parámetros. En diciembre de 2012, se añadió la capacidad de replicación entre diferentes centros de datos.

### Gestor de datos

El gestor de datos almacena y reintenta documentos en respuesta a las operaciones de datos de las aplicaciones. De forma asíncrona escribe datos en el disco después de reconocer al cliente. En la versión 1.7 y posteriores, las aplicaciones pueden asegurar opcionalmente que los datos se escriban en más de un servidor o en disco antes de reconocer una escritura al cliente. Los parámetros definen las edades de los elementos que afectan cuando los datos se mantienen y cómo se gestiona la memoria máxima y la migración desde la memoria principal al disco. Soporta conjuntos de trabajo mayores que una cuota de memoria por "nodo" o "cubo". Los sistemas externos pueden suscribirse a los flujos de datos filtrados, apoyando, por ejemplo, indexación de búsqueda con texto completo, análisis de datos o archivo.

#### Formato de datos

Un documento es la unidad más básica de manipulación de datos en Couchbase Server. Los documentos se almacenan en formato JSON, sin esquemas predefinidos.

#### Memoria caché de objetos gestionados

Couchbase Server incluye una caché integrada multi-hilo de objetos, que implementa las API compatibles con memcached tales como get, set, delete, append, prepend, etc.

#### Motor de almacenamiento

Couchbase Server tiene un diseño de almacenamiento tail-append que es inmune a la corrupción de datos, agotamiento del espacio de memoria o caída eléctrica repentina. Los datos se escriben en el archivo de datos de forma append-only, lo que permite a Couchbase hacer principalmente escrituras secuenciales para actualizar y proporcionar patrones de acceso optimizados de E/S en el disco.

### Rendimiento

Una referencia de rendimiento realizado por Altoros en 2012, compara Couchbase Server con otras tecnologías. Cisco Systems publicó un punto de referencia que mide la latencia y el rendimiento de Couchbase Server con una carga de trabajo mixta en 2012.

## Licenciamiento y soporte

Couchbase Server es una versión empaquetada del software de código abierto de CouchBase y está disponible en una edición de la comunidad sin recientes correcciones de errores con licencia Apache 2.0. y una edición para uso comercial. Couchbase Server está disponible para los sistemas operativos Ubuntu, Debian, Red Hat, SUSE, Oracle Linux, Microsoft Windows y Mac OS X.
Couchbase ha apoyado herramientas de desarrollo de software de los lenguajes de programación .Net, PHP, Ruby, Python, C, Node.js, Java, y Go.

## N1QL

El lenguaje de consulta N1QL (del inglés non-first normal form query language), se utiliza para la búsqueda de datos en el servidor. Se anunció en marzo de 2015, como "SQL para documentos".
El modelo de datos N1QL es N1NF (del inglés non-first normal form) con soporte para atributos anidados y normalización orientada a dominio. El modelo de datos N1QL también es un superconjunto apropiado y una generalización del modelo relacional.

## Bibliografía

* Brown, MC (22 de junio de 2012). Getting Started with Couchbase Server (1st edition). O'Reilly Media. p. 88. ISBN 978-1449331061.
* Ostrovsky, David; Haji, Mohammed; Rodenski, Yaniv (26 de noviembre de 2015), Pro Couchbase Server 2nd ed. (2nd edición), Apress, p. 349, ISBN 978-1484211861 .
* Potsangbam, Henry (23 de noviembre de 2015), Learning Couchbase (1st edición), Packt, p. 202, ISBN 978-1785288593 .
* Vohra, Deepak (3 de agosto de 2015), Pro Couchbase Development: A NoSQL Platform for the Enterprise (1st edición), Apress, p. 331, ISBN 978-1484214350 .