35
NoSQL e MongoDB David de Lucca

Apresentação MongoDB

Embed Size (px)

Citation preview

Page 1: Apresentação MongoDB

NoSQL e MongoDBDavid de Lucca

Page 2: Apresentação MongoDB

Confidencial © UNEAR 2015

Page 3: Apresentação MongoDB

Confidencial © UNEAR 2015

Agenda

• Um pouco sobre NoSQL• MongoDB• Scala + MongoDB

Page 4: Apresentação MongoDB

Confidencial © UNEAR 2015

O que é NoSQL?

• Termo criado em 1998 e voltou a ser usado em 2009;

• Uma nova forma de armanezar dados;• Bancos NoSQL não são baseados em tabelas;• Pode não ser capaz de oferecer operações ACID

(Atomic, Consistent, Isolated, Durable);• Voltado para soluções distribuídas e tolerantes a

falhas;• BASE (Basic Availability, Soft-state, Eventual

consistency);

Page 5: Apresentação MongoDB

Confidencial © UNEAR 2015

Por que utilizar NoSQL?

● Schemas dinâmicos;

● Grandes volumes de dados;

● Escala!!

Page 6: Apresentação MongoDB

Confidencial © UNEAR 2015

Existem duas maneiras de escalar

Crédito: http://abiasforaction.net/wp-content/uploads/2015/01/Network-Diagram-2.jpg

Page 7: Apresentação MongoDB

Confidencial © UNEAR 2015

Tipos de bases NoSQL

● Key-Value

● Column-Oriented

● Graph DB

● Document

Page 8: Apresentação MongoDB

Confidencial © UNEAR 2015

Tipos de bases NoSQL: Key-Value

● Foco em escalar muitas, mas muitas informações;● Preparado para lidar com cargas grandes;● Baseado no Amazon Dynamo;● Modelo de dados: chave-valor

● Exemplos: ○ Voldemort;○ Aerospike

Crédito: http://www.vmdude.fr/wp-content/uploads/2013/06/scaled_keyvalue.jpg

Page 9: Apresentação MongoDB

Confidencial © UNEAR 2015

Tipos de bases NoSQL: Column-Oriented

● Similar as tabelas do RDBMs;● Baseado no Google’s BigTable;● Modelo de dados: Coluna > Dados da coluna

● Exemplos: ○ Cassandra;○ BigTable;○ HBase;

Crédito: http://arxtecture.com/wp-content/uploads/2014/01/row-store-v-column-store.gif

Page 10: Apresentação MongoDB

Confidencial © UNEAR 2015

Tipos de bases NoSQL: Graph DB

● Foco na interconectividade das informações;● Inspirada pela Teoria dos Grafos (G=(E,V))● Modelo de dados: Nós > Relação entre eles;

● Exemplos: ○ Neo4J;

Crédito: http://dev.assets.neo4j.com.s3.amazonaws.com/wp-content/uploads/2009/09/socnet-start.png

Page 11: Apresentação MongoDB

Confidencial © UNEAR 2015

Tipos de bases NoSQL: Document

● Similar ao modelo Key-Value;● Inspirado pelo Lotus Notes;● Modelo de dados: Coleção de Chave-Valor;

● Exemplos: ○ MongoDB;○ CouchDB;○ Redis;

Crédito: http://docs.couchbase.com/couchbase-devguide-2.0/images/relational_vs_doc1.png

Page 12: Apresentação MongoDB

Confidencial © UNEAR 2015

Teorema CAP

● Consistency○ Todos os servidores apresentam o mesmo resultado.

Fortemente presente em bases que implementam ACID.

● Availability○ Garantia que todas as requisições irão receber

alguma resposta.

● Partition tolerance○ As propriedades são mantidas mesmo quando

ocorre alguma oscilação na rede.

Page 13: Apresentação MongoDB

Confidencial © UNEAR 2015

Teorema CAP

Crédito: http://blog.beany.co.kr/wp-content/uploads/2011/03/nosql_cap.png

Page 14: Apresentação MongoDB

Confidencial © UNEAR 2015

NoSQL resolve todos meus problemas?

Page 15: Apresentação MongoDB

Confidencial © UNEAR 2015

NoSQL resolve todos meus problemas?

Não!!!!!

Page 16: Apresentação MongoDB

Confidencial © UNEAR 2015

NoSQL resolve todos meus problemas?

Não!!!!!

Polyglot Persistence

Page 17: Apresentação MongoDB

Confidencial © UNEAR 2015

MongoDB - Overview

● Orientado a documentos;● Facilmente escalável verticalmente e

horizontalmente;● Boas ferramentas de gerenciamento (MongoDB

Managment Service e Ops Manager);● Comunidade que cresce muito rápido;● Query Language simples;

Page 18: Apresentação MongoDB

Confidencial © UNEAR 2015

MongoDB - Overview

Crédito: http://mongodb.org

Page 19: Apresentação MongoDB

Confidencial © UNEAR 2015

MongoDB - Overview

Crédito: http://db-engines.com

Page 20: Apresentação MongoDB

Confidencial © UNEAR 2015

MongoDB - Overview

Crédito: http://db-engines.com

Page 21: Apresentação MongoDB

Confidencial © UNEAR 2015

MongoDB x CouchDB

MongoDB CouchDB

Query Queries simples são simples de executar (db.documentos.find( {“name”:”david”})

Queries simples exigem que seja escrito uma query de Map/Reduce

Armazenamento BSON (Binary JSON) JSON

Coleções Divisão em várias collections “Coleção gigante”

Replicação Master/Slave, automático failover.

Master/Master

Page 22: Apresentação MongoDB

Confidencial © UNEAR 2015

MongoDB - Quem Utiliza?

Page 23: Apresentação MongoDB

Confidencial © UNEAR 2015

MongoDB - CRUD

● db.colecao.comando(params). Ex.:○ db.funcionarios.insert(

{“nome” : “david”, “area” : “produtos”})○ db.funcionarios.find( {“nome” : “david”})○ db.funcionarios.update({“nome” : “david”}, {$set

: {“idade” : “30”}})○ db.funcionarios.remove(<query>)

● Diversos operadores para serem usados no find(), update()

Page 24: Apresentação MongoDB

Confidencial © UNEAR 2015

MongoDB - Schema Design

● Não é igual modelar para bancos relacionais;● Afeta diretamente a performance da aplicação;● Operações de escritas são atômicas;● Schemaless;● Embedded:

○ “Contém”;● References (Normalized):

○ Complexos N-N;

Page 25: Apresentação MongoDB

Confidencial © UNEAR 2015

MongoDB - Performance

● Índices!!!○ Múltiplos campos? Índices compostos!!!

● Usa o sort() constantemente? Crie um índice!!!● Retornar apenas o que for utilizar;● Limitar a quantidade de linhas retornadas -

limit()/skip();● Utilize o método .explain() para obter estatísticas de

uma coleção.

Page 26: Apresentação MongoDB

Confidencial © UNEAR 2015

MongoDB - Replicação

● Replica-set;● Redundância e aumento da disponibilidade dos

dados;

Crédito: http://docs.mongodb.org/manual/_images/replica-set-primary-with-two-secondaries.png

Page 27: Apresentação MongoDB

Confidencial © UNEAR 2015

MongoDB - Sharding

● Particionamento dos dados:○ Escala;○ Balancear a carga de trabalho;

● Auto-gerenciável;

Crédito: http://blog.optimal.io/assets/img/how-to-do-mongodb-sharding.png

Page 28: Apresentação MongoDB

Confidencial © UNEAR 2015

MongoDB - Aggregation Framework

● Processamento de operações no Mongo:○ Aggregation Pipeline

■ Processamento em estágios;■ Alternativa onde a complexidade do map

reduce não é justificada;○ Map Reduce:

■ Comando mapReduce;■ Transformação de grande volumes de

dados em informações úteis;

Page 29: Apresentação MongoDB

Confidencial © UNEAR 2015

MongoDB - Aggregation: Aggregation Pipeline

Crédito: http://docs.mongodb.org/manual/_images/aggregation-pipeline.png

Page 30: Apresentação MongoDB

Confidencial © UNEAR 2015

MongoDB - Aggregation: Map Reduce

Crédito: http://docs.mongodb.org/manual/_images/map-reduce.png

Page 31: Apresentação MongoDB

Confidencial © UNEAR 2015

MongoDB - Manutenção e Análise

● Tudo está lento? Observe o I/O do disco!● O disco está ok:

○ Ative o profiling do banco!● db.currentOp() para ver operações que não foram

finalizadas;● mongostat para ver informações do processo

mongod;○ Forneça RAM e CPU suficientes;○ Use SSD!!!!!

● Outras informações na documentação! ○ http://docs.mongodb.org/manual/administration

Page 32: Apresentação MongoDB

Confidencial © UNEAR 2015

MongoDB - Ecossistema

● 11 drivers oficiais disponíveis para C, C++, C#, Java, NodeJS, Perl, PHP, Python, Motor, Ruby e Scala;

● Go e Erlang suportados pela comunidade;● Integração nativa com Hadoop;● humongous.io, UMongo, MongoVue, …;● Comunidade open-souce;

Page 33: Apresentação MongoDB

Confidencial © UNEAR 2015

Referências

● http://mongodb.org● http://mongodb.com● http://www.thoughtworks.com/pt/insights/blog/nosq

l-databases-overview● http://martinfowler.com/bliki/PolyglotPersistence.ht

ml● http://www.aerospike.com/what-is-a-nosql-key-val

ue-store/● http://rebelic.nl/2011/05/28/the-four-categories-of-

nosql-databases/● http://kkovacs.eu/cassandra-vs-mongodb-vs-couc

hdb-vs-redis

Page 34: Apresentação MongoDB

Confidencial © UNEAR 2015

Links úteis

● http://martinfowler.com● http://mongouniversity.com● https://docs.mongodb.org/manual/

Page 35: Apresentação MongoDB

NoSQL e MongoDB