mongodb

41
Isaac Garcia Jorge

Upload: isaac-garcia

Post on 21-Jun-2015

71 views

Category:

Technology


1 download

DESCRIPTION

Apresentação de MongoDB com uma pequena introdução ao NoSQL, comparações entre SQL Server e muito mais.

TRANSCRIPT

Page 1: MongoDB

Isaac Garcia Jorge

Page 2: MongoDB

Isaac Garcia Jorge

“Estou feliz por eles terem colocado computação nas nuvens”

Page 3: MongoDB

Problema! Crescimento exponencial de dados!

Isaac Garcia Jorge

Page 4: MongoDB
Page 5: MongoDB

Isaac Garcia Jorge

“Não somente SQL”

Page 6: MongoDB

Movimento teve inicio no começo de 2009.

“NoSQL é um movimento que promove soluções de armazenamento de dados não relacionais.” (PORCELLI, 2011)

Próxima geração de banco de dados abordando áreas como: não relacional, distribuído, open-source e escalabilidade horizontal.

Isaac Garcia Jorge

Page 7: MongoDB

Tipos:

Isaac Garcia Jorge

Page 8: MongoDB

Esse é o tipo de banco de dados NoSql mais simples, o conceito dele é uma chave e um valor para estaEle é o que aguenta mais carga de dados. Esses tipos de banco de dados são os que têm a maior escalabilidade.

Key/value (Chave/Valor):

Isaac Garcia Jorge

Page 9: MongoDB

Key/value (Chave/Valor):

Isaac Garcia Jorge

Page 10: MongoDB

Fortemente inspirados pelo BigTable do Google;Suporta várias linhas e colunas, além disso ele permite sublinhas e subcolunas;Suporta um grande numero de colunas dinamicas (linha acima);Schema-free;

Wide Colum Store (Big Table):

Isaac Garcia Jorge

Page 11: MongoDB

Wide Colum Store (Big Table):

Isaac Garcia Jorge

Page 12: MongoDB

Modalidade de banco mais complexa;Estrutura baseada em grafos, nós, pontes e etc;Guardam objetos e não registros como nos outros NoSQL;A busca destes itens são feitas pela navegação destes objetos;

Graph Store(orientado a grafo):

Isaac Garcia Jorge

Page 13: MongoDB

Graph Store(orientado a grafo):

Isaac Garcia Jorge

Page 14: MongoDB

Desenvolvido para guardar, gerenciar e manipular informações orientadas a documentos (também conhecido como data semi estruturada);Baseado em documentos XML ou JSON;Podem ser localizados pelo seu id único ou por qualquer registro que tenha no documento:

Document Store (orientado a documento):

Isaac Garcia Jorge

Page 15: MongoDB

Isaac Garcia Jorge

Document Store (orientado a documento):

Page 16: MongoDB

Capacidade/Complexidade:

Isaac Garcia Jorge

Page 17: MongoDB

Isaac Garcia Jorge

Page 18: MongoDB

Isaac Garcia Jorge

Page 19: MongoDB

C++

0101010101001010101010101100101010101010101010101010101010101010101010BSON

Isaac Garcia Jorge

Page 20: MongoDB

MongosisIntegration Services

Business Intelligence:

Isaac Garcia Jorge

Page 21: MongoDB

_idObjectId("507f1f77bcf86cd799439011")

stringnúmero (int, double, float)

…Só não pode ser tipo array [ ]

Restrições:

PS: ObjectId("507c7f79bcf86cd7994f6c0e").getTimestamp() = ISODate("2012-10-15T21:26:17Z")

Isaac Garcia Jorge

Page 22: MongoDB

Restrições:

16 MB

Isaac Garcia Jorge

Page 23: MongoDB

Vamos praticar!

Page 24: MongoDB

1) Fazer download no site: http://www.mongodb.org/downloads2) Descompactar os arquivos (preferencialmente em c:\)3) Abrir o CMD e digitar o comando >cd \[caminho onde esta o MongoDB]4) Criar uma pasta \data com as subpastas \data\db e \data\log com o comando

a) >md \data\dbb) >md \data\log

5) Criar um arquivo de configuração com a extenção .config setando, no mínimo o caminho do banco e o caminho de log

a) dbpath=c:\data\dbb) logpath=c:\data\log\mongolog.txt

6) Iniciar o serviço com o comando >net start MongoDB7) Iniciar o serviço com o comando >mongo

Instalação como serviço no Windows:

Isaac Garcia Jorge

Page 25: MongoDB

DATABASETABLEROWS

QUERYINDEX

PARTITION

DATABASECOLLECTIONDOCUMENTJSONINDEXSHARD

Isaac Garcia Jorge

Terminologia:

Page 26: MongoDB

Criação e uso de Base:

CREATE DATABASE usuario;GOUSE usuario;

>use usuario;

Isaac Garcia Jorge

Page 27: MongoDB

Criação de tabela usuários e inserção:

CREATE TABLE dbo.cetiUser{id INT IDENTITY,nome VARCHAR(100),matricula int,idade int,dataCriacao DATETIME,cep VARCHAR(10),cidade VARCHAR(50),rua VARCHAR(150),numero INT,complemento VARCHAR(100)}

INSERT INTO dbo.cetiUser VALUES('Isaac’, 2968,22, GETDATE(), '00000-000', 'RJ', 'Inoã', 123, 'casa 180')

db.cetiUser.save({"nome":"Isaac","matricula":2968,"idade":22,"endereço" : {

"cep":"00000-00",

"cidade":"RJ","rua":"Inoã",

"numero":123,

"complemento": "casa180"}});

Isaac Garcia Jorge

Page 28: MongoDB

Alteração de tabela (documento) e inserção:

Isaac Garcia Jorge

db.cetiUser.save({"nome":"Carla","matricula":3000,"sexo":"F","endereço" : {

"cep":"10000-00",

"cidade":"SP",

"rua":"Cascalhos","numero":62,

"complemento": "apto: 10"}});

ALTER TABLE dbo.cetiUserADD sexo char(1)

INSERT INTO dbo.cetiUserVALUES('Carla’, 3000, 24, GETDATE(), '10000-000', 'SP', 'Cascalhos', 62, 'apto: 10','F')

Page 29: MongoDB

Consultas:

Isaac Garcia Jorge

SELECT * FROM usuario;SELECT * FROM usuario WHERE matricula = 2968;Consulta somente com os campos nome e sexoSELECT nome, sexo FROM usuario WHERE matricula = 2968;Consulta sem os campos id e apelidoSELECT nome, dataCriacao, cep, cidade, rua, numero, complemento,FROM usuario WHERE matricula = 2968;

>db.cetiUser.find();>db.cetiUser.find({matricula: 2968});>db.cetiUser.find({matricula: 2968});Consulta somente com os campos nome e sexo:>db.cetiUser.find({matricula: 2968},{ nome:1, matricula:1});Consulta sem os campos id e apelido:>db.cetiUser.find({matricula: 2968},{ _id:0, apelido:0});

Page 30: MongoDB

Consultas:

Isaac Garcia Jorge

SELECT * FROM usuario WHERE nome;LIKE (‘*isaac*’)

>db.cetiUser.find({nome: /Isaac*/i});>db.cetiUser.find({nome : { $regex : 'Isaac*'}});

Page 31: MongoDB

Exclusão:

Isaac Garcia Jorge

Apaga toda a tabela:DELETE FROM usuario

Apaga com condição:DELETE FROM usuario WHERE nome = ‘Isaac’

Apaga toda a tabela:>db.cetiUser.remove();Apaga com condição:>db.cetiUser.remove({nome: "Carla"});

Page 32: MongoDB

Operadores ($gt, $gte, $lt, $lte):

Isaac Garcia Jorge

SELECT * FROM usuario WHERE idade;> 22SELECT * FROM usuario WHERE idade;>= 22SELECT * FROM usuario WHERE idade;< 24SELECT * FROM usuario WHERE idade;<= 24

>db.cetiUser.find({idade: {$gt: 22}});>db.cetiUser.find({idade: {$gte: 22}});>db.cetiUser.find({idade: {$lt: 24}});>db.cetiUser.find({idade: {$lte: 24}});

Page 33: MongoDB

$all - retorna o objeto onde todos os valores foram encontrados$exists - retorna o objeto caso uma chave exista$or - retorna o objeto caso a cláusula OU for verdadeira$and - retorna o objeto caso a cláusula E for verdadeira$type - retorna o objeto caso a chave seja do tipo especificado para conferir a lista dos tipos e seus valores $ne (not equal) - retorna o objeto onde o valor não foi encontrado$in - retorna o objeto se o valor foi encontrado$nin (not in) - retorna o objeto se nenhum dos valores foi encontrado$nor (not or) - retorna o objeto caso a cláusula negação do OU for verdadeira$mod - retorna o objeto quando o módulo de um valor for encontrado

Outros operadores:

Isaac Garcia Jorge

Page 34: MongoDB

Consultas ordenadas:

Isaac Garcia Jorge

SELECT * FROM usuario WHERE nome;ASCSELECT * FROM usuario WHERE nome;DESC

>db.cetiUser.find().sort({nome:1});>db.cetiUser.find().sort({nome:-1});

Page 35: MongoDB

Alteração:

Isaac Garcia Jorge

UPDATE cetiUser SET idade = 28 WHERE matricula = 2968SELECT * FROM usuario WHERE nome;DESC

> usuario = db.cetiUser.findOne({matricula: 2968});> usuario.idade = 28> db.cetiUser.save(usuario);======================================================> db.cetiUser.update({matricula: 2968},{$set: {matricula: 2900}});

Page 36: MongoDB

Criação de index:

Isaac Garcia Jorge

CREATE INDEX usuario_nome_index ON usuario (nome)

> db.cetiUser.ensureIndex({nome:1});> db.cetiUser.ensureIndex({nome:1,idade:1});

Page 37: MongoDB

> mongoimport --db [nome do banco] --collection [nome da collection] --file [camino]

Importação de dados de arquivo externo:

Isaac Garcia Jorge

Page 38: MongoDB

> mongo [caminho do arquivo js] --shell

Executar script antes de alguma ação:

Isaac Garcia Jorge

Page 39: MongoDB

Isaac Garcia Jorge

Page 40: MongoDB

Isaac Garcia Jorge

Page 41: MongoDB

Franklin (velho)(edição das imagens)

Isaac Garcia Jorge

Agradecimentos:

Mauricio Martins(Business Intelligence)