3. 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
4. Escenario
• Existen muchas diferentes 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
• 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
9. 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
11. • NoSql Database as 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ó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
14. 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
15. Multimodelo
• Soporte para UDF
• Trigger
• Stored procedures
• Binding con Azure functions
@leomicheloni
16. Multi API
• Sql Database (Document DB)
• MongoDB
• Table API
• Graph API (Gremlin)
• Cassandra
@leomicheloni
18. 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
19. Escalado elástico de rendimiento y
almacenamiento
• RU (request unit)
• SLA 99%
@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
23. ¿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