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