O documento discute o gerenciamento de bancos de dados NoSQL, apresentando conceitos como modelos de dados chave-valor, orientado a documentos e família de colunas. Exemplos de bancos NoSQL como MongoDB, Neo4j e Cassandra são apresentados.
Mini Curso - Programação de Interfaces Gráficas - aula 1
NoSql
1. Disciplina
Gerenciamento de Banco
de Dados
noSql
Pós Graduação Análise e Desenvolvimento de Sistemas
Aplicados à Gestão Empresarial
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA
TRIÂNGULO MINEIRO – Campus Avançado Uberlândia
Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
2. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Introdução
• NoSql quer dizer “Não somente Sql”, ou
seja, deixar de visualizar o modelo
relacional como “bala de prata”;
• NoSql representa mais um movimento, ou
uma nova escola de pensamento, do que
alguma tecnologia em particular
3. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Alguns SGBDs modelo
Relacional
4. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Alguns SGBDs modelo
“noSql”
5. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Por que noSql?
• Após enfrentar problemas de
escalabilidade, custo e performance,
muitas empresas começaram a pesquisar e
investir em novos mecanismos de
armazenamento;
• Os bancos são considerados noSql, pois
não existe obrigatoriedade quanto ao
modelo de dados, estruturas fixas de
tabelas e schemas. Estas também não
suportam joins entre tabelas.
6. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Por que noSql?
• Com sistemas cada vez mais distribuídos,
um grande volume de dados é gerado,
transformando-se em um gargalo nos
sistemas atuais;
• Soluções em noSql costumam buscar
atingir objetivos como baixa latência, alta
performance e escalabilidade.
7. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Quem usa noSql?
• Cassandra:
• BigTable:
• Voldemort:
• Apache Hadoop:
• MongoDB:
8. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Histórico Armazenamento de
Dados
• 1965 – Arquivos sequenciais .dat;
• 1968 – SGBDs baseados em estruturas
hierárquicas;
• 1970 – SGBDs baseados em grafos;
• 1980 – Popularização dos SGBDs
relacionais;
• 2009 – Início do movimento noSql.
9. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Histórico noSql
• O movimento noSql surgiu de um
encontro, que teve por objetivo discutir o
crescente surgimento de soluções open-
source de armazenamento de dados
distribuídos não relacionais;
• noSql = nova onda de SGBDs que propôe
alternativas ao modelo relacional, em
situações específicas.
10. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Modelo de Dados
• Modelos relacionais possuem tabelas,
colunas, linhas e relacionamentos entre
estas, prezando pela integridade dos
dados;
• NoSql pode ser dividido basicamente em 5
modelos: chave-valor, orientado a
documentos, família de colunas (ou big
table), Grafo e Objetos.
11. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Modelo chave-valor
• Lembram a estrutura java.util.Map;
• Pesquisa unicamente pelas chaves;
• Muito utilizado para Caches;
• Tempo de O(1) para acesso aos dados.
12. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Modelo orientado a
documentos
• Um documento é uma estrutura de dados
composta por uma quantidade variável de
campos, com tipos de dados diversos,
inclusive um campo pode conter outro
documento;
• Um arquivo xml ou json seria como um
documento.
13. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Modelo orientado a
documentos
• Modelo permite armazenar qualquer
documento, sem ter a necessidade de
definir previamente sua estrutura;
• Possui forte tendência para
desnormalização de dados, deixando em 1
só documento todas as informações
relacionadas;
14. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Modelo orientado a
documentos
15. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Modelo Família de Colunas
(ou BigTable)
• Se tornou popular em 2006, através do
paper “BigTable” do Google;
• Composto pelos componentes: Keyspaces,
Famílias de Colunas e Colunas;
• Consultas apenas através das chaves;
• Útil quando se precisa consultar um
grande volume de dados em um tempo de
resposta muito baixo;
16. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Modelo Família de Colunas
(ou BigTable)
• Deve-se definir previamente o conjunto de
colunas que podem ser armazenadas em
cada família
17. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Modelo Grafo
• Grafos conectam um conjunto de vértices
através de um conjunto de arestas;
• Modelo de Grafos suportam estruturas de
grafos multirelacionais, com diferentes
vértices (representando pessoas, lugares,
itens...) e diferentes tipos de arestas
(“amigo de”,”mora em”,”comprando
por”, etc..).
18. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Modelo Grafo
• Modelo Whiteboard Friendly;
• Navegação entre os relacionamentos de
forma linear O(1).
19. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Modelo Objeto
• Bancos de Dados que armazenam objetos
ao invés de tabelas.
20. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Arquitetura
• Soluções noSql costumam utilizar uma
arquitetura não muito ortodoxa:
• Redundância de dados;
• BASE ao invés de ACID;
• Utilização de soluções alternativas para
persistência;
• Falta de padronização nas APIs;
• Busca quase que unicamente por chaves;
• Prioridade em Escalabilidade Horizontal.
21. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Arquitetura - BASE
• BASE = Basically Avaible, Soft-State,
Eventual Consistency;
• Abre mão da consistência por algum
tempo em favor da escalabilidade e
disponibilidade;
• Eventual Consistency = Consistência em
algum momento indeterminado. Ex: TEDs
de bancos;
• Existem exceções: Neo4j possui ACID.
22. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Arquitetura - Persistência
• Acessos ao disco possuem alto custo de
I/O. Soluções que necessitam de baixa
latência em geral não se adequam a este
meio de persistência;
• Memory-mapped mapeia parte da
memória diretamente para o disco, mas
deve-se replicar os dados em mais de uma
máquina para diminuir o risco de perda
de dados;
23. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Arquitetura - Persistência
• Algumas soluções noSql utilizam a
memória como principal meio de
persistência, utilizando o disco como
forma secundária, fazendo serialização
com o disco por meio de threads paralelas
(google).
24. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Arquitetura – Manipulação
de dados
• Não existe padrão de APIs em noSql,
como existe no Java (por exemplo JDBC e
JPA);
• Grande parte das ferramentas noSql
permitem apenas a busca de dados por
uma única chave, ou através de views
previamente definidas;
• Consultas ad-hoc são permitas em poucas
ferramentas (por ex: Cassandra)
25. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Arquitetura – Distribuição
• Ferramentas noSql geramente são criadas
para estarem em um ambiente distribuído;
• Algumas ferramentas oferecem
particionamento automático dos dados;
• Modelos relacionais se comportam melhor
com escalabilidade vertical;
• Modelos nosql se comportam melhor com
escalabilidade horizontal
26. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Redis
• É muito mais do que um banco chave-
valor, é um servidor de estrutura de
dados;
• http://redis.io/
27. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
MongoDB
• SGBD orientado a documentos;
• Troca de informações entre a aplicação e o
SGBD é por meio de mensagens JSON, via
Socket;
• Para muitos, é o novo M do “LAMP”;
• http://www.mongodb.org/downloads;
28. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
MongoDB - instalação
Efetuar o Download da última versão
estável (mongodb-win32-x86_64-2008plus-
2.6.1) e instalar;
Criar o diretório abaixo:
29. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
MongoDB - inicialização
Iniciar o banco pelo comando mongod
30. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
MongoDB - inicialização
Executar o comando mongo pela linha de
comando
31. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
MongoDB
• Persistência de objetos no banco:
32. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
MongoDB
• Bibliotecas a serem usadas com Java:
• mongo-x.xx.x.jar (driver do banco);
• morphia-0.xx.jar (biblioteca para efetuar
mapeamento objeto-documento);
• Visualizar código-fonte do projeto
MongoDB-ProjetoEclipse
33. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Neo4j
• Uma das soluções noSql mais maduras;
• Idealizado em 2000 por uma equipe sueca
chamada Windth Tecnologies;
• Escrito em Java;
• http://www.neo4j.org/
34. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Neo4j
• Ambiente para efetuar consultas
35. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Cassandra
• Nasceu dentro do Facebook para lidar
com as buscas nas caixas de entrada de
mensagens de seus usuários;
• Código liberado em 2009, tornou-se um
projeto incubado dentro da fundação
Apache;
• Modelo baseado em família de colunas;
• Arquitetura totalmente distribuída;
• http://cassandra.apache.org/
36. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Cassandra
• O Cassandra é escrito em Java;
• O batch cassandra.bat é responsável por
subir o servidor
37. Prof Carlos Eduardo Dantas – carloseduardodantas@iftm.edu.br
Referências
• [1] – Porcelli, Alexandre. “O que é noSql”
– Revista Java Magazine ed 86 e 87;
• [2] – Ramos, José Yoshiriro. “NoSql:
Conceitos e Evolução” – Revista MundoJ
ed 51;
• [3] – Garcia, Márcio. “Java e MongoDB” –
Revista MundoJ ed 51;