Introducción a NoSQL con MongoDB

Post on 22-Nov-2014

5.005 views 6 download

description

Introducción a NoSQL y a MongoDB.Charla dada en el Gulev 2010 en Veracruz, México.

Transcript of Introducción a NoSQL con MongoDB

NoSQL con MongoDBErick Camacho@ecamacho

erick.camacho@tidyslice.com

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

LinkedIn

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