Download - Apresentação MongoDB
NoSQL e MongoDBDavid de Lucca
Confidencial © UNEAR 2015
Confidencial © UNEAR 2015
Agenda
• Um pouco sobre NoSQL• MongoDB• Scala + 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);
Confidencial © UNEAR 2015
Por que utilizar NoSQL?
● Schemas dinâmicos;
● Grandes volumes de dados;
● Escala!!
Confidencial © UNEAR 2015
Existem duas maneiras de escalar
Crédito: http://abiasforaction.net/wp-content/uploads/2015/01/Network-Diagram-2.jpg
Confidencial © UNEAR 2015
Tipos de bases NoSQL
● Key-Value
● Column-Oriented
● Graph DB
● Document
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
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
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
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
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.
Confidencial © UNEAR 2015
Teorema CAP
Crédito: http://blog.beany.co.kr/wp-content/uploads/2011/03/nosql_cap.png
Confidencial © UNEAR 2015
NoSQL resolve todos meus problemas?
Confidencial © UNEAR 2015
NoSQL resolve todos meus problemas?
Não!!!!!
Confidencial © UNEAR 2015
NoSQL resolve todos meus problemas?
Não!!!!!
Polyglot Persistence
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;
Confidencial © UNEAR 2015
MongoDB - Overview
Crédito: http://mongodb.org
Confidencial © UNEAR 2015
MongoDB - Overview
Crédito: http://db-engines.com
Confidencial © UNEAR 2015
MongoDB - Overview
Crédito: http://db-engines.com
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
Confidencial © UNEAR 2015
MongoDB - Quem Utiliza?
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()
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;
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.
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
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
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;
Confidencial © UNEAR 2015
MongoDB - Aggregation: Aggregation Pipeline
Crédito: http://docs.mongodb.org/manual/_images/aggregation-pipeline.png
Confidencial © UNEAR 2015
MongoDB - Aggregation: Map Reduce
Crédito: http://docs.mongodb.org/manual/_images/map-reduce.png
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
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;
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
Confidencial © UNEAR 2015
Links úteis
● http://martinfowler.com● http://mongouniversity.com● https://docs.mongodb.org/manual/
NoSQL e MongoDB