Arquitetura Baseada em Serviços Web Services e BD e NoSQL 2º Semestre 2009 > PUCPR > Pós em BD Bruno C. de Paula
Jan 12, 2016
Arquitetura Baseada em Serviços
Web Services e BD e NoSQL
2º Semestre 2009 > PUCPR > Pós em BD
Bruno C. de PaulaBruno C. de Paula
Resumo e motivação da aulaVamos 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.
321/04/23
NoSQL - característicasSGBDs 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...
421/04/23
NoSQL - características
Podem ser instalados localmente ou, por serem distribuídos, podem ser jogados para a nuvem;
521/04/23
Cloud ComputingComputação em NuvemDetalhes 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.
621/04/23
Teorema CAPAo 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;
721/04/23
NoSQLTipos de SGBD
Key-value: tabela hash;Document-based: metáfora de documentos;
Não existe um padrão de linguagem!
821/04/23
Exemplos de implementações NoSQLVoldemort: Linkedin, Digg;Cassandra: Facebook;CouchDB;MongoDB; Amazon SimpleDB: usado pelo S3;
921/04/23
Exemplos de implementações NoSQLGoogle BigTable / Google Fusion Tables;HyperTable: implementação do
BigTable;HBase;Yahoo Sherpa;LucidDB;...Dezenas!
1021/04/23
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ó.
1121/04/23
Voldemort
Serialização em Java;Clone do Amazon Dynamo;Open Source (Java);Download em:
–http://project-voldemort.com/
1221/04/23
Instalação
Download de versão para Linux em:–http://github.com/voldemort/
voldemort/downloads
1321/04/23
Exemplo de usoIniciando um nó./bin/voldemort-server.sh
config/single_node_cluster > /tmp/voldemort.log &
1421/04/23
Exemplo de usoIniciando a linha de comando./bin/voldemort-shell.sh test
tcp://localhost:6666
1521/04/23
Exemplo de usoOperações simplesInserindo valor
–put "nome" "Bruno"Recuperando valor:
–get "nome"Excluindo valor:
–delete "nome"
1621/04/23
Exemplo de usoVersionamento
1721/04/23
Exemplo de usoLocalização da chavelocate "bruno"
1821/04/23
Exemplo de uso Código Java - Conexão
1921/04/23
String bootstrapUrl = "tcp://localhost:6666"; StoreClientFactory factory = new SocketStoreClientFactory(new ClientConfig().setBootstrapUrls(bootstrapUrl)); // Cria um cliente para a store StoreClient client = factory.getStoreClient("my_store_name");
Exemplo de usoInserindo e obtendo valores
Versioned value = client.get("some_key");
value.setObject("some_value"); client.put("some_key", value);
2021/04/23
CassandraDesenvolvido 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.
2121/04/23
Cassandra
Open source (Java);Facebook = 40 TB / 120 máquinas;Usa o conceito de super colunas;
2221/04/23
{ // 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}, }}
Instalação
Downloa de versão para Linux em:–http://incubator.apache.org/
cassandra/#download
2321/04/23
Exemplo de usoIniciando um nómkdir -p /var/log/cassandratouch /var/log/cassandra/system.log./bin/cassandra -f
2421/04/23
Exemplo de usoIniciando a linha de comando./bin/cassandra-cli –host localhost –port
9160
2521/04/23
Exemplo de usoInserindo valoresset Keyspace1.Standard1['bcp']
['primeiro']='Bruno‘set Keyspace1.Standard1['bcp']
['sobrenome']='Bruno'
2621/04/23
Exemplo de usoObtendo valoresget Keyspace1.Standard1['bcp']
2721/04/23
CouchDB
Servidor de banco baseado em documentos;
Acessível via API Rest;Schema-free;Distribuído;Open Source (Erlang);Views usando Map/Reduce.
2821/04/23
CouchDB
Interface JavaScript;Ver testador online:
–http://labs.mudynamics.com/wp-content/uploads/2009/04/icouch.html
2921/04/23
Documento CouchDBCampos nomeados
3021/04/23
Referências
No to SQL? Anti-database...– http://www.computerworld.com/s/article/
9135086/No_to_SQL_Anti_database_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
3121/04/23