Weitere ähnliche Inhalte Ähnlich wie Apresentação MongoDB (20) Apresentação MongoDB4. 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);
5. Confidencial © UNEAR 2015
Por que utilizar NoSQL?
● Schemas dinâmicos;
● Grandes volumes de dados;
● Escala!!
6. Confidencial © UNEAR 2015
Existem duas maneiras de escalar
Crédito: http://abiasforaction.net/wp-content/uploads/2015/01/Network-Diagram-2.jpg
7. Confidencial © UNEAR 2015
Tipos de bases NoSQL
● Key-Value
● Column-Oriented
● Graph DB
● Document
8. 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
9. 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
10. 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
11. 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
12. 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.
13. Confidencial © UNEAR 2015
Teorema CAP
Crédito: http://blog.beany.co.kr/wp-content/uploads/2011/03/nosql_cap.png
17. 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;
21. 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
23. 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()
24. 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;
25. 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.
26. 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
27. 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
28. 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;
29. Confidencial © UNEAR 2015
MongoDB - Aggregation: Aggregation
Pipeline
Crédito: http://docs.mongodb.org/manual/_images/aggregation-pipeline.png
30. Confidencial © UNEAR 2015
MongoDB - Aggregation: Map Reduce
Crédito: http://docs.mongodb.org/manual/_images/map-
reduce.png
31. 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
32. 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;
33. Confidencial © UNEAR 2015
Referências
● http://mongodb.org
● http://mongodb.com
● http://www.thoughtworks.com/pt/insights/blog/nos
ql-databases-overview
● http://martinfowler.com/bliki/PolyglotPersistence.ht
ml
● http://www.aerospike.com/what-is-a-nosql-key-
value-store/
● http://rebelic.nl/2011/05/28/the-four-categories-of-
nosql-databases/
● http://kkovacs.eu/cassandra-vs-mongodb-vs-
couchdb-vs-redis
34. Confidencial © UNEAR 2015
Links úteis
● http://martinfowler.com
● http://mongouniversity.com
● https://docs.mongodb.org/manual/