Introducción

Azure Cosmos DB es un servicio de base de datos distribuida globalmente que está diseñado para ofrecer escalabilidad y rendimiento de alta disponibilidad. Es una base de datos NoSQL que admite múltiples modelos de datos, incluyendo documentos, gráficos, columnas anchas y claves-valor.

Características Clave de Azure Cosmos DB

  • Distribución Global: Permite replicar datos en múltiples regiones de Azure.
  • Escalabilidad Elástica: Escala automáticamente el rendimiento y el almacenamiento.
  • Latencia Baja: Ofrece latencias de lectura y escritura de menos de 10 milisegundos.
  • Modelos de Consistencia: Proporciona cinco niveles de consistencia: Fuerte, Sesgo, Sesgo limitado, Sesgo eventual y Sesgo eventual con prefijo.
  • APIs Múltiples: Compatible con APIs de SQL, MongoDB, Cassandra, Gremlin y Table.

Configuración Inicial

Crear una Cuenta de Azure Cosmos DB

  1. Acceder al Portal de Azure:

  2. Crear un Recurso:

    • Haz clic en "Crear un recurso" en la esquina superior izquierda.
    • Busca "Azure Cosmos DB" y selecciona "Azure Cosmos DB".
  3. Configurar la Cuenta:

    • Selecciona la API que deseas usar (por ejemplo, SQL, MongoDB, Cassandra, Gremlin, Table).
    • Completa los detalles de la cuenta, como el nombre, la suscripción, el grupo de recursos y la ubicación.
  4. Revisar y Crear:

    • Revisa la configuración y haz clic en "Crear".

Ejemplo de Creación de una Cuenta de Cosmos DB con API SQL

# Este ejemplo usa la biblioteca Azure SDK para Python
from azure.cosmos import CosmosClient, exceptions, PartitionKey

# Configuración de la cuenta y la clave
endpoint = "https://<your-account-name>.documents.azure.com:443/"
key = '<your-account-key>'

# Crear un cliente de Cosmos DB
client = CosmosClient(endpoint, key)

# Crear una base de datos
database_name = 'AzureSampleFamilyDatabase'
database = client.create_database_if_not_exists(id=database_name)

# Crear un contenedor
container_name = 'FamilyContainer'
container = database.create_container_if_not_exists(
    id=container_name,
    partition_key=PartitionKey(path="/lastName"),
    offer_throughput=400
)

Modelos de Consistencia

Azure Cosmos DB ofrece cinco niveles de consistencia para equilibrar la latencia y la disponibilidad:

Nivel de Consistencia Descripción
Fuerte Garantiza que las lecturas siempre devuelvan la versión más reciente de un elemento.
Sesgo Las lecturas pueden retrasarse hasta un número especificado de versiones.
Sesgo limitado Las lecturas pueden retrasarse hasta un intervalo de tiempo especificado.
Sesgo eventual Las lecturas pueden devolver versiones antiguas, pero eventualmente serán consistentes.
Sesgo eventual con prefijo Las lecturas nunca verán versiones fuera de orden.

Operaciones Básicas

Crear un Documento

# Crear un documento JSON
family_item = {
    'id': 'AndersenFamily',
    'lastName': 'Andersen',
    'parents': [
        {'firstName': 'Thomas'},
        {'firstName': 'Mary Kay'}
    ],
    'children': [
        {'firstName': 'Henriette Thaulow', 'gender': 'female', 'grade': 5}
    ],
    'address': {'state': 'WA', 'county': 'King', 'city': 'Seattle'}
}

# Insertar el documento en el contenedor
container.create_item(body=family_item)

Leer un Documento

# Leer un documento por su ID y clave de partición
response = container.read_item(item='AndersenFamily', partition_key='Andersen')
print(response)

Actualizar un Documento

# Actualizar un documento existente
family_item['address']['city'] = 'Redmond'
container.upsert_item(body=family_item)

Eliminar un Documento

# Eliminar un documento por su ID y clave de partición
container.delete_item(item='AndersenFamily', partition_key='Andersen')

Ejercicios Prácticos

Ejercicio 1: Crear y Leer Documentos

  1. Crear un Documento:

    • Crea un documento JSON con información de una familia diferente.
    • Inserta el documento en el contenedor.
  2. Leer el Documento:

    • Usa el ID y la clave de partición para leer el documento que acabas de crear.

Ejercicio 2: Actualizar y Eliminar Documentos

  1. Actualizar un Documento:

    • Actualiza la dirección de la familia en el documento que creaste en el Ejercicio 1.
  2. Eliminar un Documento:

    • Elimina el documento que creaste y actualizaste.

Soluciones

Solución al Ejercicio 1

# Crear un nuevo documento
new_family_item = {
    'id': 'WakefieldFamily',
    'lastName': 'Wakefield',
    'parents': [
        {'firstName': 'Robin'},
        {'firstName': 'Ben'}
    ],
    'children': [
        {'firstName': 'Jesse', 'gender': 'male', 'grade': 8},
        {'firstName': 'Lisa', 'gender': 'female', 'grade': 5}
    ],
    'address': {'state': 'NY', 'county': 'Westchester', 'city': 'Mount Kisco'}
}

# Insertar el nuevo documento
container.create_item(body=new_family_item)

# Leer el documento
response = container.read_item(item='WakefieldFamily', partition_key='Wakefield')
print(response)

Solución al Ejercicio 2

# Actualizar el documento
new_family_item['address']['city'] = 'New York'
container.upsert_item(body=new_family_item)

# Eliminar el documento
container.delete_item(item='WakefieldFamily', partition_key='Wakefield')

Conclusión

En esta sección, hemos cubierto los conceptos básicos de Azure Cosmos DB, incluyendo su configuración inicial, modelos de consistencia y operaciones CRUD básicas. Con estos conocimientos, estás preparado para explorar más a fondo las capacidades avanzadas de Azure Cosmos DB y cómo puede integrarse en tus aplicaciones distribuidas globalmente. En el próximo módulo, profundizaremos en otros servicios de bases de datos de Azure, como Azure SQL Database.

© Copyright 2024. Todos los derechos reservados