Las mejores bases de datos NoSQL distribuidas

0
75

El sentido moderno de NoSQL, que data del 2009, se refiere a bases de datos que no están construidas en tablas relacionales, a diferencia de las bases de datos SQL. A menudo, las bases de datos NoSQL cuentan con una mejor flexibilidad de diseño, escalabilidad horizontal y mayor disponibilidad que las bases de datos SQL tradicionales, a veces a expensas de una consistencia más débil.

Las bases de datos NoSQL pueden tomar varias formas. Pueden ser servicios en la nube o instalarse on premises. Pueden admitir uno o más modelos de datos: valor-clave, documento, columna, gráfico y, a veces, incluso relacional -que es una razón por la que las NoSQL a veces se analizan como «No solo SQL”-. También pueden admitir una gama de modelos de coherencia, desde consistencia fuerte hasta consistencia eventual.

El valor clave es el más básico de los cuatro modelos de datos no relacionales. A veces, otros modelos de bases de datos se implementan sobre una capa base de valor clave.

Las bases de datos de columnas tienen claves, valores y marcas de tiempo; la marca de tiempo se usa para determinar el contenido válido. Cassandra es un ejemplo destacado de una base de datos de columnas.

Los almacenes de documentos, como MongoDB, tienen un lenguaje de consultas o API para buscar documentos por contenido. También tienen búsquedas clave, como los almacenes de valores clave.

Las bases de datos gráficas, como Neo4j, expresan explícitamente las conexiones entre nodos. Esto las hace más eficientes en el análisis de redes (informáticas, humanas, geográficas o de otro tipo) que las bases de datos relacionales.

Algunas bases de datos exponen múltiples modelos de datos. Algunas, como Azure Cosmos DB, aíslan los modelos de datos entre sí. Otras, como FaunaDB, combinan los modelos de datos.

Algunas de estas bases de datos soportan datos distribuidos a nivel mundial y, posiblemente, generan particiones automáticamente. Por ejemplo, Amazon DocumentDB replica seis copias de sus datos en tres zonas de disponibilidad de AWS y permite hasta quince réplicas de lectura. Amazon DynamoDB admite múltiples regiones y tablas globales.

Azure Cosmos DB está distribuido globalmente y particionado horizontalmente. YugaByte DB no solo fue diseñada para aplicaciones a escala planetaria, sino que también admite clústeres de nubes múltiples, fragmentación y rebalanceo automáticos, así como transacciones ACID distribuidas.

Aerospike
Aerospike es una base de datos de valor clave sin esquema, escalable, altamente consistente y distribuida para operaciones de big data en tiempo real. Los datos se estructuran en espacios de nombres (el equivalente de una base de datos RDBMS) y en contenedores (el equivalente de columnas RDBMS). Cada contenedor admite ciertos tipos de datos: enteros, cadenas, flotantes, listas, mapas, geojson, objetos binarios u objetos serializados por idioma.

Aerospike mantiene sus índices primario y secundario en RAM, y sus datos en RAM o en SSD. Uno puede hacer un back up de las bases de datos de Aerospike en discos duros. Aerospike se ofrece en ediciones comunitarias y empresariales.

La arquitectura «nada compartido” de Aerospike está diseñada para almacenar de manera confiable terabytes de datos con conmutación automática por error, replicación y, en la versión empresarial, sincronización cruzada de centros de datos. Esta capa aumenta su escala linealmente.

Aerospike utiliza un algoritmo basado en Paxos para determinar qué nodos se consideran parte del clúster. Los clústeres se vuelven a formar cada vez que se agrega o elimina un nodo. Cada nodo utiliza un algoritmo hash distribuido para dividir el espacio de índice primario en segmentos de datos y asignar propietarios. El módulo de migración de datos de Aerospike equilibra la distribución de datos en todos los nodos del clúster.

Aerospike Query Language (AQL) es una utilidad de línea de comandos con una sintaxis similar a SQL. También puede consultar Aerospike desde más de 10 lenguajes de programación utilizando su API.

Amazon DocumentDB
Amazon DocumentDB es un servicio de base de datos de documentos rápido, con escalabilidad, altamente disponible y totalmente administrado que admite cargas de trabajo de MongoDB. Amazon DocumentDB está diseñado desde cero para brindarle el rendimiento, la escalabilidad y la disponibilidad que necesita al operar cargas de trabajo MongoDB de misión crítica a escala.

Amazon DocumentDB implementa la API de código abierto Apago 2.0 MongoDB 3.6 emulando las respuestas que un cliente MongoDB espera de un servidor MongoDB, lo que le permite utilizar sus controladores y herramientas MongoDB existentes con DocumentDB. El servicio de base de datos en la nube de Amazon también utiliza un sistema de almacenamiento distribuido, tolerante a fallas y de recuperación automática que aumenta su escala automáticamente hasta 64TB por grupo de base de datos.

En Amazon DocumentDB, el almacenamiento y el cómputo están desacoplados, lo que permite que cada uno aumente en escala de forma independiente. En minutos, agregando hasta 15 réplicas de lectura de baja latencia, los desarrolladores pueden aumentar la capacidad de lectura a millones de solicitudes por segundo, independientemente del tamaño de los datos. Amazon DocumentDB está diseñado para una disponibilidad del 99,99% y replica seis copias de sus datos en tres zonas de disponibilidad de AWS.

Amazon DynamoDB
Amazon DynamoDB es una base de datos clave y de documentos, que ofrece un rendimiento de milisegundos de un solo dígito a cualquier escala. Es una base de datos totalmente administrada, multirregional y multimaestra, con seguridad integrada, back up y restauración, así como almacenamiento en caché para aplicaciones a escala de Internet. DynamoDB puede manejar más de diez billones de solicitudes por día y soportar picos de más de veinte millones de solicitudes por segundo.

Para brindarle un acceso rápido y local a los datos en sus aplicaciones distribuidas globalmente, las tablas globales de DynamoDB replican sus datos en múltiples regiones de AWS. Para casos de uso que requieren un acceso aún más rápido con latencia de microsegundos, el DynamoDB Accelerator (DAX) proporciona un caché totalmente administrado dentro de la memoria.

DynamoDB incrementa y disminuye la escala de las tablas automáticamente para ajustar la capacidad y mantener el rendimiento. La disponibilidad y la tolerancia a fallas están integradas.

Azure Cosmos DB
Azure Cosmos DB es un servicio de base de datos de modelo múltiple, distribuido globalmente, y dividido horizontalmente. Ofrece cuatro modelos de datos (valor clave, familia de columnas, documento y gráfico) y cinco niveles de consistencia ajustables (fuerte, límite de vigencia, sesión, prefijo consistente y consistencia eventual).

Los niveles de consistencia por debajo de fuerte ofrecen un mayor rendimiento a cambio de una consistencia más débil. Aproximadamente, el 70% de los usuarios de Cosmos DB eligen la consistencia de la sesión, lo que implica solo la mitad del costo por lectura de consistencia fuerte.

Cosmos DB ofrece cinco conjuntos de API: SQL (dialecto), compatible con MongoDB, compatible con Azure Table, gráfico (Gremlin) y compatible con Apache Cassandra. Cosmos DB indexa automáticamente todos los datos sin requerir que se ocupe de la gestión de esquemas e índices.

Los objetivos de diseño de Cosmos DB incluyen escalabilidad global elástica, operación de bajo costo, bajas latencias de lectura y escritura, 99,99% de disponibilidad, consistencia de datos predecible y ajustable, SLA exhaustivos y estrictos con respaldo financiero, administración automática de versiones para esquemas/índices, soporte nativo para múltiples modelos de datos y API populares para acceder a datos.

En el nivel más bajo, Cosmos DB tiene un motor de base de datos independiente de esquema, basado en secuencia de registro de átomo (ARS, por sus siglas en inglés), implementado sobre Azure Service Fabric. Los cuatro modelos de datos de aplicación se proyectan en el modelo central basado en ARS.

Como es de esperar, los cinco conjuntos de API de base de datos no se asignan a todos los modelos de datos. La API SQL solía llamarse API DocumentDB; se aplica a las bases de datos de documentos JSON. La API de MongoDB también es para bases de datos de documentos. Tenga en cuenta que el protocolo de conexión es diferente para la API de MongoDB y la API de SQL, por lo que no se puede usar una cuenta para ambas API, a pesar de que los datos del documento se pueden migrar entre las dos. La API de Gremlin es para bases de datos de gráficos de propiedades, la API de tabla de Azure es para tablas de valores clave y la API de Cassandra es para bases de datos de columna ancha (familia de columnas).

Microsoft ha usado Cosmos DB para aplicaciones internas durante algún tiempo. Por ejemplo, Azure Portal usa Cosmos DB como su tienda transaccional global, al igual que Xbox y Skype.

Cassandra y DataStax
Apache Cassandra es un almacén de datos distribuidos de alta disponibilidad, que valora la disponibilidad y la tolerancia de la partición sobre la coherencia. El diseño de Cassandra combina la partición y la replicación del almacén de valores clave de Amazon Dynamo con el modelo de datos ColumnFamily estructurado de registro de Google Bigtable. Cassandra aumenta su escala linealmente a medida que agrega nodos.

La consistencia no se pierde por completo en Cassandra -es una compensación contra la latencia-. El usuario puede especificar el nivel de consistencia de cada lectura y escritura, desde requerir solo un nodo a requerir un quórum de clúster, hasta requerir todos los nodos. Otra opción intermedia es requerir un quórum local, que es una forma de lograr consistencia dentro de un centro de datos sin esperar a que se actualicen los nodos remotos.

DataStax le agrega funciones y rendimiento a Cassandra. Entre otras mejoras, DataStax elimina la necesidad de ejecutar scripts de reparación y elimina las interrupciones del clúster que pueden ocurrir cuando fallan las reparaciones manuales; evita automáticamente que los nodos de DataStax Enterprise se sobrecarguen con solicitudes de cliente o réplica; y utiliza una arquitectura de subproceso por núcleo que duplica el nivel de rendimiento para las operaciones de lectura y escritura.

Couchbase Server
Couchbase Server es una base de datos de documentos JSON distribuida, flexible y con una gran consistencia dentro de un clúster local. Couchbase Lite es una versión móvil que puede funcionar localmente, y también sincronizarse con el servidor cuando está conectado. Couchbase Server puede escalar tanto vertical como horizontalmente; en la Edición Enterprise puede escalar diferentes servicios de forma independiente para obtener el máximo rendimiento, variando el número y el tamaño de los nodos de cada servicio, como los servicios de búsqueda de datos, índice, consulta y texto completo.

Las operaciones asíncronas ayudan a Couchbase a evitar el bloqueo de escrituras, lecturas o consultas. El desarrollador puede equilibrar la durabilidad y la consistencia con la latencia cuando sea necesario.

El modelo de datos JSON de Couchbase soporta tanto tipos de datos básicos como complejos: números, cadenas, objetos anidados y matrices. Puede crear documentos que estén normalizados o desnormalizados. Couchbase no requiere ni siquiera esquemas de soporte.

Puede acceder a los documentos de Couchbase a través de cuatro mecanismos: valor clave, consultas basadas en SQL, búsqueda de texto completo y eventos JavaScript. Si sus documentos JSON tienen subdocumentos o matrices, puede acceder a ellos directamente utilizando expresiones de ruta sin necesidad de transferir y analizar todo el documento.

Puede instalar Couchbase Server en sus instalaciones, en la nube y en Kubernetes. Couchbase Server Enterprise Edition es gratuita para el desarrollo y las pruebas, y está disponible por suscripción para la producción. Couchbase Server Community Edition de código abierto es gratuita para todos los fines. Aparte de algunas características omitidas, Community Edition es compatible mediante API con la Enterprise Edition.

Con Cross Data Center Replication (XDCR), Couchbase Server realiza replicación activo-activo asíncrona a través de clústeres, centros de datos y zonas de disponibilidad, para evitar incurrir en altas latencias de escritura. XDCR permite que Couchbase sea una base de datos distribuida globalmente, a costa de permitir una consistencia eventual (en lugar de fuerte) entre clústeres.

El lenguaje de consulta de Couchbase Server, N1QL (pronunciado «nickel»), se parece mucho al SQL estándar, con extensiones para JSON, tales como sugerencias de claves y hash para las uniones, y una condición que falta para manejar valores que han sido completamente omitidos de un documento. Couchbase ofrece SDKs para ocho lenguajes de programación y tres frameworks.

CouchDB
Apache CouchDB es una base de datos modelo de documento de código abierto, con un motor de consulta, replicación y resolución de conflictos. Utiliza una API HTTP RESTful para consultas y actualizaciones. CouchDB se implementa en Erlang.

El diseño de archivo CouchDB y el sistema de compromiso presentan todas las propiedades ACID. CouchDB on-disk nunca sobrescribe los datos comprometidos o las estructuras asociadas, lo que garantiza que el archivo de la base de datos esté siempre en un estado coherente. Este es un diseño de «solo para fallas” en el que el servidor CouchDB no pasa por un proceso de apagado, simplemente es finalizado.

Las operaciones de lectura de CouchDB utilizan un Multi-Version Concurrency Control (MVCC), en el que cada cliente ve un snapshot consistente, de inicio a fin, de la operación de lectura de la base de datos. Los documentos se indexan en B-trees por su nombre (DocID) y una Sequence ID.

CouchDB es un sistema de base de datos distribuido, basado en pares. Permite a los usuarios y servidores acceder y actualizar los mismos datos compartidos mientras están desconectados. Esos cambios se pueden replicar bidireccionalmente más adelante.

CouchDB permite que existan simultáneamente cualquier cantidad de documentos en conflicto en la base de datos, y cada instancia de la base de datos decide de manera determinista qué documento es el «ganador” y cuáles son los conflictos. Cuando se producen conflictos de edición distribuidos, cada réplica de la base de datos ve la misma revisión ganadora y cada uno tiene la oportunidad de resolver el conflicto.

FaunaDB
FaunaDB es una base de datos OLTP NoSQL distribuida y muy consistente que cumple con ACID y ofrece una interfaz de modelo múltiple. Tiene una arquitectura activa-activa y puede abarcar nubes y continentes.

FaunaDB soporta conjuntos de datos de documentos, relacionales, gráficos y temporales desde una sola consulta. Además de su propio lenguaje de consulta FQL, la compañía ha anunciado su soporte de GraphQL, además del soporte de CQL y SQL en el futuro.

Google Cloud Bigtable
Cloud Bigtable es una base de datos NoSQL pública como un servicio, orientada a columnas, de alta escalabilidad -hasta los petabytes-, que utiliza el mismo código que la versión interna de Google, que Google inventó a principios del 2000 y explicó en un artículo en el 2006. Bigtable fue y es la base de datos subyacente para muchos servicios de Google, incluidos Google Search, Google Analytics, Google Maps y Gmail.

El artículo de Bigtable inspiró varias bases de datos NoSQL de código abierto, incluyendo Apache HBase, Apache Cassandra y Apache Accumulo. Bigtable utiliza una estructura de tabla con escalabilidad alta y población ligera, donde cada tabla es un mapa ordenado de valores clave. Una fila de Bigtable describe una sola entidad y se indexa con una sola clave de fila; una columna contiene valores individuales para cada fila. Las familias de columnas agrupan columnas relacionadas. Cada intersección de fila/columna puede contener múltiples celdas en diferentes marcas de tiempo, y las celdas sin datos no ocupan espacio.

Cloud Bigtable ofrece un rendimiento muy alto con una carga alta, incluso en comparación con otros servicios NoSQL. En parte esto se debe a su diseño inherentemente eficiente, y en parte a su rápida y escalable infraestructura. Junto con su gran rendimiento, Bigtable ofrece una latencia muy baja.

MongoDB
MongoDB es una base de datos de documentos operativos con alta escalabilidad, disponible tanto en versiones empresariales de código abierto como comerciales, y se puede ejecutar on premises o como un servicio administrado en la nube. El servicio administrado en la nube se llama MongoDB Atlas.

MongoDB es, con mucho, la más popular de las bases de datos NoSQL. Su modelo de datos de documentos brinda a los desarrolladores una gran flexibilidad, mientras que su arquitectura distribuida permite una escalabilidad considerable. Como resultado, MongoDB a menudo se elige para aplicaciones que deben administrar grandes volúmenes de datos, que se benefician de la escalabilidad horizontal y que manejan estructuras de datos que no se ajustan al modelo relacional.

MongoDB es un almacén basado en documentos que también tiene implementado sobre él un almacén basado en gráficos. MongoDB en realidad no almacena JSON: almacena BSON (Binary JSON), que amplía la representación JSON (cadenas) a tipos adicionales como int, largo, fecha, punto flotante, decimal128 y coordenadas geoespaciales.

MongoDB puede generar índices de gráficos de modalidad múltiple, geoespaciales, B-tree, y de texto completo en una sola copia de los datos, utilizando el tipo de datos para generar el tipo correcto de índice. MongoDB le permite crear índices en cualquier campo de documento. MongoDB 4 tiene transacciones de documentos múltiples, lo que significa que aún puede obtener propiedades ACID incluso si tiene que normalizar su diseño de datos.

Por defecto, MongoDB usa esquemas dinámicos, a veces denominados modelos sin esquema. Los documentos en una sola colección no necesitan tener el mismo conjunto de campos, y el tipo de datos para un campo puede diferir entre los documentos dentro de una colección. Uno puede cambiar las estructuras de los documentos con esquemas dinámicos en cualquier momento.

Sin embargo, la gobernanza del esquema está disponible. A partir de MongoDB 3.6, MongoDB soporta la validación de esquema JSON, que puede activar en su expresión de validación.

Redis
Redis es un almacén de estructura de datos en memoria de código abierto, utilizado como base de datos, caché y agente de mensajes. Soporta estructuras de datos como cadenas, hashes, listas, conjuntos, conjuntos ordenados con consultas de rango, mapas de bits, hiperloglogs, índices geoespaciales con consultas de radio y flujos. Redis tiene replicación integrada, secuencias de comandos Lua, desalojo de LRU, transacciones y diferentes niveles de persistencia on disk. Redis ofrece alta disponibilidad a través de Redis Sentinel y la creación automática de particiones con Redis Clúster.

Redis Enterprise es una base de datos totalmente duradera de modelo múltiple. Admite datos de valor clave, documentos, gráficos y series de tiempo, estructuras de datos probabilísticos, búsqueda integral, procesamiento de flujo y servicio de aprendizaje profundo y modelos de IA.

Yandex ClickHouse
Yandex ClickHouse es un sistema de gestión de bases de datos OLAP de código abierto, orientado a columnas que administra volúmenes extremadamente grandes de datos, incluidos datos no agregados, de manera estable y sostenible, y permite generar, en tiempo real, informes en línea de datos personalizados. El sistema es de escalabilidad lineal y puede ampliarse para almacenar y procesar billones de filas y petabytes de datos.

ClickHouse está diseñado para funcionar en discos duros normales, lo que significa que el costo por GB de almacenamiento de datos es bajo, pero SSD y RAM adicional también se usan por completo si están disponibles -por el contrario, SAP HANA solo puede funcionar en RAM-. ClickHouse realiza el procesamiento paralelo en múltiples núcleos.

En ClickHouse, los datos pueden residir en diferentes fragmentos. Cada fragmento puede ser un grupo de réplicas que se utilizan para la tolerancia a fallas. La consulta se procesa en todos los fragmentos en paralelo.

ClickHouse admite un lenguaje de consulta declarativa basado en SQL que, en muchos casos, es idéntico al estándar SQL. Las consultas soportadas incluyen GROUP BY, ORDER BY, subconsultas en las cláusulas FROM, IN y JOIN, y subconsultas de escala. Las subconsultas dependientes y las funciones de ventana no son compatibles.

Aunque ClickHouse sí soporta inserciones de datos y mutaciones, no fue diseñado para OLTP. Yandex recomienda insertar datos en paquetes de al menos mil filas, o no más de una solicitud por segundo. No se toma ningún seguro cuando se ingestan nuevos datos.

ClickHouse utiliza la replicación asincrónica multimaestra. Después de escribirse en cualquier réplica disponible, los datos se distribuyen a todas las réplicas restantes en segundo plano.

ClickHouse fue desarrollado para soportar Yandex.Metrica, la segunda plataforma de analítica web más grande del mundo. Actualmente, esta aplicación utiliza 394 servidores ubicados en seis centros de datos, distribuidos geográficamente, que manejan más de 13 billones de registros en la base de datos y más de 20 mil millones de eventos diarios.

YugaByte
YugaByte DB es una base de datos de código abierto, transaccional y de alto rendimiento para aplicaciones a escala planetaria, que admite tres conjuntos de API: YCQL, compatible con Apache Cassandra Query Language (CQL); YEDIS, compatible con Redis; y PostgreSQL.

YugaWare es la capa de orquestación para YugaByte DB Enterprise Edition. YugaWare hace un trabajo rápido al acelerar y desactivar clústeres distribuidos en Amazon Web Services, Google Cloud Platform y Microsoft Azure. YugaByte DB implementa el control de concurrencia de versiones múltiples (MVCC, por sus siglas en inglés), que utiliza para lecturas sin bloqueo.

YugaByte Enterprise soporta réplicas de lectura, clústeres de nubes múltiples, así como monitoreo y alertas integrales sin ninguna configuración. También cuenta con encriptación in-flight y at-rest, back ups de un solo clic distribuidos, restauraciones para clústeres de cualquier tamaño, y la organización por niveles automática de datos en frío para un almacenamiento más barato.

Martin Heller, InfoWorld.com