introducción a nosql con mongodb
DESCRIPTION
Introducción a NoSQL y a MongoDB.Charla dada en el Gulev 2010 en Veracruz, México.TRANSCRIPT
NoSQL con MongoDBErick Camacho@ecamacho
1
Agenda
• ¿Por qué?
• ¿Cómo?
• Opciones
• Mongo
2
Si tienes un martillo...
3
todo parece un clavo
4
NoSQL es acerca de elegir la
herramienta adecuada.
5
Motivaciones
6
El performance es el Rey
7
El acceso a datos es el principal cuello de
botella
8
¿Cómo escalas un RDBMS?
9
Escalamiento Vertical• Más recursos para el servidor: CPU, RAM,
interfaces de red, etc.
10
Escalamiento Vertical
!
"#$%&'%! "#$%&'%!
!"#$%&$%
&"'(#%
)$*+,-(*%-$%./0,1"1,(2$#%
11
Escalamiento Vertical
!
"#$%&'%! "#$%&'%!
!"#$%&$%
&"'(#%
)$*+,-(*%-$%./0,1"1,(2$#%
!
"#$%&'%! "#$%&'%!
!"#$%&$%
&"'(#%
"#$%&'%! "#$%&'%! "#$%&'%!
)$*+,-(*%-$%./0,1"1,(2$#%
)$*+,-(*%-$%./0,1"1,(2$#%
)$*+,-(*%-$%./0,1"1,(2$#%
11
Escalamiento Vertical
!
"#$%&'%! "#$%&'%!
!"#$%&$%
&"'(#%
)$*+,-(*%-$%./0,1"1,(2$#%
!
"#$%&'%! "#$%&'%!
!"#$%&$%
&"'(#%
"#$%&'%! "#$%&'%! "#$%&'%!
)$*+,-(*%-$%./0,1"1,(2$#%
)$*+,-(*%-$%./0,1"1,(2$#%
)$*+,-(*%-$%./0,1"1,(2$#%
11
Escalamiento vertical
• Limitado por hardware
• Arquitectura con problemas de bottlenecks
12
Escalamiento Horizontal
• Las RDBMS no se adaptan a esta arquitectura
• ¿TX distribuidas? Muy costosas
• ¿Cómo distribuyes las escrituras?
• ¿Shardening?
• ¿Desnormalización?
13
Escalamiento horizontal
• Replicación Maestro - Esclavo
• Replicación Maestro (escrituras)- MultiEsclavos (lecturas)
• Replicación MultiMaestro (shardening)
14
Escalamiento Horizontal
• ¿Qué pasa con las escrituras?
• ¿Cómo escalas las transacciones?
• ¿y el shardening?
15
¿Todo dominio es relacional?
16
¿Todo debe ser transaccional?
• A: Atomicity
• C: Consistency
• I: Isolated
• D: Durability
17
Teorema CAP! "#$%&%'($)*!
+,-&.-/&.&'*! 0-1'&'&#$!2#.(1-$)(!
18
Teorema CAP! "#$%&%'($)*!
+,-&.-/&.&'*! 0-1'&'&#$!2#.(1-$)(!
! "#$%&!
18
NoSQL: tú decides
19
NoSQL: tú decides
Pensar es difícil19
Categorías de soluciones NoSQL
20
Orientadas a Objetos
• El tipo más viejo (1980’s)
• Permite herencia entre tablas, polimorfismo.
• Lenguaje de consulta orientado a objetos.
• Ha influenciado la evolución de las RDBMS (sql 99, Oracle, Postgres, etc).
21
Orientadas a Objetos
22
Key-Value
• Sólo almacenan dos cosas: 1 campo clave asociado a 1 dato binario.
• Operaciones Put, Get, Delete.
• Piensa en una HashTable distribuida.
• Todo en memoria, algunas persisten a disco de forma asíncrona.
• Útil como cache en combinación con una RDBMS.
23
Key - Value
Proyecto Voldemort
WordpressYoutubeTwitter
CraiglistGitHub
The Guardian
memcached
Redis
24
Key - Value
• Muy útiles para entornos distribuidos.
• Alto performance.
• Lenguaje de consulta muy pobre. Requiere procesamiento externo de los datos.
25
Orientadas a documentos
• Iguales a las Key - Value, pero el dato no es binario.
• Debe ser un formato que el servidor entienda: XML, JSON, BSON..
• Permite consultas más complejas sobre atributos.
• Son usadas como sustituto de las RDBMS.
26
Orientadas a documento
foursquaresourceForge
Justin.tv
SimpleDB
27
Orientadas a columnas
• La información se representa en columnas.
• Mayor rapidez para consultas sobre pocas columnas.
• Mayor rapidez para agregados.
• Peor performance para escrituras.
28
Orientadas a columnas
29
Orientadas a columnas
29
Orientadas a columnas
29
Orientadas a Columnasfacebooktwitter
diggreddit
BigTable
30
Orientadas a Grafos
• Datos como nodos y relaciones.
• Las relaciones pueden ser bidireccionales y tener atributos.
• Permite hacer consultas complejas a relaciones.
• Permite gran velocidad de recorrido de las relaciones.
31
Orientadas a Grafos
32
¿Cuál usar?
33
¿Cuál usar?
Depende de tus requerimientos
33
Nathan Hursthttp://blog.nahurst.com/visual-guide-to-nosql-systems
34
¿Y si tenemos de varios tipos en una misma
aplicación?
35
• Orientado a Documento.
• Usa el formato BSON: Binary JSON.
• Permite consultas muy avanzadas.
• Preparado para escalar horizontalmente.
• Open source con soporte comercial con 10Gen.
36
DEMO
37
Preguntas
38