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