Bruno C. de Paula
Arquitetura Baseada em Serviços
Web Services e BD
e NoSQL
2º Semestre 2009 > PUCPR >
Pós em BD
Resumo e motivação da aula
Vamos trabalhar na aula de
hoje com bancos de dados
não relacionais;
Esta nova abordagem está
ganhando bastante força em
arquiteturas baseadas em
serviços devido às suas
vantagens relacionadas a
escalabilidade,
distribuição e acesso.
Modelo relacional é excelente,
porém...
É necessário transmitir um texto SQL
do cliente ao SGBD para conseguir um
resultado;
Difícil de criar estruturas
reutilizáveis;
Representação antinatural de
estruturas altamente hierárquicas;
Não prevê, originalmente, sistemas
distribuídos e paralelizáveis.
05/11/2015
3
NoSQL - características
SGBDs projetados para aplicações
web em mente;
Distribuídos, descentralizados e
paralelizáveis;
Tolerantes a falha;
Fogem de schemas fixos;
Escaláveis de maneira transparente;
Acessíveis via web services;
Não é ORM!
Muito novos...
05/11/2015
4
NoSQL - características
Podem ser instalados localmente ou,
por serem distribuídos, podem ser
jogados para a nuvem;
05/11/2015
5
Cloud Computing
Computação em Nuvem
 Detalhes da infra-estrutura são escondidos
do usuário e localizados na Internet;
 IaaS (Infraestrutura como Serviço):
– Virtualização;
 PaaS (Plataforma como Serviço):
– Cloudware;
– Seu sofware roda na Internet;
 SaaS (Software como Serviço):
– Licenciamento de um aplicativo sob
demanda.
05/11/2015
6
Teorema CAP
 Ao mesmo tempo, você só pode escolher 2
ao mesmo tempo:
– Consistência (consistency): todos os
clientes enxergam os mesmos dados;
– Disponibilidade (availability) : todos os
clientes acessam alguma versão dos dados;
– Tolerância a Partição (partition
tolerance): o banco pode ser dividido em
múltiplos servidores.
 NoSQL implementam consistência
eventual;
05/11/2015
7
NoSQL
Tipos de SGBD
Key-value: tabela hash;
Document-based:
metáfora de documentos;
Não existe um padrão
de linguagem!
05/11/2015
8
Exemplos de implementações
NoSQL
Voldemort: Linkedin, Digg;
Cassandra: Facebook;
CouchDB;
MongoDB;
Amazon SimpleDB: usado pelo S3;
05/11/2015
9
Exemplos de implementações
NoSQL
Google BigTable / Google Fusion Tables;
HyperTable:
implementação
do
BigTable;
HBase;
Yahoo Sherpa;
LucidDB;
...
Dezenas!
05/11/2015
10
Voldemort
Desenvolvido pelo Linkedin;
Dados são automaticamente:
– Replicados para múltiplos
servidores;
– Particionados (cada servidor contém
um pedaço dos dados);
Dados são versionados;
Cada nó é independente;
10-20k operações por segundo por nó.
05/11/2015
11
Voldemort
Serialização em Java;
Clone do Amazon Dynamo;
Open Source (Java);
Download em:
– http://project-voldemort.com/
05/11/2015
12
Instalação
Download de versão para Linux em:
– http://github.com/voldemort/voldemo
rt/downloads
05/11/2015
13
Exemplo de uso
Iniciando um nó
./bin/voldemort-server.sh
config/single_node_cluster >
/tmp/voldemort.log &
05/11/2015
14
Exemplo de uso
Iniciando a linha de comando
./bin/voldemort-shell.sh test
tcp://localhost:6666
05/11/2015
15
Exemplo de uso
Operações simples
Inserindo valor
– put "nome" "Bruno"
Recuperando valor:
– get "nome"
Excluindo valor:
– delete "nome"
05/11/2015
16
Exemplo de uso
Versionamento
05/11/2015
17
Exemplo de uso
Localização da chave
locate "bruno"
05/11/2015
18
Exemplo de uso
Código Java - Conexão
String bootstrapUrl =
"tcp://localhost:6666";
StoreClientFactory factory = new
SocketStoreClientFactory(new
ClientConfig().setBootstrapUrls(bootstra
pUrl));
// Cria um cliente para a store
StoreClient client =
factory.getStoreClient("my_store_name");
05/11/2015
19
Exemplo de uso
Inserindo e obtendo valores
Versioned value =
client.get("some_key");
value.setObject("some_value");
client.put("some_key", value);
05/11/2015
20
Cassandra
Desenvolvido para o Facebook;
Armazenamento de modelo de dados
rico;
Data replicada a múltiplos nós;
Novos nós podem ser acrescentados
sem influenciar nos dados existentes;
Consistência eventual:
– Sem updates após um período, os
updates de propagam nas
réplicas.
05/11/2015
21
Cassandra
Open source (Java);
Facebook = 40 TB / 120 máquinas;
Usa o conceito de super colunas;
{ // esta é uma super coluna
nome: "homeAddress",
// com uma lista infinita de colunas
value: {
// observe que a chave é o nome da coluna
street: {name: "street", value: "1234 x street", timestamp: 123456789},
city: {name: "city", value: "san francisco", timestamp: 123456789},
zip: {name: "zip", value: "94107", timestamp: 123456789},
}
}
05/11/2015
22
Instalação
Downloa de versão para Linux em:
– http://incubator.apache.org/cassandr
a/#download
05/11/2015
23
Exemplo de uso
Iniciando um nó
mkdir -p /var/log/cassandra
touch /var/log/cassandra/system.log
./bin/cassandra -f
05/11/2015
24
Exemplo de uso
Iniciando a linha de comando
./bin/cassandra-cli –host localhost –port
9160
05/11/2015
25
Exemplo de uso
Inserindo valores
set
Keyspace1.Standard1['bcp']['primeiro']
='Bruno‘
set
Keyspace1.Standard1['bcp']['sobrenom
e']='Bruno'
05/11/2015
26
Exemplo de uso
Obtendo valores
get Keyspace1.Standard1['bcp']
05/11/2015
27
CouchDB
Servidor de banco baseado em
documentos;
Acessível via API Rest;
Schema-free;
Distribuído;
Open Source (Erlang);
Views usando Map/Reduce.
05/11/2015
28
CouchDB
Interface JavaScript;
Ver testador online:
– http://labs.mudynamics.com/wpcontent/uploads/2009/04/icouch.html
05/11/2015
29
Documento CouchDB
Campos nomeados
05/11/2015
30
Referências
No to SQL? Anti-database...
– http://www.computerworld.com/s/arti
cle/9135086/No_to_SQL_Anti_databa
se_movement_gains_steam_
Livro sobre CouchDB (no prelo):
– http://books.couchdb.org/relax/
Explorando o CouchDB:
– http://www.ibm.com/developerworks/
br/library/os-couchdb/index.html
05/11/2015
31
Download

Apresentação sobre Bancos de Dados, Web Services e NoSQL