Cosmos DB Leonardo Micheloni
@leomicheloni
Un paseo por
¿Quién soy?
Leonardo Micheloni
@leomicheloni
@leomicheloni
Argentino en Madrid
Escenario
• Hoy en día es cada vez más común tener aplicaciones distribuidas
• Demanda todo el día
• Esto presenta desafíos diferentes a los acostumbrados
• Latencia
• Disponibilidad
• Escalamiento
• Único punto de falla
@leomicheloni
Escenario
• Existen muchas diferentes herramientas
• Diferentes formas de almacenar los datos
• Diferentes APIs
• Servicios
@leomicheloni
Sistemas relacionales RDBMS (clásicos)
• Son excelentes para modelos relacionales
• Siguen el teorema ACID
• Atomicidad
• Consistencia
• Aislamiento
• Durabilidad
• Son muy confiables y muy rápidos
• Pueden presentar problemas en sistemas distribuidos
@leomicheloni
Sistemas relacionales RDBMS (clásicos)
• En ocasiones se utilizan para algo que no fueron pensados
• Key value
• JSON
• ORM
@leomicheloni
Bases de
datos NoSQL
• Siguen el teorema CAP
• Consistency
• Availability
• Partition tolerance
• Solo puedo tener dos
en simultáneo
@leomicheloni
NoSQL
• Modelos
• Key Value
• Columnas
• Documentos
• Grafos
• Cada elemento es independiente
• Tiene su propio esquema
• Lo ideal es usar el más adecuado para nuestro requisito
@leomicheloni
Algunos ejemplos de NoSQL
• MongoDB
• Basada en documentos
• Ebay, GAP, Chicago Police, Under Armour, HSBC, McAfee, Adobe
• Lenguaje de consulta "basado en JSON"
• Cassandra (Facebook inbox search)
• Bigtable
• GoDaddy, Reddit, Weather Channel, Apple (75K nodos, 10PB)
• Cassandra Query Language (CQL)
• GraphDB
• Grafos
• Walmart, Cisco, Microsoft, Medium.
• Gremlin API
@leomicheloni
@leomicheloni
• NoSql Database as a service
• Multi region replication
• Manual and automatic failover
• Multi model
• Multi API
• Intuitive consistency level
• Designed for high availability
@leomicheloni
Global distribution
• Replicación automática alrededor
del mundo con un click
• Una sola colección particionada y
distribuida en varias regiones
• Geovallado basado en directivas
• Selección del mejor nodo
automática
@leomicheloni
Multiregional failover
@leomicheloni
Multimodelo
• Cosmos DB permite guardar los datos en diferentes formatos
• Documentos
• Grafos
• Clave / valor
• Indexa automáticamente todos los campos
• TTL a nivel documento
@leomicheloni
Multimodelo
• Soporte para UDF
• Trigger
• Stored procedures
• Binding con Azure functions
@leomicheloni
Multi API
• Sql Database (Document DB)
• MongoDB
• Table API
• Graph API (Gremlin)
• Cassandra
@leomicheloni
Soporte multiplataforma
• SDKs
• .NET
• .NET Core
• Java
• Phyton
• Node JS
• API REST
@leomicheloni
Escalado elástico de rendimiento y
almacenamiento
• Es posible cambiar en cualquier
momento
• Es posible hacerlo por código
• Es transparente para las aplicaciones
• Cosmos DB se encarga de conectar al
nodo más adecuado
@leomicheloni
Escalado elástico de rendimiento y
almacenamiento
• RU (request unit)
• SLA 99%
@leomicheloni
Tipos de consistencia
• Strong
• Bounded-staleness
• Session
• Consistent Prefix
• Eventual
@leomicheloni
Tipos de consistencia
• Strong: El más transaccional, las lecturas siempre retornan la última versión de los datos, en
este caso no se puede asociar a más de una región.
• Bounded Staleness: Las lecturas están detrás de las escrituras k prefijos (o versiones) o un
intervalo de tiempo definido
• Session: Ofrece consistencia para un cliente determinado.
• Consistent Prefix: En caso de escribirse A, B y C, los clientes leeran A o A, B, o A,B y C, pero
nunca mezaclados.
• Eventual: El modelo asegura lecturas inmediatas pero ningún nivel de consistencia inmediata,
solo que eventualmente todos los clientes verán las mismas escritura.
Al definir un nivel de consistencia definimos el nivel por defecto, sin embargo podemos utilizar
un nivel de consistencia diferente en cada lectura, lo cual aporta aún más flexibilidad.
@leomicheloni
Casos de uso
@leomicheloni
• Retail apps
• Mobile
• Web apps
• Games
• Social apps
• Azure!
¿Cómo saber si elegir Cosmos DB?
• Si los datos cambian mucho, sin importar si es esquema o keyvalue
• Si tenemos muchas transacciones por segundo
• Si hay una enorme cantidad de datos
• Si estamos usando el RDBMS para cosas “extrañas”
• En general todos aquellos escenarios para los que los RDBMS no
son buenos
• Pueden convivir!
@leomicheloni
@leomicheloni
https://www.sqlhammer.com/wp-content/uploads/2016/10/demo-god-meme.jpg
Probar Cosmos DB gratis
• https://azure.microsoft.com/en-us/try/cosmosdb/ @leomicheloni
Referencias
• https://azure.microsoft.com/en-us/services/cosmos-db/
• https://docs.microsoft.com/es-es/azure/cosmos-db/distribute-
data-globally
• https://docs.microsoft.com/en-us/azure/cosmos-db/consistency-
levels
• https://docs.microsoft.com/en-us/azure/cosmos-db/20-days-of-tips
• https://azure.microsoft.com/en-us/try/cosmosdb/
• https://www.youtube.com/watch?v=4fRKzcU__jY
• https://github.com/afhaque/MeanMapAppV2.0
@leomicheloni

Un viaje por Cosmos DB

  • 1.
    Cosmos DB LeonardoMicheloni @leomicheloni Un paseo por
  • 2.
  • 3.
    Escenario • Hoy endía es cada vez más común tener aplicaciones distribuidas • Demanda todo el día • Esto presenta desafíos diferentes a los acostumbrados • Latencia • Disponibilidad • Escalamiento • Único punto de falla @leomicheloni
  • 4.
    Escenario • Existen muchasdiferentes herramientas • Diferentes formas de almacenar los datos • Diferentes APIs • Servicios @leomicheloni
  • 5.
    Sistemas relacionales RDBMS(clásicos) • Son excelentes para modelos relacionales • Siguen el teorema ACID • Atomicidad • Consistencia • Aislamiento • Durabilidad • Son muy confiables y muy rápidos • Pueden presentar problemas en sistemas distribuidos @leomicheloni
  • 6.
    Sistemas relacionales RDBMS(clásicos) • En ocasiones se utilizan para algo que no fueron pensados • Key value • JSON • ORM @leomicheloni
  • 7.
    Bases de datos NoSQL •Siguen el teorema CAP • Consistency • Availability • Partition tolerance • Solo puedo tener dos en simultáneo @leomicheloni
  • 8.
    NoSQL • Modelos • KeyValue • Columnas • Documentos • Grafos • Cada elemento es independiente • Tiene su propio esquema • Lo ideal es usar el más adecuado para nuestro requisito @leomicheloni
  • 9.
    Algunos ejemplos deNoSQL • MongoDB • Basada en documentos • Ebay, GAP, Chicago Police, Under Armour, HSBC, McAfee, Adobe • Lenguaje de consulta "basado en JSON" • Cassandra (Facebook inbox search) • Bigtable • GoDaddy, Reddit, Weather Channel, Apple (75K nodos, 10PB) • Cassandra Query Language (CQL) • GraphDB • Grafos • Walmart, Cisco, Microsoft, Medium. • Gremlin API @leomicheloni
  • 10.
  • 11.
    • NoSql Databaseas a service • Multi region replication • Manual and automatic failover • Multi model • Multi API • Intuitive consistency level • Designed for high availability @leomicheloni
  • 12.
    Global distribution • Replicaciónautomática alrededor del mundo con un click • Una sola colección particionada y distribuida en varias regiones • Geovallado basado en directivas • Selección del mejor nodo automática @leomicheloni
  • 13.
  • 14.
    Multimodelo • Cosmos DBpermite guardar los datos en diferentes formatos • Documentos • Grafos • Clave / valor • Indexa automáticamente todos los campos • TTL a nivel documento @leomicheloni
  • 15.
    Multimodelo • Soporte paraUDF • Trigger • Stored procedures • Binding con Azure functions @leomicheloni
  • 16.
    Multi API • SqlDatabase (Document DB) • MongoDB • Table API • Graph API (Gremlin) • Cassandra @leomicheloni
  • 17.
    Soporte multiplataforma • SDKs •.NET • .NET Core • Java • Phyton • Node JS • API REST @leomicheloni
  • 18.
    Escalado elástico derendimiento y almacenamiento • Es posible cambiar en cualquier momento • Es posible hacerlo por código • Es transparente para las aplicaciones • Cosmos DB se encarga de conectar al nodo más adecuado @leomicheloni
  • 19.
    Escalado elástico derendimiento y almacenamiento • RU (request unit) • SLA 99% @leomicheloni
  • 20.
    Tipos de consistencia •Strong • Bounded-staleness • Session • Consistent Prefix • Eventual @leomicheloni
  • 21.
    Tipos de consistencia •Strong: El más transaccional, las lecturas siempre retornan la última versión de los datos, en este caso no se puede asociar a más de una región. • Bounded Staleness: Las lecturas están detrás de las escrituras k prefijos (o versiones) o un intervalo de tiempo definido • Session: Ofrece consistencia para un cliente determinado. • Consistent Prefix: En caso de escribirse A, B y C, los clientes leeran A o A, B, o A,B y C, pero nunca mezaclados. • Eventual: El modelo asegura lecturas inmediatas pero ningún nivel de consistencia inmediata, solo que eventualmente todos los clientes verán las mismas escritura. Al definir un nivel de consistencia definimos el nivel por defecto, sin embargo podemos utilizar un nivel de consistencia diferente en cada lectura, lo cual aporta aún más flexibilidad. @leomicheloni
  • 22.
    Casos de uso @leomicheloni •Retail apps • Mobile • Web apps • Games • Social apps • Azure!
  • 23.
    ¿Cómo saber sielegir Cosmos DB? • Si los datos cambian mucho, sin importar si es esquema o keyvalue • Si tenemos muchas transacciones por segundo • Si hay una enorme cantidad de datos • Si estamos usando el RDBMS para cosas “extrañas” • En general todos aquellos escenarios para los que los RDBMS no son buenos • Pueden convivir! @leomicheloni
  • 24.
  • 25.
    Probar Cosmos DBgratis • https://azure.microsoft.com/en-us/try/cosmosdb/ @leomicheloni
  • 26.
    Referencias • https://azure.microsoft.com/en-us/services/cosmos-db/ • https://docs.microsoft.com/es-es/azure/cosmos-db/distribute- data-globally •https://docs.microsoft.com/en-us/azure/cosmos-db/consistency- levels • https://docs.microsoft.com/en-us/azure/cosmos-db/20-days-of-tips • https://azure.microsoft.com/en-us/try/cosmosdb/ • https://www.youtube.com/watch?v=4fRKzcU__jY • https://github.com/afhaque/MeanMapAppV2.0 @leomicheloni