Post on 09-Aug-2015
NoSQLSoluções alternativas para bancos
de dados
Nicolas Ibanheiz
Desenvolvedor Java
Entusiasta de Node.js e NoSql
Formado pela Etec de Itaquera õ/
github.com/ibanheiz
Papo de hoje
- Bancos de dados relacionais
- Bancos de dados NoSQL
- MongoDb
- Neo4j
- Arquitetura de uma rede social com NoSQL
- Convertendo um banco em SQL para NoSQL
Relacionamento
Normalização
Integridade
Relacionamnto Interidade
Limitações do modelo relacional
- WallmartTrabalha com mais de 1 milhão de transações de clientes por hora, alimentando bancos de dados estimados em mais de 2,5 petabytes.
- FacebookPossui em seu banco cerca de 40 bilhões de fotos;
A cada 20 minutos...
1 milhão de links são enviados
2 milhões de pedidos de amizade são solicitados
3 milhões de mensagens são enviadas
Dificuldade com escabailidade
Dificuldade com performance
E agora ???
E agora ???
História do NoSQL
- NoSQL (Not Only SQL) foi utilizado em 1998 para o nome de um banco de dados relacional de código aberto que não possuía interface SQL.
- Em 2009 foi reintroduzido por Eric Evans (da Rackspace) para os novos bancos que surgiam e não tinham preocupação em dar garantias ACID (Atomicidade, Consistência, Isolamento e Durabilidade).
- O nome fazia referência à bancos de dados populares na época, como MySQL, MS SQL e PostgreSQL, então por isso, usaram o NoSQL.
Quando e porque usar?
- Escalabilidade sob demanda
- Performance em escrita massiva
- Esquema flexível e tipos de dados flexíveis
- Facilidade de uso para o programador
- Sincronização de dados online e offline (CouchDB)
- Evitar joins pesados quando o carregamento
das querys se tornam muito grandes para
os bancos relacionais
Bancos NoSQL populares
Qual banco devo escolher?
- Alta disponibilidade e escolabilidade
- Gravação de dados muito rápida
- Linguagem de consulta semelhante ao SQL
- Esquema flexível
Qual banco devo escolher?
- Alta disponibilidade e escolabilidade
- Leitura muito rápida em cache
- Schema de dados simples (key-value)
- Fácil integração com qualquer linguagem
Não comparem bancos SQL e NoSQL
x
x
Comparem bancos de mesma arquitetura para as mesmas soluções
x
x
- C++
- Schemaless
- JSON/BSON
- Replica
- Harding
- GridFS
Visão geral
DATABASE
TABLE
ROWS
QUERY
Terminologia
DATABASE
COLLECTION
DOCUMENT JSON
QUERY
> var product = {"name": "Cachaça", "description": "Mé brasileiro", "price": 12.00}
> db.products.insert(product);
Operações - Insert
> var product = db.products.find();
> {
"name": "Cachaça", "description": "Mé brasileiro", "price": 12.00
}
Operações - Find
Visão Geral
- Java
- Schemaless
- Cypher
- Teoria de grafos
- Transaction
Grafos
Conjunto finito de vértices e arestas
Operações - Create e Show
CREATE (NoSQL: palestra {title: 'NoSQL Soluções alternativas para bancos de dados'})
CREATE (Nicolas: palestrante {nome: 'Nicolas Ibanheiz', idade: 21})
CREATE (Nicolas)-[:PALESTROU_EM {roles: ['Nico']}]->(NoSQL)
WITH Nicolas as a
MATCH(a)-[:PALESTROU_EM]->(m) return a,m
Pensando numa Rede Social
1 - Leitura mais rápida de dados
Replicação de dados
Replicação de dados
2 - Repositório central
3 - Leitura rápida em cache
4 - Conectar e descobrir relacionamentos
Mudando seu jeito de pensar
Mudando seu jeito de pensar
Dica - Livro NoSQL Essencial