Tema 4 de 4
Cosmos DB no obliga a usar un único modelo de datos ni un único lenguaje de consulta. Ofrece varias API compatibles con herramientas que los desarrolladores ya conocen. El examen da un escenario (una app con MongoDB, un grafo, una tabla clave-valor) y pide la API adecuada.
Contenido
Al crear una cuenta de Cosmos DB se elige la API. Esa elección decide cómo interactúa la aplicación: qué formato envía, qué lenguaje de consulta usa y con qué bibliotecas de cliente trabaja. Internamente Cosmos DB guarda los datos en su propio formato; la API es una capa de abstracción encima.
La ventaja: portabilidad
Si un equipo ya tiene una aplicación sobre MongoDB o Apache Cassandra, puede apuntarla a Cosmos DB con cambios mínimos y ganar distribución global, rendimiento gestionado y disponibilidad respaldada por SLA.
Las cinco API admitidas son NoSQL, MongoDB, Table, Apache Cassandra y Apache Gremlin. Azure Cosmos DB for PostgreSQL es una oferta aparte en proceso de retirada, no recomendada para proyectos nuevos.
Es la API nativa de Cosmos DB. Guarda los datos como documentos JSON y permite consultarlos con una sintaxis parecida a SQL. Antes se llamaba SQL API: si la documentación antigua dice «SQL API», es el mismo servicio.
SELECT *
FROM customers c
WHERE c.id = "joe@litware.com"
-- Resultado: un documento JSON
{
"id": "joe@litware.com",
"name": "Joe Jones",
"address": { "street": "1 Main St.", "city": "Seattle" }
}Compatible con los controladores y bibliotecas de cliente de MongoDB, así que las aplicaciones existentes se conectan sin cambios importantes. Los datos se guardan en BSON (JSON binario) y se consultan con MQL (MongoDB Query Language), una sintaxis orientada a objetos en la que se llama a métodos sobre colecciones.
db.products.find({id: 123})
-- Resultado
{ "id": 123, "name": "Hammer", "price": 2.99 }Matiz importante
Encaja cuando el equipo sabe MongoDB y quiere usar sus controladores con el modelo global de Cosmos DB. Para migrar una aplicación MongoDB existente o usar todo MQL, Microsoft recomienda Azure DocumentDB, un servicio aparte compatible con el protocolo de MongoDB.
Guarda pares clave-valor en tablas con el mismo modelo de programación que Azure Table Storage. Una app de Table Storage se conecta con cambios mínimos y gana escalabilidad, distribución global e indexación automática de todas las propiedades.
| PartitionKey | RowKey | Name | |
|---|---|---|---|
| 1 | 123 | Joe Jones | joe@litware.com |
| 1 | 124 | Samir Nadoy | samir@northwind.com |
Cada fila se identifica con PartitionKey + RowKey y se recupera con un punto de conexión de estilo REST, por ejemplo Customers(PartitionKey='1',RowKey='124').
Compatible con Apache Cassandra, una base de código abierto con modelo de familia de columnas: las filas no tienen que contener las mismas columnas, a diferencia de una tabla relacional.
SELECT * FROM Employees WHERE ID = 2Usa CQL (Cassandra Query Language), de sintaxis parecida a SQL. Encaja para migrar una carga de Cassandra a una base gestionada en la nube.
Diseñada para datos de grafo: las entidades son vértices (nodos) y las relaciones, aristas. Útil cuando las conexiones importan tanto como los datos: redes sociales, motores de recomendación, detección de fraude y jerarquías organizativas.
g.addV('employee').property('id', '3').property('firstName', 'Alice')
g.V('3').addE('reports to').to(g.V('1'))
g.V().hasLabel('employee').order().by('id')Gremlin es el lenguaje para recorrer y manipular el grafo: el ejemplo añade una empleada, la conecta con su responsable y luego lista los empleados ordenados.
| API | Modelo de datos | Lenguaje | Elígela si… |
|---|---|---|---|
| NoSQL | Documentos JSON | Sintaxis parecida a SQL | App nueva, máxima escala |
| MongoDB | Documentos BSON | MQL | El equipo usa MongoDB |
| Table | Clave-valor | API de Table Storage | Vienes de Azure Table Storage |
| Cassandra | Familia de columnas | CQL | Vienes de Apache Cassandra |
| Gremlin | Grafo | Gremlin | Las relaciones son lo importante |
| Situación | API | Por qué |
|---|---|---|
| App nueva con documentos JSON y consultas de sintaxis parecida a SQL | API for NoSQL | API nativa de Cosmos DB. |
| Analizar datos operativos casi en tiempo real sin construir ETL | API for NoSQL con Fabric mirroring | Replica a Fabric sin consumir RU. |
| Aplicación existente con controladores de MongoDB | API for MongoDB | Compatible con controladores y bibliotecas de MongoDB. |
| Migrar una app de Azure Table Storage ganando distribución global | API for Table | Mismo modelo de programación. |
| Migrar una carga de Apache Cassandra a un servicio gestionado | API for Apache Cassandra | Familias de columnas y CQL. |
| Detectar fraude recorriendo relaciones entre cuentas | API for Apache Gremlin | Grafos con vértices y aristas. |
| Migrar MongoDB usando todo el lenguaje de consultas de MongoDB | Azure DocumentDB | La opción que recomienda Microsoft para ese caso. |
❓ ¿La «SQL API» de Cosmos DB es otra API distinta de NoSQL?
No. Es el nombre anterior de la API for NoSQL.
❓ ¿La API for NoSQL convierte Cosmos DB en una base relacional?
No. Guarda documentos JSON; solo la sintaxis de consulta se parece a SQL.
❓ ¿En qué formato guarda los datos la API for MongoDB?
En BSON (JSON binario), y se consulta con MQL.
❓ ¿Qué lenguaje usa la API for Apache Cassandra?
CQL (Cassandra Query Language).
❓ ¿Cómo se llaman las entidades y relaciones en Gremlin?
Vértices (nodos) y aristas.
❓ ¿Cuántas API admite Cosmos DB?
Cinco: NoSQL, MongoDB, Table, Apache Cassandra y Apache Gremlin.
❓ ¿Se elige la API por cada contenedor?
No. Se elige al crear la cuenta de Cosmos DB.
¿Entendiste este tema?
Pon a prueba lo que acabas de aprender
Una red social quiere guardar usuarios y quién sigue a quién, y consultar rápidamente los amigos de los amigos de una persona. ¿Qué API de Cosmos DB debe usar?
Preguntas originales, cada una con su explicación.
Empezar un simulacro