NoSQL e as vantagens na utilização do MongoDB
Fabio Perrella - Locaweb
Engenheiro de Computação - Poli USP 2004Lider Técnico de Desenvolvimento -
SaaS - Locaweb
Fabio Luiz Perrella
Agenda
- Definição NoSql- Diferenças entre Sql e NoSql- Exemplo de uso- Vantagens do MongoDB- Desvantagens
NoSql - Definição
- Not only Sql- Próxima geração de Banco de Dados
fonte: http://nosql-database.org
NoSql
Características:- não relacional- distribuído- open-source- escalável horizontalmente
fonte: http://nosql-database.org
NoSql
Mais algumas características:- schema-free- replicação simples- API simples- suporta grande quantidade de dados- eventualmente consistentefonte: http://nosql-database.org
NoSql
Eventualmente consistente. Teorema CAP:- Consistência- Disponibilidade- Tolerância a PartiçãoSó conseguimos escolher 2 destes!http://www.julianbrowne.com/article/viewer/brewers-cap-theorem
NoSql
fonte: http://smist08.wordpress.com/tag/cap-theorem
Principais diferenças
SQL
Exemplos:- Mysql- Oracle - Postgres- SqlServer
NoSqlExemplos:- Orientados a documentos:
- MongoDB, CouchDB, Cassandra- Chave valor:
- Redis, Memcache, etc…- Outros tipos..
SQL
Tabelas, linhas e colunas:
NoSQL (MongoDB)
Documentos:( BSON - binary Json )
Sql
Relacionamentos:
Fonte: http://www.codeproject.com/Articles/396822/Basic-Handling-and-Tips-of-Database-Relationships
NoSql
Embedded documents
NoSql
.. e também “relacionamentos”
Sql
Queries:
SELECT * table_x WHERE y=1 ORDER BY...
NoSql
- Object Based (MongoDB)- RESTful APIs (ElasticSearch)- Map-reduce / JS functions (CouchDB)….- NoSQL!
Sql
Transações ACID (Atomic Consistent Isolated Durable)⇒ Consistência!⇒ Table locks⇒ Peformance prejudicada⇒ Exemplo de uso: ERP
NoSql
Transações BASE(Basically Available, Soft State, Eventually
Consistent)⇒ Disponibilidade!⇒ Performance!⇒ Consistência eventual⇒ Exemplo de uso: Google search
Exemplo de uso
Blog:- Posts- Comentários- Usuários
Exemplo de uso
Modelo relacional
SELECT * FROM posts p INNER JOIN comments c ON p.id = c.post_id INER JOIN users u on c.user_id = u.id
Exemplo de uso
Modelo orientado a documento
db.posts.find({ _id: 12 })
Vantagens do MongoDB
Vantagens do MongoDB
- Fácil instalação
apt-get install mongodb-10gen
Vantagens do MongoDB
- Open Source- Atualizações constantes- Suporte enterprise (caso necessário)- Comunidade ativa
Vantagens do MongoDB
- Drivers e ODM (object document mapper) para várias linguagens
Exemplo: Mongoid e Mongomapper para Ruby
Vantagens do MongoDB
- Sharding automático e de fácil configuração
fonte: http://3.bp.blogspot.com/-aa2XhG7okKo/TzzjKOtPd_I/AAAAAAAAI0g/okMlHXFqitc/s1600/mongo_shard.png
Vantagens do MongoDB
- Replicação simples (Replica set)
Vantagens do MongoDB
- Orientado a documentos- Schema Free
⇒ Facilidades para os desenvolvedores!
Vantagens do MongoDB
- Performance- Escrita assíncrona configurável (write
concern levels)- Leitura de dados dos secundários
(configurável)
Vantagens do MongoDB
- Operações de update atômicas- inc- set- push- pop
Vantagens do MongoDB
- Agregation framework- Map-Reduce- group by- sum()- etc...
Vantagens do MongoDB
- MMS (MongoDB Management Service)
Vantagens do MongoDB
- Treinamento online grátis oferecido pela 10gen!
http://education.mongodb.com
Desvantagens do MongoDB
:(
Desvantagens do MongoDB
- Alto uso de espaço em disco- Para cada linha precisa guardar o nome das “colunas”- Tamanho do nome das “coluna” influencia
Desvantagens do MongoDB
- Alto uso de memória RAM- Índices devem caber na memória RAM- Working-set preferencialmente deve caber
na memória RAM
⇒ Alternativa: SSD (ou $$D)
Desvantagens do MongoDB
- Custo alto com “parque” de servidores- Cada shard requer no mínimo 3 servidores para replica set (as máquinas devem ter o mesmo perfil de preferência)- Alternativa: Replica set Arbiter- No mínimo 3 config servers
Desvantagens do MongoDB
- Custo alto com “parque” de servidores
Desvantagens do MongoDB
- Global write lock (agora por database)- Solução da 10gen: sharding!... e em alguns casos, habilitar leitura dos secundários
Desvantagens do MongoDB
- Falta de transações
⇒ Inconsistências!
Desvantagens do MongoDB
- Manutenção e operação difícil- Compactação dos dados- Re-index dos índices- Replica sets que caem- Queries pesadas que travam o banco
Desvantagens do MongoDB
- Manutenção e operação difícil- Não tem backup diferencial. Em alguns
casos o Replica Set acaba sendo mais fácil- Adicionar shardings pode degradar
performance temporiariamente
Desvantagens do MongoDB
- Não tem queries!As vezes uma simples consulta requer um
código para executá-la
Desvantagens do MongoDB
- Pouca documentação*
Desvantagens do MongoDB
- Necessita de DBAs / Sysadmins especialistas em MongoDB, o que é raro no mercado.
⇒ 10gen oferece cursos para developers e sysadmins
[email protected]://fabioperrella.blogspot.com.brhttp://www.slideshare.net/fabioperrella56
Duvidas?