NO-SQL Lic. Gerardo Rossel 2016
Introducción
Definición Dan McCreary -Ann Kelly NoSQL is a set of concepts that allows the rapid and efficient processing of data sets with a focus on performance, reliability, and agility. Shashank Tiwari NoSQL is used today as an umbrella term for all databases and data stores that don t follow the popular and well established RDBMS principles and often relate to large data sets accessed and manipulated on a Web scale. This means NoSQL is not a single product or even a single technology. It represents a class of products and a collection of diverse, and sometimes related, concepts about data storage and manipulation.
Definición Fowler -Sadalage NoSQL is an accidental neologism. There is no prescriptive definition all you can make is an observation of common characteristics.
Que deberían ya saber? Modelos de Distribución: Maestro-Esclavo. Maestro-Maestro. Sharding. Consistencia: Consistencia Fuerte. Consistencia Eventual. Teorema CAP. ACID vs. BASE.
Consistencia Modelos de consistencia Un modelo de consistencia determina la visibilidad y el orden aparente de las actualizaciones. Modelos de Consistencia - Tanenbaum Un modelo de consistencia es básicamente un contrato entre los procesos y el almacén de datos. Este contrato dice que si los procesos aceptan obedecer ciertas reglas, el almacén promete funcionar correctamente.
Consistencia
Consistencia Consistencia Fuerte Todas las operaciones de lectura deben devolver datos de la última operación de escritura completada.
Consistencia Consistencia Fuerte Todas las operaciones de lectura deben devolver datos de la última operación de escritura completada.
Consistencia Consistencia Fuerte Todas las operaciones de lectura deben devolver datos de la última operación de escritura completada. Consistencia Eventual Las operaciones de lectura verán conforme pasa el tiempo las escrituras. En un estado de equilibrio el sistema devolvería el último valor escrito. A medida que t > los clientes verán las escrituras.
Consistencia no Estricta Read Your Own Writes (RYOW) Consistency Consistencia de Sesión Consistencia Causal Consistencia de lectura monotónica. Consistencia Eventual. Read Your Own Writes El cliente lee sus actualizaciones inmediatamente después de que hayan sido completadas. Independientemente si escribe en un server y lee de otro. Las actualizaciones de otros clientes no tienen porque ser visibles instantáneamentee.
Consistencia no Estricta Read Your Own Writes (RYOW) Consistency Consistencia de Sesión Consistencia Causal Consistencia de lectura monotónica. Consistencia Eventual. Sesión Es un poco más débil que RYOW. Porvee RYOW sólo si el cliente esta dentro de la misma sesión. Usualmente sobre el mismo server.
Consistencia no Estricta Read Your Own Writes (RYOW) Consistency Consistencia de Sesión Consistencia Causal Consistencia de lectura monotónica. Consistencia Eventual. Causal Si el evento b es causado o influenciado por un evento previo a, la causalidad requiere que todos los demás eventos vean primero a a, y después a b. Escrituras que potencialmente están relacionadas por la causalidad, deben ser vistas por todos los procesos en el mismo orden. Las escrituras concurrentes pueden verse en un orden diferente en diferentes máquinas.
Consistencia no Estricta Read Your Own Writes (RYOW) Consistency Consistencia de Sesión Consistencia Causal Consistencia de lectura monotónica. Consistencia Eventual. Monotonic Read Si un proceso lee el valor de un elemento de datos x, cualquier operación de lectura sucesiva sobre x que haga ese proceso devolverá siempre el mismo valor o un valor más reciente.
Consistencia no Estricta Read Your Own Writes (RYOW) Consistency Consistencia de Sesión Consistencia Causal Consistencia de lectura monotónica. Consistencia Eventual.
El teorema CAP C Consistency: Todos ven los mismos datos al mismo tiempo A Availability: Si se puede comunicar con un nodo en el cluster entonces se pueden leer y escribir datos. 1 P Partition tolerance: El cluster puede sobrevivir a roturas de comunicación que lo dividan en particiones que no pueden comunicarse entre ellas. 1 every request received by a non failing node in the system must result in a response
El teorema CAP C Consistency: Todos ven los mismos datos al mismo tiempo A Availability: Si se puede comunicar con un nodo en el cluster entonces se pueden leer y escribir datos. 1 P Partition tolerance: El cluster puede sobrevivir a roturas de comunicación que lo dividan en particiones que no pueden comunicarse entre ellas. Teorema CAP Dado C, A y P: sólo se puede tener un máximo de dos de estas propiedades para cualquier sistema de datos compartidos 1 every request received by a non failing node in the system must result in a response
CAP - Falacias de la computación distribuida La red es fiable. La latencia es cero. El ancho de banda es infinito. La red es segura. La topología no cambia. Hay un administrador. El costo del transporte es cero. La red es homogénea.
CAP - Falacias de la computación distribuida La red es fiable. La latencia es cero. El ancho de banda es infinito. La red es segura. La topología no cambia. Hay un administrador. El costo del transporte es cero. La red es homogénea. Teorema CAP Fallos de red le suceden a su sistema y no puede elegir cuando se producen.
CAP - Falacias de la computación distribuida Teorema CAP Fallos de red le suceden a su sistema y no puede elegir cuando se producen.
CAP - Falacias de la computación distribuida Teorema CAP Fallos de red le suceden a su sistema y no puede elegir cuando se producen. CP vs AP Hay que tolerar particiones! CP - Consistency/Partition Tolerance AP - Availability/Partition Tolerance No es una decisión binaria. Un poco de uno a costa del otro.
Eric Brewer: BASE Mito La plata es importante, así que los bancos debe usar transacciones para mantener la plata segura y consistente?
Eric Brewer: BASE Mito La plata es importante, así que los bancos debe usar transacciones para mantener la plata segura y consistente? Realidad Las transacciones bancarias son inconsistentes, particularmente para ATM (Cajeros Automáticos). ATM es diseñado para tener un comportamiento en modo normal y otro en modo partición. En modo partición la Availability es elegida por sobre la Consistencia Realidad La industria financiera históricamente no tubo consistencia porque no tenía comunicación perfecta.
Realidad ATMs eligen operaciones conmutativas así el orden en el cual se aplican no importa. Relidad ATMs Si hay una partición el cajero puede seguir funcionando, luego al volver a recuperar la partición se envían las operaciones y el saldo final sigue siendo correcto. Idea Lo que se está haciendo es delimitar y administrar el riesgo. ATMs son rentables aún a costa de alguna perdida.
Durabilidad vs. Performance. Durabilidad de replicación Aplicar Cambios a Memoria y cada t enviar los cambios a disco (Redis) A menudo, se puede especificar las necesidades durabilidad por cada llamada, de tal manera que las actualizaciones más importantes pueden forzar su escritura a disco.
Durabilidad vs. Performance. Durabilidad de replicación Un nodo puede procesar una actualización y falla antes de que se replique en otros nodos. Mastro/Esclavo: Se puede mejorar esperando por algunas réplicas antes confirmar al cliente.
Map-Reduce
Introducción Vistas Materializadas Computación de grandes volúmenes de información Donde realizar el computo? Ranking de páginas WEB por importancia. Búsquedas en amigos en redes sociales que involucra grafos con cientos de millones de nodos.
Introducción Jeffrey Dean y Sanjay Ghemawat "MapReduce: Simplified Data Processing on Large Clusters" In OSDI 04: Proceedings of the 6th conference on Symposium on Opearting Systems Design & Implementation. 2004
Visión general Leer secuencialemente una enorme cantidad de datos Map: Extraer algo que nos interesa. Agrupar por clave. Ordenar y Mezclar Reduce: Agregar, sumarizar, filtrar o transformar Devolver el resultado Adecuación El esquema general siempre es el mismo. Map y Reduce cambian para adecuarse al problema
1 Entrada: un conjunto de pares clave-valor de esta manera se logra permitir la composición de procesos 2 El desarrollador especifica dos funciones: Map(k, v) < k, v > Toma un par key-value y devuelve un conjunto de pares key-value Hay un llamada a Map por cada par (k,v) Reduce(k, < v > ) < k, v > Todos los valores de v para la misma k se reducen y procesan en conjunto
Esquema general Figura de J. Leskovec, A. Rajaraman, J. Ullman: Mining of Massive Datasets, http://www.mmds.org
Reduce Ejemplo - Contar Palabras map( String input_key, String input_value ) : / / input_key : document name / / input_value : document contents for each word w in input_value : EmitIntermediate (w, 1) ; Map reduce ( String output_key, Iterator intermediate_values ) : / / output_key : word / / output_values :???? int result = 0; for each v in intermediate_values : result += v ; Emit ( result ) ;
Ejemplo Al finalizar las tareas Map los pares key-value son agrupados por key y los valores asociados con cada key son colocados en una lista de valores (k, [v 1, v 2,..., v n ]). Este agrupamiento es desarrollado por el sistema independientemente de lo que hagan Map y Reduce.
Paralelismo y arquitectura El entorno Map-Reduce se encarga de: Particionar los datos de entrada. Planificar la ejecución de los programas en un conjunto de computadoras. Desarrollar el agrupamiento por clave. Manejar las fallas en las máquinas. Administrar la comunicación.
Esquema general Figura de J. Leskovec, A. Rajaraman, J. Ullman: Mining of Massive Datasets, http://www.mmds.org
Paralelismo Figura de J. Leskovec, A. Rajaraman, J. Ullman: Mining of Massive Datasets, http://www.mmds.org
Paralelismo Combinable Reducer Es un Reduce que se ejecuta en el mismo nodo que el Map No todas las funciones Reduce son combinables La entrada debe coincidir con la salida. La función Reduce debe ser asociativa y conmutativa
Ejemplo - Map Calcular el ingreso total por producto. Figura de Sadalage y Fowler / NoSQL distilled : a brief guide to the emerging world of polyglot persistence
Ejemplo - Reduce Calcular el ingreso total por producto. Figura de Sadalage y Fowler / NoSQL distilled : a brief guide to the emerging world of polyglot persistence
Ejemplo - Paralelismo Calcular el ingreso total por producto. Figura de Sadalage y Fowler / NoSQL distilled : a brief guide to the emerging world of polyglot persistence
Ejemplo - Combinable Reduce Calcular el ingreso total por producto. Se puede optimizar más?
Ejemplo - Combinable Reduce Calcular el ingreso total por producto. Figura de Sadalage y Fowler / NoSQL distilled : a brief guide to the emerging world of polyglot persistence
Implementar la Junta del Algebra Relacional Bar Cerveza Precio Moe Duff 25 Cito Quilmes 35 Joe s Miller 27.5 Joe s Bud 25 Vende Bar Moe Cito Dirección Maple St River Rd. Joe s Balcarce 50 Bar Bar Cerveza Precio Dirección Moe Duff 25 Maple St Cito Quilmes 35 River Rd. Joe s Miller 27.5 Balcarce 50 Joe s Bud 25 Balcarce 50 Vende Bar
Implementar la Junta del Algebra Relacional -Map Bar Cerveza Precio Moe Duff 25 Cito Quilmes 35 Joe s Miller 27.5 Joe s Bud 25 Vende Bar Moe Cito Dirección Maple St River Rd. Joe s Balcarce 50 Bar (Bar, Moe, Maple St) (Bar, Cito, River Rd.) (Bar, Joe s, Balcarce 50) (Vende, Moe, Duff.25) (Vende, Cito, Quilmes, 35) (Vende, Joe s, Miller, 27.5) (Vende, Joe s, Bud, 25)
Implementar la Junta del Algebra Relacional -Map Bar Cerveza Precio Moe Duff 25 Cito Quilmes 35 Joe s Miller 27.5 Joe s Bud 25 Vende Bar Moe Cito Dirección Maple St River Rd. Joe s Balcarce 50 Bar (Bar, Moe, Maple St) (Bar, Cito, River Rd.) (Bar, Joe s, Balcarce 50) (Vende, Moe, Duff.25) (Vende, Cito, Quilmes, 35) (Vende, Joe s, Miller, 27.5) (Vende, Joe s, Bud, 25)
Implementar la Junta del Algebra Relacional -Map Bar Cerveza Precio Moe Duff 25 Cito Quilmes 35 Joe s Miller 27.5 Joe s Bud 25 Vende Bar Moe Cito Dirección Maple St River Rd. Joe s Balcarce 50 Bar (Bar, Moe, Maple St) (Bar, Cito, River Rd.) (Bar, Joe s, Balcarce 50) (Vende, Moe, Duff.25) (Vende, Cito, Quilmes, 35) (Vende, Joe s, Miller, 27.5) (Vende, Joe s, Bud, 25)
Implementar la Junta del Algebra Relacional -Map Bar Cerveza Precio Moe Duff 25 Cito Quilmes 35 Joe s Miller 27.5 Joe s Bud 25 Vende Bar Moe Cito Dirección Maple St River Rd. Joe s Balcarce 50 Bar (Bar, Moe, Maple St) (Bar, Cito, River Rd.) (Bar, Joe s, Balcarce 50) (Vende, Moe, Duff.25) (Vende, Cito, Quilmes, 35) (Vende, Joe s, Miller, 27.5) (Vende, Joe s, Bud, 25)
Implementar la Junta del Algebra Relacional -Map Bar Cerveza Precio Moe Duff 25 Cito Quilmes 35 Joe s Miller 27.5 Joe s Bud 25 Vende Bar Moe Cito Dirección Maple St River Rd. Joe s Balcarce 50 Bar (Bar, Moe, Maple St) (Bar, Cito, River Rd.) (Bar, Joe s, Balcarce 50) (Vende, Moe, Duff.25) (Vende, Cito, Quilmes, 35) (Vende, Joe s, Miller, 27.5) (Vende, Joe s, Bud, 25)
Implementar la Junta del Algebra Relacional -Map Bar Cerveza Precio Moe Duff 25 Cito Quilmes 35 Joe s Miller 27.5 Joe s Bud 25 Vende Bar Moe Cito Dirección Maple St River Rd. Joe s Balcarce 50 Bar (Bar, Moe, Maple St) (Bar, Cito, River Rd.) (Bar, Joe s, Balcarce 50) (Vende, Moe, Duff.25) (Vende, Cito, Quilmes, 35) (Vende, Joe s, Miller, 27.5) (Vende, Joe s, Bud, 25)
Implementar la Junta del Algebra Relacional -Map Bar Cerveza Precio Moe Duff 25 Cito Quilmes 35 Joe s Miller 27.5 Joe s Bud 25 Vende Bar Moe Cito Dirección Maple St River Rd. Joe s Balcarce 50 Bar (Bar, Moe, Maple St) (Bar, Cito, River Rd.) (Bar, Joe s, Balcarce 50) (Vende, Moe, Duff.25) (Vende, Cito, Quilmes, 35) (Vende, Joe s, Miller, 27.5) (Vende, Joe s, Bud, 25)
Implementar la Junta del Algebra Relacional - Map (Bar, Moe, Maple St) (Bar, Cito, River Rd.) (Bar, Joe s, Balcarce 50) (Vende, Moe, Duff.25) (Vende, Cito, Quilmes, 35) (Vende, Joe s, Miller, 27.5) (Vende, Joe s, Bud, 25) key= Moe values= (Bar, Moe, Maple St) key= Cito values= (Bar, Cito, River Rd.) key= Joe s values= (Bar, Joe s, Balcarce 50) key= Moe values= (Vende, Moe, Duff, 25) key= Cito values= (Vende, Cito, Quilmes,35) key= Joe s values= (Vende, Joe s, Miller,27.5) key= Joe s values= (Vende, Joe s, Bud,25)
Junta. Que hace el Reduce? key= Cito values=[ (Bar, Cito, River Rd.),(Vende, Cito, Quilmes, 35)] key= Joe s values=[ (Bar, Joe s,balcarce 50),(Vende, Joe s, Miller, 27.5),(Vende, Joe s, Bud, 25)]
Junta. Que hace el Reduce? key= Cito values=[ (Bar, Cito, River Rd.),(Vende, Cito, Quilmes, 35)] ( Cito, Quilmes, 35., River Rd) key= Joe s values=[ (Bar, Joe s,balcarce 50),(Vende, Joe s, Miller, 27.5),(Vende, Joe s, Bud, 25)]
Junta. Que hace el Reduce? key= Cito values=[ (Bar, Cito, River Rd.),(Vende, Cito, Quilmes, 35)] ( Cito, Quilmes, 35., River Rd) key= Joe s values=[ (Bar, Joe s,balcarce 50),(Vende, Joe s, Miller, 27.5),(Vende, Joe s, Bud, 25)] (Joe s, Miller, 27.5., Balcarce 50) (Joe s, Bud, 25., Balcarce 50)
Junta Resumen Sean las relaciones R(a, b) y S(b, c) computar R S Función Map Para cada tupla (a, b) de R producir el par clave-valor b, (R, a) Para cada tupla (b, c) de S producir el par clave-valor b, (S, c)
Junta Resumen Sean las relaciones R(a, b) y S(b, c) computar R S Función Map Para cada tupla (a, b) de R producir el par clave-valor b, (R, a) Para cada tupla (b, c) de S producir el par clave-valor b, (S, c) Función Reduce Para cada valor de b Recibe una lista de pares (R, a), (S, c) Produce para cada entrada una valor de la forma (a, b, c), La clave es irrelevante.
Map-Reduce: MongoDB
Map-Reduce: MongoDB
Key-Value
Origen Dynamo-Amazon Giuseppe DeCandia, et al., Dynamo: Amazon s highly available key-value store. In Proceedings of twentyfirst ACM SIGOPS symposium on Operating systems principles (SOSP 07). ACM, New York, NY, USA,
Key-Value Diccionario o array asociativo Key-Value: Namespaces o Buckets In-Memory vs On-Disk Características Simples Escalables Veloces.
Claves? Bases relacionales: Garantizar la inmutabilidad de la la clave primaria. Se usan claves sin significado. Key-Value No hay columnas, no hay manera de saber el significado de un valor excepto dándole semántica a la clave. Cart[12387] = SKUAK8912j4 CustName[12387] = Katherine Smith
Cómo construir una clave?
Cómo construir una clave? Entity Name + : + Entity Identifier + : + Entity Attribute Cliente : 12345678 : Apellido Producto : SKU110 : Nombre Dependiendo de la BD hay soporte para varios tipos en los valores. Redis soporta valores de: Strings, Lists, Sets, Sorted sets, Hashes, Bit Arrays Keys en Redis son binary safe Ojo: las claves sirven también para organizar valores en múltiples servers
Key-Value: Keys Usar nombres significativos y no ambiguos
Key-Value: Keys Usar nombres significativos y no ambiguos Usar partes basadas en rango si se necesita recuperar rangos de valores (enteros, fechas)
Key-Value: Keys Usar nombres significativos y no ambiguos Usar partes basadas en rango si se necesita recuperar rangos de valores (enteros, fechas) Usar un delimitador común ":"
Key-Value: Keys Usar nombres significativos y no ambiguos Usar partes basadas en rango si se necesita recuperar rangos de valores (enteros, fechas) Usar un delimitador común ":" Mantener las claves lo más cortas posibles sin sacrificar las otras características. define getcustattr ( p_id, p_attrname) v_key = cust + : +p_id+ : +p_attrname ; return (AppNameSpace[ v_key ] ) ; define setcustattr ( p_id, p_attrname, p_value ) v_key = cust + : +p_id+ : +p_attrname ; AppNameSpace[ v_key]=p_value
Keys en Oracle NOSQL Key Component Major components (/Smith/Bob/ o /Smith/Patricia/ ) Minor components (/birthdate o /phonenumber)
Keys en Oracle NOSQL Key Component Major components (/Smith/Bob/ o /Smith/Patricia/ ) Minor components /Smith/Bob/-/birthdate /Smith/Bob/-/phonenumber /Smith/Bob/-/image /Smith/Bob/-/userID /Smith/Patricia/-/birthdate /Smith/Patricia/-/phonenumber /Smith/Patricia/-/image /Smith/Patricia/-/userID /Wong/Bill/-/birthdate /Wong/Bill/-/phonenumber /Wong/Bill/-/image /Wong/Bill/-/userID (/birthdate o /phonenumber)
Cómo guardar Valores? String: 1232 NE River Ave, St. Louis, MO Lista: ( 1232 NE River Ave, St. Louis, MO ) JSON: { "Street" : "1232 NE River Ave", "City" : "St. Louis", " State" : "MO"} {username="userpepe", sessionid=12939 4,since=14083187,theme="bluesky"} {"type": "record","namespace": "com.example","name": " UserSession","fields": [ {"name": "username", "type": ["string","null"]}, {"name": "sessionid", "type": "int"}, {"name": "since", "type": "long"}, {"name": "theme", "type": ["string","null"]} ]}
Espacio de Nombres Espacios de nombre permiten evitar conflictos
Tiempo de Vida Venta de tickets. Guardar asientos mientras se procesa la compra.
Agregados Como almacenar agregados?
Agregados Como almacenar agregados? {"type" : "stadium", "condate" :15 Mar 2015, " locdescr " : " Springfield Civic Center", " assgnseat" : " J 38", " starttime " : "17:30", " price " : "$50.00", "perfname" : " National "} {"type" : "small venue", "condate" : 12 Jun 2015, locdescr" : "Plymoth Concert Hall ", " starttime " : "17:30", " price " : "$75.00", " perfname" : "Joshua Redman" } {"type" : "small venue", "condate" : 12 Jun 2015, locdescr" : "Plymoth Concert Hall ", "starttime " : "17:30", " price " : "$75.00", "perfname" : "Joshua Redman" }
Agregados Atómicos ConcertApp[ ticketlog :9888] = {"condate" :15 Mar 2015, "locdescr" : " Springfield Civic Center", "assgnseat" : " J 38"} Vs. ConcertApp[ ticketlog :9888:conDate] = 15 Mar 2015 ConcertApp[ ticketlog :9888: locdescr ] = " Springfield ConcertApp[ ticketlog :9888:assgnSeat ] = " J38" Civic Center"
Indices define addlocassgnseat( p_locdescr, p_seat ) begin v_seatlist = ConcertApp[ p_locdescr ] v_seatlist = append( v_seatlist, p_seat ) ConcertApp[ p_locdescr ] = v_seatlist end; Indices Muchas bases de datos key-value soportan índices. Pero sino es así: se pueden usar indices invertidos.
Ejercicio Indices Diseñar la base de datos para un twitter Se pueden usar como tipos de datos: Json, Hash, Sets HSET usuarios nombre Jhon apellido Doe HGET usuarios nombre = Jhon Se puede usar una operación: INCR key. INCR prox_id = 10
Ejercicio Indices Diseñar la base de datos para un twitter Se pueden usar como tipos de datos: Json, Hash, Sets HSET usuarios nombre Jhon apellido Doe HGET usuarios nombre = Jhon Se puede usar una operación: INCR key. INCR prox_id = 10 Qué entidades?
Ejercicio Indices Diseñar la base de datos para un twitter Se pueden usar como tipos de datos: Json, Hash, Sets HSET usuarios nombre Jhon apellido Doe HGET usuarios nombre = Jhon Se puede usar una operación: INCR key. INCR prox_id = 10 Qué entidades? Usuarios
Ejercicio Indices Diseñar la base de datos para un twitter Se pueden usar como tipos de datos: Json, Hash, Sets HSET usuarios nombre Jhon apellido Doe HGET usuarios nombre = Jhon Se puede usar una operación: INCR key. INCR prox_id = 10 Qué entidades? Usuarios Seguidores
Ejercicio Indices Diseñar la base de datos para un twitter Se pueden usar como tipos de datos: Json, Hash, Sets HSET usuarios nombre Jhon apellido Doe HGET usuarios nombre = Jhon Se puede usar una operación: INCR key. INCR prox_id = 10 Qué entidades? Usuarios Seguidores Siguiendo
Ejercicio Indices Diseñar la base de datos para un twitter Se pueden usar como tipos de datos: Json, Hash, Sets HSET usuarios nombre Jhon apellido Doe HGET usuarios nombre = Jhon Se puede usar una operación: INCR key. INCR prox_id = 10 Qué entidades? Usuarios Seguidores Siguiendo Posts
Ejercicio Indices Diseñar la base de datos para un twitter Se pueden usar como tipos de datos: Json, Hash, Sets HSET usuarios nombre Jhon apellido Doe HGET usuarios nombre = Jhon Se puede usar una operación: INCR key. INCR prox_id = 10 Qué entidades? Usuarios Seguidores Siguiendo Posts Cómo diseñar Claves?