35
Introdução aos bancos não- relacionais com MongoDB Unidev 1ª edição

Introducao aos bancos_nao_relacionais_com_mongodb

Embed Size (px)

Citation preview

Page 1: Introducao aos bancos_nao_relacionais_com_mongodb

Introdução aos bancos não-relacionais com MongoDB

Unidev 1ª edição

Page 2: Introducao aos bancos_nao_relacionais_com_mongodb

Quem sou eu

• Estagiário na SecrelNet;

• Desenvolvedor há 8 anos;

• Membro preguiçoso de comunidades;

• Apaixonado pelo que faço;

Eu com Jon "Maddog" Hall, CTO da Linux International

Page 3: Introducao aos bancos_nao_relacionais_com_mongodb

Primeiro, vamos recapitular o que são bancos de dados relacionais

Page 4: Introducao aos bancos_nao_relacionais_com_mongodb
Page 5: Introducao aos bancos_nao_relacionais_com_mongodb
Page 6: Introducao aos bancos_nao_relacionais_com_mongodb

Bancos grandes demais se tornam dificeis de se

manter

Page 7: Introducao aos bancos_nao_relacionais_com_mongodb

Filosofia A.C.I.D

•Atomicity (Atômicidade)

•Consistency (Consistência)

• Isolation (Isolado)

•Durability (Durável)

* Bancos de dados precisam ser constantemente normalizados.

Page 8: Introducao aos bancos_nao_relacionais_com_mongodb

SQL (Structured Query Language)

• Criada pela IBM em 1974

• Usada por todos os bancos relacionais

• Realiza todos os tipos de operações em um banco de dados

• Consultas mal escritas podem acarretar em gargalo

Page 9: Introducao aos bancos_nao_relacionais_com_mongodb

Revisão feita, agora vamos ver como são os banco não-relacionais

Page 10: Introducao aos bancos_nao_relacionais_com_mongodb

Um pouco de historia....

• Termo NoSQL criado 1998 por Carlo Strozzi

• Carlo Stozzi considerava o SQL:

• Muito complexo

• Pouco portábil

• Limitado

• Com uma fraca usabilidade

• Criou a própria linguagem baseado em Operator-Stream Paradigm (Pipe)

Carlo StrozziUtilizava-se de recursos como AWK, Perl e Grep para se

realizar a busca

Page 11: Introducao aos bancos_nao_relacionais_com_mongodb

No começo do NoSQL..

As tabelas eram arquivos textos separados por tab

Uso de redirecionamento à esquerda para leitura dos dados

Page 12: Introducao aos bancos_nao_relacionais_com_mongodb

Um pouco de historia....

• Em 2004 foi lançado o BigTable pela Google. Seguido pelo Dynamo (Amazon) em 2007 e pelo Cassandra (Facebook) em 2008

• Em 2009 foi realizado o primeiro grande evento de bancos NoSQL em San Fracisco, patrocinado pela Last.FM com parceria com Facebook e Linkedin

• Também recebeu o nome de NoREL (Not Relational)

Programação 1º grande evento de NoSQL

Page 13: Introducao aos bancos_nao_relacionais_com_mongodb

Um pouco de historia....

Em 2008 usando MySQL (banco relacional) o Twitter ficou 84 horas offline ao decorrer do ano. Já em 2009 após migrar para Cassandra esse tempo caiu

para 23 horas e 45 minutos.

Fonte: http://bit.ly/1yZ0cEn (Computer World)

Fonte: http://bit.ly/1aZA0Or (InfoWorld)

Page 14: Introducao aos bancos_nao_relacionais_com_mongodb

Hoje existe uma variedade de bancos NoSQL

Page 15: Introducao aos bancos_nao_relacionais_com_mongodb

Agora vamos falarde coisa boa, vamos falar de

Page 16: Introducao aos bancos_nao_relacionais_com_mongodb

• Lançado em Fevereiro de 2009 pela 10gen (hoje Mongo Inc.)

• Escrito em C++

• Opensource (código-aberto)

• Surgiu da palavra homongous (gigantesco)

• Orientado à documentos

• Mais de 9 milhões de downloads desde seu lançamento

Page 17: Introducao aos bancos_nao_relacionais_com_mongodb

Quem utiliza?

Page 18: Introducao aos bancos_nao_relacionais_com_mongodb

Schemas

• Utilizasse de BSON (Binary JSON)

Exemplo de JSON

Page 19: Introducao aos bancos_nao_relacionais_com_mongodb

Beleza, beleza. Já entendi maaaaas....

Page 20: Introducao aos bancos_nao_relacionais_com_mongodb

Bancos Relacionais x MongoDB

• MongoDB não possui nenhum tipo de relacionamento entre seus documentos

• Segue o modelo BASE (Basically Available, Soft state, Eventual consistency):

• Disponível o tempo inteiro

• Disponível em estado leve

• Eventualmente consistente

• Facilmente escalonável

Page 21: Introducao aos bancos_nao_relacionais_com_mongodb

Motivo 1: Evita "Alter Tables"

• Documentos não precisam seguir ter os mesmos atributos

• Como se cada linha da tabela fosse "independente"

• É função no DBA garantir que essa liberdade não vire bagunça

Page 22: Introducao aos bancos_nao_relacionais_com_mongodb

Motivo 2: Auto-sharding

• Consiste em utilizar mais de uma máquina para rodar todo o Banco de Dados

• Processo trás uma série de vantagens:

• Otimiza o tempo das consultas

• Caso alguma das máquinas tenha problema

• MongoDB possui sistemas de sharding automático

Page 23: Introducao aos bancos_nao_relacionais_com_mongodb

Motivo 2: Auto-sharding

Page 24: Introducao aos bancos_nao_relacionais_com_mongodb

Motivo 3: Ótimo para Big Data

• O protocolo mais utilizado hoje por Web Services é o JSON

• Acaba evitando ORM (Object-Relational Mapping) em diversas situações

Page 25: Introducao aos bancos_nao_relacionais_com_mongodb

Motivo 4: Simples porém Robusto

• BSON Query relativamente simples

• Não há preocupação com relacionamentos

• Ideal para iniciantes em NoSQL

Page 26: Introducao aos bancos_nao_relacionais_com_mongodb

Iniciando no

Page 27: Introducao aos bancos_nao_relacionais_com_mongodb

Instalando o

Via linha de comando: (linhas de comando são legais)

Usuários de Linux baseados em Debian/Ubuntu:

Usuários de Linux baseados em RedHat/Fedora/CentOS:

Usuários de MacOSX:

Usuários de NPM (todos os Sistemas Operacionais) *Recomendado

Page 28: Introducao aos bancos_nao_relacionais_com_mongodb

Instalando o

Via linha de comando: (linhas de comando são legais)

Para usuários de Windows via Chocolatey:

Ou baixando diretamente do site xDhttps://www.mongodb.org/downloads

Page 29: Introducao aos bancos_nao_relacionais_com_mongodb

Instalando cliente gráfico

http://robomongo.org/

Page 30: Introducao aos bancos_nao_relacionais_com_mongodb

Inicializando o Mongo

1º passo: Inicialização do servidor do Mongo

2º passo:

* Para os fãs de terminal:

* Para os fãs de interface gráfica:

Abram o Robomongo

Page 31: Introducao aos bancos_nao_relacionais_com_mongodb

APIs para Mongo

•PyMongo (Python)

•Php_mongo (PHP)

•Mongo JDBC Driver (Java)

• Mongo Ruby Driver (Ruby)

• Mgo (Go)

Para outras linguagens consulte: http://api.mongodb.org/

Page 32: Introducao aos bancos_nao_relacionais_com_mongodb

Quem sabe faz ao vivo!

Page 33: Introducao aos bancos_nao_relacionais_com_mongodb
Page 34: Introducao aos bancos_nao_relacionais_com_mongodb

Agora é a hora....

Page 35: Introducao aos bancos_nao_relacionais_com_mongodb

Me sigam :D

https://github.com/Ziggoto

http://pt.slideshare.net/ziggoto