Ontem às 08:30 começou o no:sql(br)., um evento sobre banco de dados NoSQL (Not only SQL). Para quem não conhece o assunto, recomendo a leitura deste artigo.
O evento foi organizado pelo Alexandre Porcelli e inicialmente era para ser uma reunião de usuários de NoSQL. Porém, para a nossa sorte, acabou tomando maiores proporções, e uma reunião que poderia ser realizada sem maiores problemas numa sala de aula, teve que ser transferido para o auditório do Hotel Park Suites ITC Vila Olímpia, localizado na zona sul de São Paulo.
Eu e o Rodrigo Ribeiro tivemos a força de vontade e a nerdice, para acordar bem cedo em pleno sabadão, para ir a esse primeiro evento de NoSQL no Brasil (acredito que seja o primeiro).
Abaixo relato as minhas expectativas, impressões e falo um pouco sobre cada palestra que ocorreu. 🙂
Expectativas
Confesso que eu só fui me interessar pelo evento na última quinta-feira (hehe). Após ter tido que pesquisar sobre bancos NoSQL para um novo projeto que estamos desenvolvendo aqui na Voice. E ao pesquisar e estudar tive dificuldades em entender esse “novo” paradigma, e então, lembrei do no:sql(br). que foi divulgado pelo Rodrigo na lista do Ensinar. Só aí que fui me interessar pelo evento, justamente para clarear as minhas ideias sobre o assunto e poder aprender mais, uma vez que seria uma excelente oportunidade de aprender sobre NoSQL e principalmente, quando usar um NoSQL.
Abertura – Alexandre Porcelli (OpenSpotLight)
O Alexandre Porcelli, idealizador do evento, fez a abertura do mesmo, falando sobre como foi a origem do evento, que como disse antes, era para ser uma reunião de usuários NoSQL, e uma desculpa para ir num buteco depois. Porém, a conversa que começou no twitter, acabou tomando maiores proporções (o poder do twitter é incrível) e já no primeiro dia de inscrições foram mais de 100 inscritos!
O Strange Loop foi uma das inspirações para o evento, por sua característica mais simples e de baixo custo. E no caso do no:sql(br). o custo para os participantes foi ZERO!
O Alexandre lembrou que o evento não era para falar mal de banco relacionais, afinal NoSQL, é sobre escolha e não sobre ser contra algo. E depois o Alexandre fez um jabá de seu projeto open-source o OpenSpotLight, que objetiva ser um Google para a área de TI (Google4IT).
No final da abertura, o Porcelli informou que estará organizando um novo evento para o próximo semestre, que será sobre Linguagens Emergentes & DSLs.
noSQL anti-patterns – Gleicon Moraes (Locaweb)
Na verdade o tema correto da apresentação seria SQL anti-patterns, como foi lembrado pelo Luciano Ramalho.
O Gleicon fez uma apresentação bem legal, foi a que eu mais gostei. Falando sobre anti-patterns SQL, que muitas vezes ocorre não por má vontade do desenvolvedor e sim porque o mesmo não conhece outras alternativas (leia-se NoSQL).
Abaixo uma apresentação utilizada pelo Gleicon no evento da Locaweb, mas que é a base senão até igual a apresentação utilizada ontem.
Na apresentação Gleicon deixou bem claro a importância de conhecer NoSQL, pois muitas vezes fazemos a escolha errada, por não conhecer outras formas de implementação. Outros pontos frisados foram:
- Não há bala de prata
- considere alternativas;
- pense fora da normalização;
- considere a desnormalização como uma opção;
- simplificar.
- Algumas mudanças organizacionais são necessárias, o desenvolvedor precisa tomar conta dos dados;
- “Estou otimizando”, quando na verdade a pessoa está aprendendo a fazer as coisas;
- É importante conhecer/aprender as ferramentas certas;
- Boa parte dos problemas ocorrem por causa da mentalidade “relacional”;
- Verifique se você está muito dependente de cache, cache é bom, mas é remendo. Por isso a dependência de cache pode significar um alerta;
- Pense mais sobre os seus dados.
Performance e simplicidade com Chave/Valor utilizando REDIS – Luiz Fernando Teston (OpenSpotLight)
O Teston, que também participa do projeto OpenSpotLight, começou a sua apresentação dando um introdução sobre chave/valor que é o modelo de dados utilizado pelo Redis.
Depois da introdução foi comentado que o Redis armazena os dados em memória, por isso é mais rápido. E é possível configurar de quanto em quanto tempo que ele irá persistir esses dados em disco. E além de poder adicionar strings, o Redis também pode armazenar uma lista de itens, set ordenado e array de bytes.
A respeito das chaves:
- O index é pela chave;
- Os ids são criados usando auto increment (como no banco relacional);
- Chaves naturais podem ser usadas (ex.: nome do usuário do twitter);
- Criar chave muito grande não é performático.
A instalação do Redis é bem simples e quem usa Windows precisa instalar o Cygwin.
Depois o Feston falou sobre os comandos existentes no Redis, maiores detalhes podem ser obtidos nessa página da documentação do Redis.
Qual cenário que você indica o uso do Redis?
Quando a busca por dados na memória é possível e quando o seu modelo de dados se adequa bem ao modelo chave/valor.
Por fim, o Feston deixou bem claro que o Redis não tem limitação de memória, uma vez que ele pode fazer uso de memória virtual.
O papel do REST no Neo4J e CouchDB, um comparativo – Guilherme Silveira (Caelum)
Um dos poucos palestrantes que eu já conhecia, embora não tenha visto nenhuma palestra ao vivo, só as gravadas (rs). O Guilherme Silveira é sem dúvidas um dos grandes entusiastas de REST, e aliás, ele é o desenvolvedor do Restfulie.
A palestra foi bem voltada para o mundo Web e focando em REST. E de início o Guilherme falou sobre escalabilidade, dizendo que “escalar é dá vazão para mais” e a web “é o maior sistema distribuído que o ser humano criou”, portanto, podemos aprender bastante coisas sobre escalabilidade com a Web.
Foi falado da importância de ser stateless, pois assim o servidor não precisa saber quem é você e o usuário pode ser “servido” por qualquer servidor (quando você faz uma pesquisa no Google, por exemplo, para o usuário a impressão é de está acessando o servidor do Google, quando na verdade ele está acessando e sendo servido por vários servidores).
O Guilherme lembrou que cache é fundamental para a escalabilidade, e podemos cachear tanto no cliente, intermediários e no servidor.
Dentre os pontos principais da apresentação destaco:
- Evite bater no BD, ou seja, usar cache e perguntar só uma vez ou só para confirmar se a informação é a atual;
- Ao ínves de usar uri pattern, usar links;
- Há uma RFC para links, a 5829;
- Usar melhor o header do html, por exemplo colocando um link de histórico nele;
- O trabalho do BD não é cachear;
O auge da apresentação foi quando o Guilherme falou sobre visibilidade, o problema é que eu não me lembro muito bem o que ele falou (rs).
Pegar um sistema em camadas e tentar fazer tudo numa única camada, não é solução nenhum pouco inteligente, uma vez que é importante desaclopar os componentes da sua arquitetura.
No final o Guilherme ainda apresentou um exemplo usando Ruby e Sinatra, onde ele transformar os valores obtidos no CouchDB em links e depois ele falou sobre o QCon, que parece ser um evento bem interessante (estou pensando em ir).
A apresentação do Guilherme foi bem legal, mesmo ele não falando muito sobre o CouchDB, cuja interface é via REST. Ele fala de uma maneira bem empolgada e a apresentação tinha imagens que garantiam boas risadas da platéia.
Introdução ao MongoDB – direto da fonte! – Alberto Lerner (10gen)
A apresentação do Alberto, que veio de Nova York só para participar do evento, foi sobre o MongoDB do pessoal da 10gen, um banco de dados orientado a documentos open-source.
A palestra foi bem legal, principalmente pelo fato de ser introdutória (hehe) e ter mostrado as características e comandos do MongoDB.
O Alberto começou a apresentação falando sobre a origem do nome, que veio da palavra inglesa “humongous” que é usada de forma coloquial e significa gigante (para nós brasileiros não é um bom nome rs).
Os documentos são armazenados no formato JSON, e numa analogia com uma banco de dados relacional:
- O documento JSON seria o registro;
- As collections seria uma tabela;
- Os índices seriam os índices mesmo;
- O embedding e o linking seria o join.
Depois o Alberto apresentou os comandos principais do MongoDB, esclarencendo que o MongoDB não tem uma linguagem de consulta, o que existe são expressões/comandos, que são usados no formato JSON.
Algumas características interessantes do MongoDB:
- É possível acrescentar dados, por meio de um update;
- Não existe um schema dentro das coleções, ou seja, as collections podem ser dinâmicas;
- Há upserts, que podem atualizar se documento já existe, ou cria se ele não existe;
- Você pode armazenar o seu dado da forma que ele ocorre na “natureza”.
O Alberto também falou um pouco sobre replicação e sharding, onde deu para perceber que o MongoDB é bem flexível.
Dentre as empresas que já usam o MongoDB, destaque para o SourceForge e a FourSquare.
No final o Alberto convidou o pessoal a participar do projeto do MongoDB, dizendo que a língua não é uma barreira, o importante é a contribuição. E todo o código do MongoDB está disponível no GitHub.
Tio: um NoSQL made in Brasil – Rodrigo Strauss (1bit)
A apresentação do Rodrigo Strauss foi sobre o seu projeto chamado Tio, que é um servidor de estrutura de dados com publish subscribe.
Os slides da apresentação já foram disponibilizados pelo Rodrigo e podem ser conferidos no link abaixo:
http://docs.google.com/present/view?id=dg9kbfzn_73m4c7qvc6
O Tio é um projeto no qual o Rodrigo vem trabalhando já há 3 anos, e na época em que ele começou NoSQL ou não existia ou não era “mainstream”.
E a ideia do Tio é que o seu uso seja tão fácil quanto usar a sua linguagem de programação. O core do Tio, é o publish subscribe, onde qualquer um pode assinar para receber as mensagens da sua aplicação.
Algumas características do Tio:
- Para usar o Tio você pode conectar via telnet/netcat;
- Ocupa 700k de memória (com a base limpa é claro);
- Você modela os dados igual você modela na sua aplicação;
- Desenvolvido em C++;
- Há uma api em Python, criada pelo próprio Rodrigo;
O Rodrigo ainda fez uma demostração do Tio fazendo um aplicação de chat, que depois basicamente só precisava da implementação do lado do cliente, e para isso ele utilizou a API em Python.
No final o Rodrigo ainda falou sobre as vantagens, limites e o que existe atualmente (tudo isso pode ser conferido no link que passei da apresentação).
Nas Nuvens com KVM, JBoss REST-Easy e InfiniSpan – Edgar Silva & Samuel Tauil (Red Hat Brasil)
A apresentação do Edgar Silva e do Samuel Tauil, começou com o Edgar falando sobre o KVM, que possibilita a virtualização nativa no SO. E a virtualização possibilita uma melhor utilização do hardware.
O Edgar lembrou que para NoSQL você precisa de uma:
- Infraestrutura;
- Armazenamento;
- Acesso.
Depois foi falado um pouco sobre REST, onde a ideia é de mapeamento de verbos de serviços na Web usando URIs. Exemplo: tv/canal/121 [recurso|objeto|valor]
O Samuel falou sobre o Infinispan, que é uma plataforma dados em grid open-source, voltada para permitir o cache distribuído.
A parte da apresentação do Samuel foi focada em mostra o Infinispan na prática, mostrando a inserção de dados por meio de uma interface swing e visualizando os mesmos no navegador web.
No final o Edgar voltou e mostrou um pouco do REST-Easy.
Divide et impera – Processamento massivo com Hadoop, Pig e HBase – Vinicius Carvalho (SambaTech)
A minha expectativa para essa palestra estava alta, pois eu já tinha brincado/apanhado um pouco com o Hadoop (até fiz um post aqui no Ensinar), e queria saber como o pessoal da SambaTech está usando o Hadoop.
O Vinicius começou a apresentação explicando sobre o projeto Hadoop e depois contanto que eles usam ele para o processamento de logs, mas ainda a caráter de “prova de conceito”, embora executem toda sexta-feira o script escrito em Pig lá na Amazon.
O Hadoop é um framework de MapReduce mais utilizado, implementado em Java, capaz de executar Petabytes
Foi falado também sobre Grid Computing, onde a ideia principal é a distribuição da computação (processamento). E se formos pensar, uma arquitetura cliente-servidor já é um exemplo, embora “tosco”, de computação distribuída.
Depois o palestrante falou sobre o paradigma do MapReduce, no qual o objetivo é mapear (map doh!) dados que estão armazenanados de forma distribuída e depois processá-los (reduce).
O desafio do pessoal da SambaTech era fazer em Pig, o que antes era feito por um script em perl, que rodava em uma máquina.
Mais que raios é esse Pig, você deve está se perguntando… ele é uma linguagem de data-flow, de alto nível para você escrever as suas funções MapReduce.
Por que Hadoop?
O Vinicius falou as razões pelas quais eles investiram no Hadoop:
- Dado está disponível (twitter. facebook)
- Storage está barato
- Web 2.0 demanda de inteligentes soluções
- Cloud computing
O interessante da palestra foi a explicação sobre o Pig, que como disse antes é a linguagem utilizada para escrever as funções MapReduce, e a sua utilização adicionar 20% de overhead. Putz, então usar Pig é ruim!? Nem tanto, pois ele facilita bastante as coisas, uma vez que criar map/reduce não é fácil, pois o paradigma é diferente e na hora de criar o workflow que a coisa complica ainda mais.
A apresentação do Vinicius teve que ser encerrada antes dele falar sobre o HBase, que acredito que era o assunto principal para o evento. 😦 A respeito dos slides, a cor azul do texto no fundo branco, tornava praticamente impossível a leitura dos slides e havia muito texto.
Estudo de caso: avaliando o Apache Cassandra como cache distribuído – Julio Viegas (GlobalCode)
A apresentação do Julio foi sobre como eles estão trabalhando com NoSQL lá no SPC Brasil, para não substituir o Oracle e sim usar o Cassandra como cache. O sistema deles tem cerca de 100 transações por segundo, 22 processos, cache mutáveis com replicação via Ehcache + rmi, sendo esse cache chave + valor.
O Julio tentou usar o Terracotta, mas não foi uma experiência muito legal, devido a instrumentação.
Foram avaliados os seguintes NoSQL do tipo chave + valor:
Alguns pontos interessante sobre o Cassandra:
- Criado pelo Facebook, e usado em parte dele;
- Open-source;
- Baseado no Amazon Dynamo;
- Tem como usuários: digg, reddit, cisco webex, rackspace, twitter;
- Baseado no modelo chave + valor;
- Tipos dinâmicos versionados com timestamp;
- Atomicidade por chave;
- Configuração simples (isso é bem legal).
O pessoal do SPC precisava de:
- Armazenamento descentralizado;
- Tolerante a falhas;
- Elástico: adicione mais servidores a quente;
- Escala horizontalmente.
E o Cassandra trabalha justamente com disponibilidade e tolerância a perda de partições. sacrificando um pouco da consistência (afinal não é possível ter o máximo de disponibilidade, consistência e tolerância a falhas ao mesmo tempo CAP).
Com o Cassandra não é possível fazer order by, por isso é necessário gravar já de forma ordenada.
A apresentação do Julio foi bem interessante, deu para conhecer o Cassandra, que aliás, é o NoSQL que as pessoas mais usam ou tem interesse em usar.
Depois ainda teve um painel de discussão, no qual a pláteia e os palestrantes bateram um bate-papo sobre noSQL, falando desde de quando não usar um banco de dados relacional até as dificuldades em implantar um banco noSQL, que em boa parte das vezes, ocorre por causa da cultura da empresa, ou melhor, das pessoas.
No final ainda teve o happy/breja hour, mas eu não participei, pois já estava cansado (dia todo com o note no colo é osso) e a viagem para casa era longa 😦
Conclusão
O no:sql(br). foi muito bom! Uma organização EXCELENTE, melhor que muito evento pago (e uns até bem pagos) por aí. Os coffee breaks foram sensacionais (pensou que eu tinha esquecido de falar deles rs). A galera que estava presente estava realmente a fim de saber sobre o assunto (acho que todos que estavam lá, era por interesse próprio e foram por vontade própria) e mostraram ter o espírito de comunidade, muitos contribuiram com doações antes do evento e durante o evento, quando o chapéu do Borcelli passou (hehe).
As palestras foram muito boas, e a grade estava bem diversa, então deu para ter uma boa visão geral do mundo de NoSQL. Só senti falta de uma apresentação introdutória, embora o foco do evento tenha sido para as pessoas que já tinham um conhecimento/experiência prévia sobre NoSQL.
Minhas expectativas foram superadas, agora eu entendi melhor o paradigma do NoSQL e nessa semana estarei fazendo mais testes com o CouchBD de início, e talvez depois com o MongoDB, os dois que tem o modelo de dados por documentos, que parecem que se adequam melhor para a nossa necessidade (relatórios de chamadas).
Além disso, pude rever um pessoal do Guru-SP (dia 29 tem o Ruby on Rails no Mundo Real 2010, estaremos lá!) e ainda conhecer e conversar um pouco com o Akita, que deu uma dica que pode ser bem útil para nós. 🙂
Para terminar o post, gostaria de dá os parabéns ao Alexandre Porcelli, pelo excelente evento! E também a todos que foram, afinal como o Porcelli falou “é um evento da comunidade para a comunidade”. 😀
-Se o seu modelo de dados se adequa bem ao modelo chave/valor