Arquitetura Baseada em Serviços Web Services e BD e NoSQL 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. 23/03/2017
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... 23/03/2017
NoSQL - características Podem ser instalados localmente ou, por serem distribuídos, podem ser jogados para a nuvem; 23/03/2017
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. 23/03/2017
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; 23/03/2017
Key-value: tabela hash; Document-based: metáfora de documentos; NoSQL Tipos de SGBD Key-value: tabela hash; Document-based: metáfora de documentos; Não existe um padrão de linguagem! 23/03/2017
Exemplos de implementações NoSQL Voldemort: Linkedin, Digg; Cassandra: Facebook; CouchDB; MongoDB; Amazon SimpleDB: usado pelo S3; 23/03/2017
Exemplos de implementações NoSQL Google BigTable / Google Fusion Tables; HyperTable: implementação do BigTable; HBase; Yahoo Sherpa; LucidDB; ... Dezenas! 23/03/2017
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ó. 23/03/2017
Voldemort Serialização em Java; Clone do Amazon Dynamo; Open Source (Java); Download em: http://project-voldemort.com/ 23/03/2017
Instalação Download de versão para Linux em: http://github.com/voldemort/voldemort/downloads 23/03/2017
Exemplo de uso Iniciando um nó ./bin/voldemort-server.sh config/single_node_cluster > /tmp/voldemort.log & 23/03/2017
Exemplo de uso Iniciando a linha de comando ./bin/voldemort-shell.sh test tcp://localhost:6666 23/03/2017
Exemplo de uso Operações simples Inserindo valor put "nome" "Bruno" Recuperando valor: get "nome" Excluindo valor: delete "nome" 23/03/2017
Exemplo de uso Versionamento 23/03/2017
Exemplo de uso Localização da chave locate "bruno" 23/03/2017
Exemplo de uso Código Java - Conexão 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"); 23/03/2017
Exemplo de uso Inserindo e obtendo valores Versioned value = client.get("some_key"); value.setObject("some_value"); client.put("some_key", value); 23/03/2017
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. 23/03/2017
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}, } 23/03/2017
Instalação Downloa de versão para Linux em: http://incubator.apache.org/cassandra/#download 23/03/2017
Exemplo de uso Iniciando um nó 23/03/2017 Exemplo de uso Iniciando um nó mkdir -p /var/log/cassandra touch /var/log/cassandra/system.log ./bin/cassandra -f Dica: precisei do SUDO para funcionar no Ubuntu... 23/03/2017
Exemplo de uso Iniciando a linha de comando 23/03/2017 Exemplo de uso Iniciando a linha de comando ./bin/cassandra-cli –host localhost –port 9160 Ver exemplos em: http://posulliv.com/?p=149 23/03/2017
Exemplo de uso Inserindo valores set Keyspace1.Standard1['bcp']['primeiro']='Bruno‘ set Keyspace1.Standard1['bcp']['sobrenome']='Bruno' 23/03/2017
Exemplo de uso Obtendo valores get Keyspace1.Standard1['bcp'] 23/03/2017
CouchDB Servidor de banco baseado em documentos; Acessível via API Rest; Schema-free; Distribuído; Open Source (Erlang); Views usando Map/Reduce. 23/03/2017
CouchDB Interface JavaScript; Ver testador online: http://labs.mudynamics.com/wp-content/uploads/2009/04/icouch.html 23/03/2017
Documento CouchDB Campos nomeados 23/03/2017
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 23/03/2017