Dinamic area formación mongodb

Post on 14-Aug-2015

283 views 6 download

Transcript of Dinamic area formación mongodb

Diapositiva: 1

Fernando Ortega :: Responsable I+D

fernando.ortega@dinamicarea.com +34 680 311 676

Formación MongoDB PISCIS

Diapositiva: 2

Diapositiva: 3

1. Introducción

2. Instalación y configuración

3. Operaciones de consulta

4. Operaciones de actualización

5. Índices

6. Aggregation Framework

7. MapReduce

8. MongoDB y Java

3

Diapositiva: 4

1. Introducción

2. Instalación y configuración

3. Operaciones de consulta

4. Operaciones de actualización

5. Índices

6. Aggregation Framework

7. MapReduce

8. MongoDB y Java

4

Diapositiva: 5

NoSQWhat??? 1

- In

tr

od

uc

ció

n

5

Diapositiva: 6

Not Only SQL 1

- In

tr

od

uc

ció

n

6

Diapositiva: 7

Teorema CAP 1

- In

tr

od

uc

ció

n

7

Diapositiva: 8

RDBMS 1

- In

tr

od

uc

ció

n

8

Estándar SQL

ACID

Esquema fijo

Modelo de datos de tablas y

columnas

Difícil de escalar

Atomicidad de

transacciones

Diapositiva: 9

NoSQL 1

- In

tr

od

uc

ció

n

9

Múltiples soluciones

BASE

Esquema flexible

Múltiples modelos de datos

Orientado a la escalabilidad

Menor preocupación por

transacciones

Diapositiva: 10

Cuál usamos 1

- In

tr

od

uc

ció

n

10

Diapositiva: 11

Depende… 1

- In

tr

od

uc

ció

n

11

“Puedes poner un tornillo usando un martillo pero lo

ideal es utilizar un destornillador”

Diapositiva: 12

Tipos Básicos de NoSQL

Clave-Valor Documentos

Grafos Columnas

1 -

In

tr

od

uc

ció

n

12

Diapositiva: 13

Tipo Documentos 1

- In

tr

od

uc

ció

n

13

El documento es la unidad

de almacenamiento

Colecciones contienen

documentos

Colecciones ~= Tablas

No hay esquema

predefinido

JSON o XML

Diapositiva: 14

Historia de MongoDB Diseñado y desarrollado por los fundadores de DoubleClick,

ShopWiki, GILT Groupe, etc…

2007 – Inicio de la implementación

2008 – Primer sitio en producción: businessinsider.com

Código abierto (C++) – AGPL

2009 – Versión 1.0

2011 – Versión 2.0

2015 – Versión 3.0

1 -

In

tr

od

uc

ció

n

14

Diapositiva: 15

MongoDB 1

- In

tr

od

uc

ció

n

15

Orientada a documentos

• BSON -> Binary JSON

• Esquema flexible

Arquitectura escalable

• Auto-sharding

• Replicación y alta

disponibilidad

Otras características

• Índices secundarios

• Lenguaje de consulta

• MapReduce

Diapositiva: 16

Ejemplo CLIENTES

{

“Cliente” : 123,

“Nombre” : “Pepe Jiménez”,

“Dirección” : “Calle A nº 13”,

“ultimo_pedido”:

{

“id_pedido” : 2,

“Productos” :

[

{

“id_producto” : 43,

“Nombre”:”Impresora Láser”,

“Fabricante” : “Canon”,

“Cantidad” : 4

}

]

}

}

16

PEDIDOS {

"id_pedido":1,

},

{

"id_pedido": 2,

"id_cliente":1233,

"Dirección":" Calle A nº 13",

"Productos":

[

{

"id_producto":43,

"Nombre":"Impresora Láser",

"Fabricante":"Canon",

"Cantidad": 4

}

]

}

Diapositiva: 17

1. Introducción

2. Instalación y configuración

3. Operaciones de consulta

4. Operaciones de actualización

5. Índices

6. Aggregation Framework

7. MapReduce

8. MongoDB y Java

17

Diapositiva: 18

Descarga e instalación

https://www.mongodb.org/downloads (v2.6.1)

Seleccionar S.O.

Seleccionar los componentes y ruta a instalar

while (!fin) { fin = siguiente();}

Configurar ruta por defecto de la base de datos

2 -

In

sta

lac

ión

y

c

on

fig

ur

ac

ión

18

Diapositiva: 20

Ejemplo de configuración 2

- In

sta

lac

ión

y

c

on

fig

ur

ac

ión

20

Diapositiva: 21

Ejecución de MongoDB 2

- In

sta

lac

ión

y

c

on

fig

ur

ac

ión

21

mongod: Proceso demonio

para ejecutar MongoDB

Gestiona peticiones, acceso

a datos y operaciones en

background.

Algunas opciones básicas:

• --help

• --version

• --config <filename>

• --verbose

• --port

• --httpinterface

Diapositiva: 22

Instalación como servicio 1. Crear un directorio para guardar el log de eventos:

mkdir databases\db1\logs

2. Crear un directorio para la configuración de la base de datos:

mkdir databases\db1\cfg

3. Crear un fichero mongod.cfg:

logpath=d:\software\mongodb\databases\db1\logs\mongo.log

port=27666

Dbpath=d:\software\mongodb\databases\db1

4. Ejecutar el siguiente comando como administrador con PowerShell :

mongod --config “d:\software\mongodb\databases\db1\cfg\mongod.cfg” -install

2 -

In

sta

lac

ión

y

c

on

fig

ur

ac

ión

22

Diapositiva: 23

Replicación 2

- In

sta

lac

ión

y

c

on

fig

ur

ac

ión

23

Diapositiva: 24

Replicación 2

- In

sta

lac

ión

y

c

on

fig

ur

ac

ión

24

Diapositiva: 25

Sharding – Baraja de cartas 2

- In

sta

lac

ión

y

c

on

fig

ur

ac

ión

25

Diapositiva: 26

Estado inicial 2

- In

sta

lac

ión

y

c

on

fig

ur

ac

ión

26

Jugador 1

Jugador 2

Jugador 3

Jugador 4

Crupier

{}

{} {}

{}

{12,1,9,10,7,8,6,11,2,6,

3,3,12,5,8,5,8,10,3,4,1

2,11,6,4,6,1,1,7,2,7,11,

8,3,5,1,5,9,11,4,9,2,7,1

2,9,10,4,10,2}

Diapositiva: 27

Primer reparto 2

- In

sta

lac

ión

y

c

on

fig

ur

ac

ión

27

Jugador 1

Jugador 2

Jugador 3

Jugador 4

Crupier

{12,1,9,10,7,8,

6,11,2,6,3,3}

{} {}

{}

{12,5,8,5,8,10,3,4,12,1

1,6,4,6,1,1,7,2,7,11,8,3,

5,1,5,9,11,4,9,2,7,12,9,

10,4,10,2}

Diapositiva: 28

Ordenación y división 2

- In

sta

lac

ión

y

c

on

fig

ur

ac

ión

28

Jugador 1

Jugador 2

Jugador 3

Jugador 4

Crupier

{1,2,3,3,6,6}

{7,8,9,10,11,12}

{} {}

{}

{12,5,8,5,8,10,3,4,12,1

1,6,4,6,1,1,7,2,7,11,8,3,

5,1,5,9,11,4,9,2,7,12,9,

10,4,10,2}

Diapositiva: 29

Movimiento de cartas 2

- In

sta

lac

ión

y

c

on

fig

ur

ac

ión

29

Jugador 1

Jugador 2

Jugador 3

Jugador 4

Crupier

{1,2,3,3,6,6}

{7,8,9,10,11,12} {}

{}

{12,5,8,5,8,10,3,4,12,1

1,6,4,6,1,1,7,2,7,11,8,3,

5,1,5,9,11,4,9,2,7,12,9,

10,4,10,2}

Diapositiva: 30

Seguimos repartiendo 2

- In

sta

lac

ión

y

c

on

fig

ur

ac

ión

30

Jugador 1

Jugador 2

Jugador 3

Jugador 4

Crupier

{1,2,3,3,6,6,5,5

,3,4}

{7,8,9,10,11,12,

12,8,8,10,12,11}

{}

{}

{6,4,6,1,1,7,2,7,11,8,3,

5,1,5,9,11,4,9,2,7,12,9,

10,4,10,2}

Diapositiva: 31

Volvemos a dividir y mover 2

- In

sta

lac

ión

y

c

on

fig

ur

ac

ión

31

Jugador 1

Jugador 2

Jugador 3

Jugador 4

Crupier

{1,2,3,3,3,4}

{5,5,6,6}

{7,8,8,8}

{9,10, 10,11,11,12,

12, 12}

{}

{}

{6,4,6,1,1,7,2,7,11,8,3,

5,1,5,9,11,4,9,2,7,12,9,

10,4,10,2}

Diapositiva: 32

Volvemos a dividir y mover 2

- In

sta

lac

ión

y

c

on

fig

ur

ac

ión

32

Jugador 1

Jugador 2

Jugador 3

Jugador 4

Crupier

{1,2,3,3,3,4}

{5,5,6,6,7,8,

8,8}

{9,10,10,11,11,12

,12, 12}

{}

{6,4,6,1,1,7,2,7,11,8,3,

5,1,5,9,11,4,9,2,7,12,9,

10,4,10,2}

Diapositiva: 33

Repetimos hasta el final 2

- In

sta

lac

ión

y

c

on

fig

ur

ac

ión

33

Jugador 1

Jugador 2

Jugador 3

Jugador 4

Crupier

{1,1,1,1,

2,2,2,2,

3,3,3,3}

{4,4,4,4,

5,5,5,5,

6,6,6,6}

{7,7,7,7,

8,8,8,8,

9,9,9,9}

{10,10,10,10,

11,11,11,11,

12,12,12,12}

{}

Diapositiva: 34

Sharding – Conceptos 2

- In

sta

lac

ión

y

c

on

fig

ur

ac

ión

34

Escalabilidad horizontal

Shard-key: Campo indexado

MongoDB divide los valores

en chunks que se distribuyen en los shards

Estrategias:

• Hash

• Range

Procesos principales:

• Splitting

• Balancing

Diapositiva: 35

1. Introducción

2. Instalación y configuración

3. Operaciones de consulta

4. Operaciones de actualización

5. Índices

6. Aggregation Framework

7. MapReduce

8. MongoDB y Java

35

Diapositiva: 36

Tipos de datos básicos String: guardados en UTF-8. Van siempre entre dobles comillas.

Number: números. Al guardarse en BSON pueden ser de tipo byte,

int32, in64 o double.

Date: fecha almacenada como int64 que representa el número de

millisegundos desde el 1 de enero de 1970

ObjectId: 12 bytes que se utilizan como identificador único de

documento

Boolean: con valor true o false.

Array: van entre corchetes [] y pueden contener de 1 a N elementos,

que pueden ser de cualquiera de los otros tipos.

Documentos: un documento en formato JSON puede contener otros

documentos embebidos que incluyan más documentos o cualquiera de

los tipos anteriormente descritos.

Null.

3 -

O

pe

ra

cio

ne

s d

e c

on

su

lta

36

Diapositiva: 37

Dot Notation 3

- O

pe

ra

cio

ne

s d

e c

on

su

lta

37

Acceso:

• Elementos de array

• Campos de documento

embebido

Se puede utilizar en las

consultas db.col.find({

“product.name” : “Canon C234”

})

Se puede utilizar en las

actualizaciones db.col.update({

“product.type” : “printer”,

$set:{“product.info” : “Por determinar”}

})

Se puede combinar con el

operador $

Diapositiva: 38

Consola de MongoDB 3

- O

pe

ra

cio

ne

s d

e c

on

su

lta

38

help

show dbs

use <nombre de base de datos>

show collections

show users

show databases

show profile

db.<método>

db.<colección>.<método>

Diapositiva: 39

find

Es la operación básica de lectura

Ejemplo de uso (comparado con MySQL):

3 -

O

pe

ra

cio

ne

s d

e c

on

su

lta

39

Diapositiva: 40

findOne

El comando findOne tiene el mismo funcionamiento que el

comando find, con la diferencia de que si el comando

encuentra más de un resultado que cumpla las condiciones de

la consulta, tan solo nos devolverá el primero.

3 -

O

pe

ra

cio

ne

s d

e c

on

su

lta

40

Diapositiva: 41

pretty 3

- O

pe

ra

cio

ne

s d

e c

on

su

lta

41

Diapositiva: 42

Operadores de consulta 3

- O

pe

ra

cio

ne

s d

e c

on

su

lta

42

Diapositiva: 43

Comparación 3

- O

pe

ra

cio

ne

s d

e c

on

su

lta

43

$eq

$gt

$gte

$lt

$lte

$ne

$in

$nin

Diapositiva: 44

Lógicas 3

- O

pe

ra

cio

ne

s d

e c

on

su

lta

44

$or

$and

$not

$nor

Diapositiva: 45

Elementos 3

- O

pe

ra

cio

ne

s d

e c

on

su

lta

45

$exists

$type

Diapositiva: 46

Evaluación 3

- O

pe

ra

cio

ne

s d

e c

on

su

lta

46

$mod

$regex

$text

$where

Diapositiva: 47

Geoespacial 3

- O

pe

ra

cio

ne

s d

e c

on

su

lta

47

$geoWithin

$geoIntersects

$near

$nearSphere

Diapositiva: 48

Array 3

- O

pe

ra

cio

ne

s d

e c

on

su

lta

48

all

elemMatch

size

Diapositiva: 49

Operadores de proyección 3

- O

pe

ra

cio

ne

s d

e c

on

su

lta

49

Diapositiva: 50

Operadores de proyección 3

- O

pe

ra

cio

ne

s d

e c

on

su

lta

50

Diapositiva: 51

Operadores de proyección 3

- O

pe

ra

cio

ne

s d

e c

on

su

lta

51

$ -> arrays

$elemMatch

$meta

$slice

Diapositiva: 52

Modificadores del cursor 3

- O

pe

ra

cio

ne

s d

e c

on

su

lta

52

Diapositiva: 53

Modificadores del cursor 3

- O

pe

ra

cio

ne

s d

e c

on

su

lta

53

batchSize

count

explain

forEach

hint

limit

max

min

next

pretty

size

skip

sort

toArray

Diapositiva: 54

1. Introducción

2. Instalación y configuración

3. Operaciones de consulta

4. Operaciones de actualización

5. Índices

6. Aggregation Framework

7. MapReduce

8. MongoDB y Java

54

Diapositiva: 55

insert 4

- O

pe

ra

cio

ne

s d

e a

ctu

ali

za

ció

n

55

Diapositiva: 56

insert 4

- O

pe

ra

cio

ne

s d

e a

ctu

ali

za

ció

n

56

Diapositiva: 57

multi-insert 4

- O

pe

ra

cio

ne

s d

e a

ctu

ali

za

ció

n

57

Diapositiva: 58

save ~= insert 4

- O

pe

ra

cio

ne

s d

e a

ctu

ali

za

ció

n

58

Tras save sobre el mismo _id no devuelve error sino que actualiza

Diapositiva: 59

remove 4

- O

pe

ra

cio

ne

s d

e a

ctu

ali

za

ció

n

59

Diapositiva: 60

update 4

- O

pe

ra

cio

ne

s d

e a

ctu

ali

za

ció

n

60

Diapositiva: 61

update 4

- O

pe

ra

cio

ne

s d

e a

ctu

ali

za

ció

n

61

Diapositiva: 62

Operadores de update 4

- O

pe

ra

cio

ne

s d

e a

ctu

ali

za

ció

n

62

$inc

$mul

$rename

$setOnInsert

$set

$unset

$min

$max

$currentDate

Diapositiva: 63

Operadores de arrays 4

- O

pe

ra

cio

ne

s d

e a

ctu

ali

za

ció

n

63

$

$addToSet

$pop

$pullAll

$pull

$push

Diapositiva: 64

Modificadores 4

- O

pe

ra

cio

ne

s d

e a

ctu

ali

za

ció

n

64

$each

$slice

$sort

$position

Diapositiva: 65

1. Introducción

2. Instalación y configuración

3. Operaciones de consulta

4. Operaciones de actualización

5. Índices

6. Aggregation Framework

7. MapReduce

8. MongoDB y Java

65

Diapositiva: 66

Qué son los índices 5

- Ín

dic

es

66

Diapositiva: 67

Creación de índices 5

- Ín

dic

es

67

Diapositiva: 68

Tipos

Default _id

Single Field

Compound Index

Multikey Index

Geospatial Index

Text Indexes

Hashed Indexes

5 -

Ín

dic

es

68

Diapositiva: 69

Single Field 5

- Ín

dic

es

69

Diapositiva: 70

Compound Index 5

- Ín

dic

es

70

Diapositiva: 71

Multikey Index 5

- Ín

dic

es

71

Diapositiva: 72

Geospatial Index 5

- Ín

dic

es

72

Diapositiva: 73

Opciones 5

- Ín

dic

es

73

Unique

Sparse

TTL indexes

Diapositiva: 74

Ordenación 5

- Ín

dic

es

74

Es muy importante especificar el orden para índices

compuestos ya que de ello depende que el índice se cree

facilitando el orden habitual de consulta.

Diapositiva: 75

Consultas cubiertas 5

- Ín

dic

es

75

Campos de

consulta

Campos devueltos

Índice

Diapositiva: 76

Borrado y actualización 5

- Ín

dic

es

76

Eliminar índices

• Para eliminar un índice utilizaremos el comando dropIndex

como se explica en el siguiente ejemplo.

db.products.dropIndex( { "name": 1 }

Regenerar índices

• Al igual que sucede en las bases de datos relacionales

puede ser necesario recrear de nuevo un índice. Para ello

utilizaremos el comando reIndex

db.products.reIndex()

Diapositiva: 77

1. Introducción

2. Instalación y configuración

3. Operaciones de consulta

4. Operaciones de actualización

5. Índices

6. Aggregation Framework

7. MapReduce

8. MongoDB y Java

77

Diapositiva: 78

De un vistazo 6

- A

gg

re

ga

tio

n F

ra

me

wo

rk

78

Diapositiva: 79

Stage operators 6

- A

gg

re

ga

tio

n F

ra

me

wo

rk

79

$project

$match

$redact

$limit

$skip

$unwind

$group

$sort

$geoNear

$out

Diapositiva: 80

Expressions Boolean

•$and

•$or

•$not

Set operators

•setEquals

•setIntersection

•setUnion

•setDifference

•setIsSubset

•anyElementTrue

•allElementsTrue

6 -

A

gg

re

ga

tio

n F

ra

me

wo

rk

80

Diapositiva: 81

Expressions II 6

- A

gg

re

ga

tio

n F

ra

me

wo

rk

81

Comparison Operators

•$cmp

•$eq

•$gt

•$gte

•$lt

•$lte

•$ne

Arithmetic Operators

•$add

•$subtract

•$multiply

•$divide

•$mod

Diapositiva: 82

Expressions III String Operators

•$concat

•$substr

•$toLower

•$toUpper

•$strcasecmp

Text Search -> $meta

Array -> $size

Variable

•$map

•$let

Literal -> $literal

6 -

A

gg

re

ga

tio

n F

ra

me

wo

rk

82

Diapositiva: 83

Expressions IV Date

•$dayOfYear

•$dayOfMonth

•$dayOfWeek

•$year

•$month

•$week

•$hour

•$minute

•$second

•$millisecond

•$dateToString

Conditional

•$cond

•$ifNull

6 -

A

gg

re

ga

tio

n F

ra

me

wo

rk

83

Diapositiva: 84

Accumulators

$sum

$avg

$first

$last

$max

$min

$push

$addToSet

6 -

A

gg

re

ga

tio

n F

ra

me

wo

rk

84

Diapositiva: 85

Algunos ejemplos 6

- A

gg

re

ga

tio

n F

ra

me

wo

rk

85

Diapositiva: 86

Algunos ejemplos II 6

- A

gg

re

ga

tio

n F

ra

me

wo

rk

86

Diapositiva: 87

1. Introducción

2. Instalación y configuración

3. Operaciones de consulta

4. Operaciones de actualización

5. Índices

6. Aggregation Framework

7. MapReduce

8. MongoDB y Java

87

Diapositiva: 88

Qué es MapReduce 7

- M

ap

Re

du

ce

88

Diapositiva: 89

Javascript para todo… 7

- M

ap

Re

du

ce

89

Diapositiva: 90

Javascript para todo… db.people.mapReduce(map,reduce,{out:‘map_reduce_result’})

7 -

M

ap

Re

du

ce

90

Diapositiva: 91

1. Introducción

2. Instalación y configuración

3. Operaciones de consulta

4. Operaciones de actualización

5. Índices

6. Aggregation Framework

7. MapReduce

8. MongoDB y Java

91

Diapositiva: 92

MongoDB Java Driver 8

- M

on

go

DB

y

J

av

a

92

Diapositiva: 93

Spring Data for MongoDB 8

- M

on

go

DB

y

J

av

a

93

Diapositiva: 94

Muchas gracias por su atención

94