Destacados de NoSQL: las mejores bases de datos de documentos

"La herramienta adecuada para el trabajo adecuado". Si tal sabiduría es cierta en cualquier lugar, ciertamente lo es con la elección de la base de datos que un desarrollador elige para una aplicación determinada. Las bases de datos de documentos, uno de la familia de productos de datos a los que se hace referencia colectivamente como "NoSQL", son para desarrolladores que desean centrarse en su aplicación en lugar de en la tecnología de base de datos .

Con una base de datos de documentos, los datos no se almacenan en tablas con distintos tipos de columnas. En cambio, se almacena en "documentos" de forma libre con cualquier número de campos y cualquier número de estructuras anidadas. Estos documentos se representan normalmente como JSON y se actualizan mediante API o enviando JSON a un punto final REST. La mayoría de los lenguajes de programación modernos admiten JSON y REST, por lo que trabajar con una base de datos de documentos se parece más a trabajar de forma nativa con esas estructuras de datos que a trabajar con una base de datos tradicional.

Este diseño sin esquema, como se le llama, tiene sus limitaciones. Un desarrollador debe trabajar más para asegurarse de que los datos insertados sean consistentes, porque dicha consistencia no siempre está garantizada por la propia base de datos. SQL, el lenguaje estándar y ampliamente comprendido para el trabajo de bases de datos, no es compatible con la mayoría de las bases de datos de documentos, por lo que aquellos con experiencia en bases de datos deben comenzar desde cero. Pero la conveniencia, velocidad, escalabilidad y versatilidad de una base de datos de documentos es difícil de superar cuando se escribe una aplicación que necesita una estructura de datos proteica y de forma libre.

Aquí presentamos siete de las bases de datos de documentos más conocidas y más utilizadas. Cuatro de los siete (CouchDB, Couchbase Server, MongoDB y RethinkDB) son proyectos de código abierto con pocas o ninguna barrera práctica para comenzar; Couchbase y MongoDB también están disponibles en ediciones empresariales compatibles con licencias comerciales. Los otros tres, Amazon DynamoDB, Google Firebase e IBM Cloudant, son servicios alojados de los principales proveedores de la nube, donde la integración cercana con otros servicios en esas nubes es un gran atractivo.

Consulte la tabla a continuación para comparar características; desplácese hacia la derecha en la tabla para ver todas las columnas, usando la barra de desplazamiento en la parte inferior. Siga leyendo para conocer breves discusiones sobre cada base de datos.

L W M S I A O

1. Las herramientas de terceros pueden proporcionar esta funcionalidad. 2 . Por mesa. 3 . Solo edición empresarial. 4 . Ver solo funciones. 5 . Las transacciones de documentos múltiples también están disponibles, pero no en clústeres fragmentados.

Clave: = Linux, = Windows, = MacOS, = Solaris, = iOS, = Android, = otro dispositivo móvil,
  Amazon DynamoDB Cosmos DB Couchbase CouchDB Google Firebase IBM Cloudant MarkLogic MongoDB RethinkDB
Plataformas Solo en la nube Solo en la nube LWM LWMIAO Solo en la nube Solo en la nube LWMS LWMS LWM
Sistemas de consulta API REST Protocolo de cable MongoDB Protocolo Memcached, API REST API REST API REST / JavaScript API REST API REST API basada en JSON, API REST parcial Lenguaje de consulta ReQL, API REST
Consultas SQL No 1 si Vía lenguaje N1QL No No No si No 1 No
Escritura fuerte si si si No si No Para esquemas XML si si
Uniones nativas No si si No No No si si si
Partición de fragmentación si si si si N / A si si si Si2
Agrupación N / A si si si N / A N / A si si si
Replicación si si si si N / A si si si Por mesa
Consistencia: Inmediata Por lectura si Por total No Clientes conectados No si Por escritura Por documento
Coherencia: eventual si si si si Clientes sin conexión si si si Toda la base de datos
Concurrencia si si si si si si si si si
Operaciones en memoria N / A N / A No No N / A No N / A Si: 3 No
Procedimientos almacenados No JavaScript JavaScript4 JavaScript4 Reglas JavaScript4 Módulo XQuery JavaScript No
Actas Por aplicación si Documentos individuales Documentos individuales si Documentos individuales Documentos individuales Documentos individuales5 Documentos individuales
Versión actual N / A N / A 5.0 (octubre de 2017) 2.1.1 (noviembre de 2017) N / A N / A 9.0 (mayo de 2016) 3.4.10 (octubre de 2017) 2.3.6 (julio de 2017)
Versión inicial 2012 2017 2011 2005 2012 2010 2005 2009 2009

Amazon DynamoDB

El almacén de documentos DynamoDB de Amazon comenzó a funcionar en 2012 como una extensión de SimpleDB de Amazon. Bajo el capó, funciona con una tienda de valor clave, Dynamo. Un co-desarrollador de DynamoDB más tarde se basaría en muchas de las mismas ideas para crear Apache Cassandra. 

Funciones de DynamoDB

Como la mayoría de las otras ofertas en la nube de Amazon, DynamoDB es un servicio administrado de pago por uso. Los desarrolladores establecen cuánta capacidad de almacenamiento proporcionar para mantener documentos no estructurados o pares clave-valor, y eligen un límite fijo de tarifa por hora para las solicitudes de lectura y escritura en la base de datos. No es necesario aprovisionar servidores ni configurar la replicación: Amazon maneja todo eso bajo las sábanas y recientemente agregó el autoescalado a la mezcla.

Naturalmente, DynamoDB ofrece a los desarrolladores integraciones útiles con otros servicios en la nube de Amazon. Los activadores, por ejemplo, se pueden configurar mediante funciones de AWS Lambda. Las herramientas de análisis y BI de Amazon también están cerca. La proximidad a estos servicios es conveniente, pero también significa que Amazon puede vender funcionalidades de muchas formas. El almacenamiento en caché y la aceleración a la Redis, por ejemplo, están disponibles a través del Acelerador de DynamoDB, un complemento de costo adicional.

DynamoDB local

No encontrará DynamoDB en una encarnación de código abierto. Está disponible exclusivamente como una oferta alojada en la nube de Amazon.

Dicho esto, a diferencia de muchas otras bases de datos nativas de la nube, DynamoDB también está disponible en una versión que se puede descargar y ejecutar localmente. Pero DynamoDB Local no está diseñado para uso en producción, sino más bien como una forma de preparar una aplicación en un entorno de prueba sin requerir conectividad o ejecutar una factura de Amazon.

Microsoft Azure Cosmos DB

Cosmos DB es un proyecto ambicioso, un sistema de base de datos que abarca múltiples modelos para almacenar y recuperar datos. Cosmos DB puede servir como una base de datos de documentos, una base de datos en columnas, una base de datos de gráficos o un almacén de valores clave, lo que permite al usuario elegir el paradigma que más le convenga y utilizar varias API para trabajar con esos paradigmas. 

Funciones de Cosmos DB

En lugar de inventar una API completamente nueva para un sistema de base de datos de documentos, Cosmos DB proporciona una API compatible con el popular MongoDB (que se analiza a continuación). Entre los beneficios está que el código existente que usa bibliotecas de interfaz MongoDB o el protocolo de cable binario de MongoDB puede funcionar tal cual. Equivale a que Cosmos DB pueda proporcionar MongoDB como servicio. Asimismo, Cosmos DB es compatible con la API de Cassandra, la popular base de datos de familias de columnas. 

Microsoft promociona varias ventajas para Cosmos DB que no son necesariamente exclusivas de su funcionalidad de base de datos de documentos, pero están destinadas a atraer a quienes crean aplicaciones de bases de datos de documentos. Una de esas ofertas son los niveles de consistencia ajustables. Si tiene algunas clases de transacciones de documentos que requieren una mayor coherencia en las regiones de Azure que otras, puede especificarlas manualmente por transacción.

Otras características son más específicas de las bases de datos de documentos. Por ejemplo, los usuarios de MongoDB deben configurar índices en colecciones de documentos para optimizar las búsquedas. Los usuarios de Cosmos DB que trabajan con las API de MongoDB no tienen que configurar la indexación de documentos, ya que todas las propiedades de un documento insertado se indexan automáticamente.

Uso de Cosmos DB en Microsoft Azure

No hay una versión alojada localmente de Cosmos DB. Solo está disponible como servicio en la nube de Microsoft Azure. Dicho esto, las API de desarrollo para Cosmos DB están disponibles para la mayoría de los lenguajes empresariales populares: Java, Node.js, .NET y Python.

Servidor Couchbase

Couchbase no es tanto hermano de CouchDB como sucesor. Couchbase se creó a partir del trabajo realizado en CouchDB y Membase, pero no está relacionado con ninguno de esos proyectos. Es una base de datos de documentos y un almacén de valor clave distribuido en uno, con funciones avanzadas como la conmutación por error automatizada y la replicación entre centros de datos, pensada para casos de uso empresarial.

Características de Couchbase

Una característica que distingue a Couchbase, no solo de otra competencia NoSQL sino de su predecesor CouchDB, es su lenguaje de consulta similar a SQL llamado N1QL (pronunciado "níquel"). N1QL no ofrece la gama completa de comandos que esperaría de una implementación ANSI SQL, pero proporciona suficientes funciones útiles, como operaciones JOIN, para que alguien con experiencia en SQL obtenga resultados viables.

El sistema de consultas de Couchbase no es solo para desarrolladores, sino también para administradores de bases de datos y analistas de negocios que normalmente tratan con bases de datos convencionales. Las características como la palabra clave EXPLAIN parecen haber sido incluidas específicamente para atraer a esa multitud.

Como una combinación de base de datos de documentos y almacén de valores clave, Couchbase almacena documentos utilizando sus identificadores únicos como clave. A los documentos también se les pueden asignar valores de tiempo de vida para que funcionen como una caché de valores-clave. Dicho esto, un verdadero sistema de almacenamiento en caché de valores clave como Redis será mucho más rápido para el almacenamiento básico de valores clave, pero Couchbase es más flexible y Redis y Couchbase se pueden combinar de manera efectiva para acelerar las cosas. En esa nota, Couchbase tiene soporte nativo para el protocolo Memcached, por lo que las aplicaciones existentes que usan Memcached pueden conectarse a Couchbase como sustituto.

Comunidad de Couchbase frente a empresa

Couchbase Server viene en una edición empresarial completa de pago, una edición comunitaria de uso gratuito y una edición de código abierto, que es la base de las demás. Las descargas binarias para la edición empresarial y comunitaria están disponibles en el sitio de Couchbase, y el código fuente está disponible en el sitio para desarrolladores de Couchbase. (No hay un repositorio de GitHub para el proyecto de código abierto de Couchbase, ya que es una agregación de varios proyectos).

La edición comunitaria se puede implementar en producción, pero carece de las funciones más avanzadas de la edición empresarial y del soporte, por lo que los no compradores deben tener cuidado. Algunas características de Couchbase, como su funcionalidad de escalado horizontal, se han introducido en el proyecto CouchDB, pero esa es más la excepción que la regla.

Couchbase Lite

Otra edición de Couchbase digna de mención para los desarrolladores de aplicaciones es Couchbase Lite, una versión integrable de Couchbase que se puede sincronizar con instancias de la edición completa. Couchbase Lite es el componente clave de Couchbase Mobile, una pila de aplicaciones para aplicaciones móviles que necesitan un almacén de datos que se sincronice automáticamente con un back-end. Couchbase Mobile está disponible para iOS, Android, Java. .Net, MacOS y tvOS.

CouchDB

El proyecto CouchDB se inició en 2005 por un antiguo desarrollador de IBM y se trasladó a Apache Software Foundation en 2008. A veces se asume que CouchDB es la base de Couchbase, pero CouchDB y Couchbase son proyectos paralelos con objetivos diferentes.

CouchDB frente a Couchbase

Mientras que Couchbase es tanto una base de datos de documentos como un almacén de valores clave, CouchDB es estrictamente una base de datos de documentos. Y aunque Couchbase se ha centrado durante mucho tiempo en funciones empresariales como la tolerancia a fallos y un lenguaje de consulta similar a SQL, estas sutilezas apenas están comenzando a llegar a CouchDB.

Funciones de CouchDB

CouchDB enfatiza la simplicidad de implementación y la facilidad de uso. Recuperar datos de la base de datos es tan simple como enviar consultas con formato JSON a un punto final REST HTTPS, con los resultados devueltos en JSON. La mayoría de los lenguajes de programación modernos pueden hacer estas cosas y también realizar el mapeo y la reducción necesarios para crear las vistas detrás de las consultas y los informes de CouchDB. No es necesario un controlador ODBC o un conector de datos.

Una de las salsas especiales de CouchDB es su tecnología de reconciliación de datos. Los cambios realizados en un par de CouchDB se reconcilian automáticamente con otros, de manera similar a un sistema de control de versiones. Cualquier conflicto entre las versiones del documento se conserva como si se tratara de revisiones anteriores de ese documento.

Este modelo eventualmente consistente es útil para bases de datos que no siempre o consistentemente conectadas (como para aplicaciones móviles conectadas de forma intermitente), o en casos donde no necesita la última y mejor versión de datos en un nodo en particular. Pero la consistencia eventual es también una de las mayores advertencias de CouchDB. Si usted no necesita la consistencia inmediata, CouchDB no es el lugar para encontrarlo.

La escalabilidad ha sido durante mucho tiempo un punto débil para CouchDB, pero recientemente se ha abordado. La versión 2.0 incorporó una nueva tecnología de agrupación, cortesía de bits de código abierto de Cloudant / IBM y se fusionó con el proyecto. Finalmente, para aquellos que estén familiarizados con MongoDB y quieran utilizar una sintaxis de consulta declarativa similar, el proyecto Mango, también de Cloudant / IBM, lo proporciona como un complemento externo.

Descarga de CouchDB

Los binarios de CouchDB para todas las plataformas principales y el código fuente se pueden descargar del sitio oficial de CouchDB. La fuente del proyecto también está disponible en GitHub.

Base de datos en tiempo real de Google Firebase

Puede pensar en Google Firebase como la respuesta de Google a DynamoDB, una forma de proporcionar almacenamiento de datos de sincronización rápida entre un back-end en la nube y aplicaciones locales en múltiples plataformas.

Firebase Realtime Database es solo un componente de la pila de Firebase, destinado a crear aplicaciones que tengan un gran impacto y conocimiento de la audiencia. Toda la pila incluye funciones como autenticación, monitoreo del rendimiento, análisis de usuarios y muchas otras, pero aquí nos enfocamos en Firebase.

Funciones de Google Firebase

Google adquirió Firebase en 2014. En los años posteriores, ha conectado Firebase para aprovechar muchas funciones de Google Cloud. Google Cloud Functions para Firebase, por ejemplo, le permite activar funciones de JavaScript en la nube en respuesta a eventos de Firebase. Google Analytics para Firebase le permite extraer datos de aplicaciones móviles en BigQuery para un análisis más profundo.

Dado que los juegos son una de las aplicaciones de destino de Firebase, los SDK proporcionados para Firebase incluyen el marco de desarrollo de juegos multiplataforma de Unity. Los desarrolladores que trabajan en proyectos más convencionales centrados en la empresa o orientados al consumidor tienen muchas otras opciones: iOS y Android nativos, C ++, web / JavaScript genérico y cualquier otro lenguaje que admita REST (Java, Python, lo que sea).

Firebase está diseñado para funcionar en escenarios donde la conectividad no está garantizada. Al igual que CouchDB, almacena en caché los cambios localmente cuando está fuera de línea y se sincroniza automáticamente con el back-end cuando regresa la conectividad. Tenga en cuenta que Firebase no está diseñado para usarse como una solución independiente y completamente fuera de línea; en Android, por ejemplo, las bases de datos locales están limitadas a 10 MB de almacenamiento.

Firebase en Google Cloud y GitHub

Firebase no está disponible como producto independiente, pero solo está disponible como parte de las ofertas de productos en la nube de Google. El repositorio de Firebase GitHub tiene código fuente para los SDK y para varias herramientas específicas de la plataforma.

IBM Cloudant

Cloudant es esencialmente la edición alojada de IBM de CouchDB. Originalmente, Cloudant era una empresa independiente que ofrecía una edición de CouchDB llamada "BigCouch" que estaba alojada en la nube SoftLayer de IBM. En 2014, IBM adquirió Cloudant directamente como parte del impulso general de IBM hacia el análisis y el big data. 

Cloudant contra CouchDB

Cloudant está destinado a ser más que una versión alojada de CouchDB. Cloudant proporciona funciones que no están disponibles en CouchDB, como la búsqueda de texto completo integrada de forma nativa. La búsqueda de texto completo en CouchDB generalmente requiere integración con proyectos externos. Los datos se pueden replicar en ambas direcciones entre Cloudant y una instancia de CouchDB, por lo que es relativamente fácil moverse entre cualquiera de ellos según sea necesario.

Algunas de las mejoras de Cloudant en CouchDB han vuelto al proyecto subyacente de CouchDB, incluida la funcionalidad de escalado horizontal de CouchDB 2.0 y la interfaz de lenguaje de consulta de Mango. Pero no tome eso como prueba de que las funciones de Cloudant se filtrarán automáticamente a CouchDB.

Cloudant en IBM Cloud

Cloudant es principalmente una oferta de nube en IBM Cloud, donde se puede utilizar junto con otros productos de datos de IBM Cloud como dashDB, DataWorks y Watson Analytics.

Cloudant Local

Una edición detrás del firewall de Cloudant, llamada Cloudant Local, ofrece todas las mismas funciones que la oferta alojada en la nube. Cloudant Local está disponible en las versiones Ubuntu y Red Hat de x86 Linux, así como en el propio System z de IBM que ejecuta Red Hat o Suse. Los desarrolladores pueden descargar una versión gratuita de prueba y desarrollo en una imagen de Docker.