SlideShare uma empresa Scribd logo
1 de 35
NoSQL e MongoDB
David 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/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
Confidencial © UNEAR 2015
Links úteis
● http://martinfowler.com
● http://mongouniversity.com
● https://docs.mongodb.org/manual/
NoSQL e MongoDB

Mais conteúdo relacionado

Mais procurados

Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBNodeXperts
 
An overview of Neo4j Internals
An overview of Neo4j InternalsAn overview of Neo4j Internals
An overview of Neo4j InternalsTobias Lindaaker
 
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDBNAVER D2
 
Introducing MongoDB Atlas
Introducing MongoDB AtlasIntroducing MongoDB Atlas
Introducing MongoDB AtlasMongoDB
 
An introduction to MongoDB
An introduction to MongoDBAn introduction to MongoDB
An introduction to MongoDBCésar Trigo
 
Mongodb basics and architecture
Mongodb basics and architectureMongodb basics and architecture
Mongodb basics and architectureBishal Khanal
 
Entendendo investimentos com memes
Entendendo investimentos com memesEntendendo investimentos com memes
Entendendo investimentos com memesJuliano Marlous
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao AndroidJanynne Gomes
 
As boas práticas da Gestão de Dados Moderna
As boas práticas da Gestão de Dados ModernaAs boas práticas da Gestão de Dados Moderna
As boas práticas da Gestão de Dados ModernaBergson Lopes Rêgo, PMP
 
Nginx A High Performance Load Balancer, Web Server & Reverse Proxy
Nginx A High Performance Load Balancer, Web Server & Reverse ProxyNginx A High Performance Load Balancer, Web Server & Reverse Proxy
Nginx A High Performance Load Balancer, Web Server & Reverse ProxyAmit Aggarwal
 
2.[d2 오픈세미나]네이버클라우드 시스템 아키텍처 및 활용 방안
2.[d2 오픈세미나]네이버클라우드 시스템 아키텍처 및 활용 방안2.[d2 오픈세미나]네이버클라우드 시스템 아키텍처 및 활용 방안
2.[d2 오픈세미나]네이버클라우드 시스템 아키텍처 및 활용 방안NAVER D2
 
Redis Overview
Redis OverviewRedis Overview
Redis OverviewHoang Long
 
검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민종민 김
 
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱PgDay.Seoul
 
Monitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixMonitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixAndré Déo
 

Mais procurados (20)

Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
An overview of Neo4j Internals
An overview of Neo4j InternalsAn overview of Neo4j Internals
An overview of Neo4j Internals
 
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
 
Introducing MongoDB Atlas
Introducing MongoDB AtlasIntroducing MongoDB Atlas
Introducing MongoDB Atlas
 
Redis Persistence
Redis  PersistenceRedis  Persistence
Redis Persistence
 
An introduction to MongoDB
An introduction to MongoDBAn introduction to MongoDB
An introduction to MongoDB
 
Mongodb basics and architecture
Mongodb basics and architectureMongodb basics and architecture
Mongodb basics and architecture
 
Entendendo investimentos com memes
Entendendo investimentos com memesEntendendo investimentos com memes
Entendendo investimentos com memes
 
Introdução ao Android
Introdução ao AndroidIntrodução ao Android
Introdução ao Android
 
As boas práticas da Gestão de Dados Moderna
As boas práticas da Gestão de Dados ModernaAs boas práticas da Gestão de Dados Moderna
As boas práticas da Gestão de Dados Moderna
 
Nginx A High Performance Load Balancer, Web Server & Reverse Proxy
Nginx A High Performance Load Balancer, Web Server & Reverse ProxyNginx A High Performance Load Balancer, Web Server & Reverse Proxy
Nginx A High Performance Load Balancer, Web Server & Reverse Proxy
 
YARN High Availability
YARN High AvailabilityYARN High Availability
YARN High Availability
 
Bancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geralBancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geral
 
2.[d2 오픈세미나]네이버클라우드 시스템 아키텍처 및 활용 방안
2.[d2 오픈세미나]네이버클라우드 시스템 아키텍처 및 활용 방안2.[d2 오픈세미나]네이버클라우드 시스템 아키텍처 및 활용 방안
2.[d2 오픈세미나]네이버클라우드 시스템 아키텍처 및 활용 방안
 
Redis Overview
Redis OverviewRedis Overview
Redis Overview
 
Oracle Data integrator 11g (ODI) - Online Training Course
Oracle Data integrator 11g (ODI) - Online Training Course Oracle Data integrator 11g (ODI) - Online Training Course
Oracle Data integrator 11g (ODI) - Online Training Course
 
검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민검색엔진이 데이터를 다루는 법 김종민
검색엔진이 데이터를 다루는 법 김종민
 
Introduction to mongodb
Introduction to mongodbIntroduction to mongodb
Introduction to mongodb
 
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
 
Monitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixMonitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com Zabbix
 

Destaque

Pentaho Data Integration (Kettle) Integração e Migração de Dados com ETL Open...
Pentaho Data Integration (Kettle) Integração e Migração de Dados com ETL Open...Pentaho Data Integration (Kettle) Integração e Migração de Dados com ETL Open...
Pentaho Data Integration (Kettle) Integração e Migração de Dados com ETL Open...Ambiente Livre
 
Aula05 - Android - Persistência
Aula05 - Android - PersistênciaAula05 - Android - Persistência
Aula05 - Android - PersistênciaArthur Emanuel
 
Rundeck + Nexus (from Nexus Live on June 5, 2014)
Rundeck + Nexus (from Nexus Live on June 5, 2014)Rundeck + Nexus (from Nexus Live on June 5, 2014)
Rundeck + Nexus (from Nexus Live on June 5, 2014)dev2ops
 

Destaque (6)

Techzone 2014 presentation rundeck
Techzone 2014 presentation rundeckTechzone 2014 presentation rundeck
Techzone 2014 presentation rundeck
 
Pentaho Data Integration (Kettle) Integração e Migração de Dados com ETL Open...
Pentaho Data Integration (Kettle) Integração e Migração de Dados com ETL Open...Pentaho Data Integration (Kettle) Integração e Migração de Dados com ETL Open...
Pentaho Data Integration (Kettle) Integração e Migração de Dados com ETL Open...
 
SQLite
SQLiteSQLite
SQLite
 
RunDeck
RunDeckRunDeck
RunDeck
 
Aula05 - Android - Persistência
Aula05 - Android - PersistênciaAula05 - Android - Persistência
Aula05 - Android - Persistência
 
Rundeck + Nexus (from Nexus Live on June 5, 2014)
Rundeck + Nexus (from Nexus Live on June 5, 2014)Rundeck + Nexus (from Nexus Live on June 5, 2014)
Rundeck + Nexus (from Nexus Live on June 5, 2014)
 

Semelhante a Apresentação MongoDB

SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...iMasters
 
Bancos de dados NoSQL - Redis e MongoDB
Bancos de dados NoSQL - Redis e MongoDBBancos de dados NoSQL - Redis e MongoDB
Bancos de dados NoSQL - Redis e MongoDBPaulo Bischof
 
Apostila NoSql.pdf
Apostila NoSql.pdfApostila NoSql.pdf
Apostila NoSql.pdfEizo Edson
 
Banco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas DistribuídosBanco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas DistribuídosJoão Helis Bernardo
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesChristiano Anderson
 
Introdução ao NoSQL e modelagem de dados com MongoDB
Introdução ao NoSQL e modelagem de dados com MongoDBIntrodução ao NoSQL e modelagem de dados com MongoDB
Introdução ao NoSQL e modelagem de dados com MongoDBJhonathan de Souza Soares
 
I nd t_bigdata(1)
I nd t_bigdata(1)I nd t_bigdata(1)
I nd t_bigdata(1)wchevreuil
 
Bancos de Dados em “Clouds”
Bancos de Dados em “Clouds”Bancos de Dados em “Clouds”
Bancos de Dados em “Clouds”elliando dias
 
Infraestrutura como código
Infraestrutura como códigoInfraestrutura como código
Infraestrutura como códigoEduardo Rozario
 
Desenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDesenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDenis Vieira
 
Cloud Mysql e MariaDB em alta performance
Cloud Mysql e MariaDB em alta performanceCloud Mysql e MariaDB em alta performance
Cloud Mysql e MariaDB em alta performanceSaveincloud
 
Pangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformPangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformAndré Paulovich
 
Google AppEngine: Desafios da adoção de cloud no mercado de seguros
Google AppEngine: Desafios da adoção de cloud no mercado de segurosGoogle AppEngine: Desafios da adoção de cloud no mercado de seguros
Google AppEngine: Desafios da adoção de cloud no mercado de segurosGustavo Concon
 
Fisl10 MySql na Globo.com por Camila Dias
Fisl10 MySql na Globo.com por Camila DiasFisl10 MySql na Globo.com por Camila Dias
Fisl10 MySql na Globo.com por Camila DiasCamila Dias
 
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net coreConhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net coreRodrigo Kono
 
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na WebMeritt - Cada Aluno é Único
 

Semelhante a Apresentação MongoDB (20)

SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
 
Bancos de dados NoSQL - Redis e MongoDB
Bancos de dados NoSQL - Redis e MongoDBBancos de dados NoSQL - Redis e MongoDB
Bancos de dados NoSQL - Redis e MongoDB
 
Apostila NoSql.pdf
Apostila NoSql.pdfApostila NoSql.pdf
Apostila NoSql.pdf
 
Banco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas DistribuídosBanco de Dados NoSQL - Disciplina: Sistemas Distribuídos
Banco de Dados NoSQL - Disciplina: Sistemas Distribuídos
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
NoSql e NewSql
NoSql e NewSqlNoSql e NewSql
NoSql e NewSql
 
Introdução ao NoSQL e modelagem de dados com MongoDB
Introdução ao NoSQL e modelagem de dados com MongoDBIntrodução ao NoSQL e modelagem de dados com MongoDB
Introdução ao NoSQL e modelagem de dados com MongoDB
 
I nd t_bigdata(1)
I nd t_bigdata(1)I nd t_bigdata(1)
I nd t_bigdata(1)
 
B Ds Clouds
B Ds CloudsB Ds Clouds
B Ds Clouds
 
Bancos de Dados em “Clouds”
Bancos de Dados em “Clouds”Bancos de Dados em “Clouds”
Bancos de Dados em “Clouds”
 
Infraestrutura como código
Infraestrutura como códigoInfraestrutura como código
Infraestrutura como código
 
Desenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full JavascriptDesenvolvendo uma aplicacao Full Javascript
Desenvolvendo uma aplicacao Full Javascript
 
Cloud Mysql e MariaDB em alta performance
Cloud Mysql e MariaDB em alta performanceCloud Mysql e MariaDB em alta performance
Cloud Mysql e MariaDB em alta performance
 
Pangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformPangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud Platform
 
Google AppEngine: Desafios da adoção de cloud no mercado de seguros
Google AppEngine: Desafios da adoção de cloud no mercado de segurosGoogle AppEngine: Desafios da adoção de cloud no mercado de seguros
Google AppEngine: Desafios da adoção de cloud no mercado de seguros
 
Fisl10 MySql na Globo.com por Camila Dias
Fisl10 MySql na Globo.com por Camila DiasFisl10 MySql na Globo.com por Camila Dias
Fisl10 MySql na Globo.com por Camila Dias
 
Web Scale Data Management
Web Scale Data ManagementWeb Scale Data Management
Web Scale Data Management
 
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net coreConhecimentos para tomar atitude e migrar sua aplicação para asp.net core
Conhecimentos para tomar atitude e migrar sua aplicação para asp.net core
 
Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0
 
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web
 

Apresentação MongoDB

  • 3. Confidencial © UNEAR 2015 Agenda • Um pouco sobre NoSQL • MongoDB • Scala + MongoDB
  • 4. 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
  • 14. Confidencial © UNEAR 2015 NoSQL resolve todos meus problemas?
  • 15. Confidencial © UNEAR 2015 NoSQL resolve todos meus problemas? Não!!!!!
  • 16. Confidencial © UNEAR 2015 NoSQL resolve todos meus problemas? Não!!!!! Polyglot Persistence
  • 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;
  • 18. Confidencial © UNEAR 2015 MongoDB - Overview Crédito: http://mongodb.org
  • 19. Confidencial © UNEAR 2015 MongoDB - Overview Crédito: http://db-engines.com
  • 20. Confidencial © UNEAR 2015 MongoDB - Overview Crédito: http://db-engines.com
  • 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
  • 22. Confidencial © UNEAR 2015 MongoDB - Quem Utiliza?
  • 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/