Pular para o conteúdo principal

Tendências: NoSQL

Muitos de nós já fomos testemunhas e presenciamos tendências tecnológicas virem com intensidade e se dispersarem tão rapidamente como surgiram.

Há alguns anos acompanho a popularização e a adesão de padrões de infraestruras e plataformas para suportar aplicações web. A decisão de usar uma ou outra solução é com freqüência respaldada por casos de sucessos. Notadamente é considerável o peso dado ao que a start-up de sucesso do momento está utilizando. Tais decisões levam a uma reação em cadeia que direciona o mercado de desenvolvimento de software de uma maneira bem significativa.

Uns dos mais populares stacks de hoje tem uma abreviação peculiar: LAMP. Esta combinação de letras são, na verdade, atalhos para os mais famosos projetos open source que se tem conhecimento: Linux, Apache (servidor HTTP) e MySQL. A última letra desta seqüência merece um destaque pela sua ambigüidade pois pode simbolizar a inicial de uma entre as mais populares linguagens script (Python, PHP e Perl).

Particularmente acredito que esta decisão arquitetural é acertada para 95% (se não mais) dos casos, mas ter a certeza que não estaremos entre os 5% restantes em nenhuma condição, é uma resposta que poderíamos obter apenas vinda de uma divindade suprema.

A web e sua intrínseca dimensão global tem o potencial de levar os mais experientes dos arquitetos de sistemas de volta aos bancos altos de suas pranchetas, carregando consigo um problema que pode consumir muito capital, humano e não, que deve ser amenizado idealmente em questão de horas ou, no mais tardar, em dias.

Escalabilidade é um tema bastante complexo e armazenamento e processamento de grandes volumes de dados são focos de pesquisas que estão bem aquecidas hoje em dia. Um dos mais ativos movimentos nesta linha está tomando forma, encorpando e sendo batizado. Chama-se NoSQL.

Em um livro recém lançado intitulado “Hadoop: The Definitive Guide” (escrito por Tom White) há uma passagem digna de nota (em uma tradução livre):


...”Este é o resumo de como a história acerca de escalabilidade no uso de um banco de dados relacional se desenrola. A seguinte lista assume uma aplicação de sucesso, de demanda crescente.
  • Lançamento ao público inicial:
    Cópia da instância MySQL de desenvolvimento para o ambiente de produção, compartilhado e remoto, tendo um esquema de dados bem definido.

  • A aplicação se torna mais popular; requisições demasiadas de leitura atingindo o banco de dados:
    Adiciona-se “memcached” ao sistema para que as requisições mais comuns se mantenham em memória. As leituras ao banco de dados não são mais estritamente ACID; dados armazenados em memória devem ser invalidados por algum mecanismo.

  • A aplicação continua com crescente demanda; requisições demasiadas de escrita atingindo o banco de dados:
    Escala-se verticalmente o MySQL através da atualização de hardware do servidor com 16 núcleos, 128 GB de RAM e bancos de discos rígidos com 15000 RPMs. Oneroso.
  • Novos recursos implementados no sistema aumentam a complexidade das consultas SQL; agora temos muitos “joins”:
    Desnormalização dos dados para reduzir “joins” (Isto não é o que eles ensinam na escola para DBA).
  • Demanda da aplicação cresce e derruba o servidor; tudo está muito lento:
    Pára-se com qualquer processamento no lado do servidor.
  • Algumas consultas ainda estão lentas:
    Cria-se periodicamente “views” materializadas das consultas mais complexas, tenta-se eliminar “joins” na maioria dos casos.
  • Leituras estão aceitáveis mas escritas estão cada vez mais lentas e lentas:
    Elimina-se índices secundários e “triggers” (sem índices?).”...

Quantos de nós estamos envolvidos com sistemas que estão nesta rota? Será mesmo que nossas aplicações nunca atingirão tais níveis?

Nessa discussão, surgiu por acaso a opinião de um especialista em bancos de dados que fez seu discurso sustentado pelos mais altos títulos acadêmicos. Nesse almoço informal, em uma roda de nerds, a variável derradeira eleita foi a de volume de dados, sendo um bilhão de registros a fronteira limite que deveria definir o uso do tradicional ou de alternativas NoSQL. É uma fórmula simples, fácil de monitorar mas ingênua por demais.

Um sistema ao atingir tamanha proporções será inevitavelmente complexo e rico em recursos que foram implementados durante sua natural evolução. Isto tornará inviável qualquer mudança de porte a um custo aceitável. Reescrever o sistema pode até ser mais econômico em alguns casos.

O fundamental da arquitetura, seja ela de sistema ou não, é primar pelo alicerce. Escalabilidade é um dos muitos requisitos que costumamos subjulgar, deixando-o de lado, delegando completamente ao hardware e a soluções out-of-the-box essa incumbência.

A promessa NoSQL consiste em endereçar os requisitos de escalabilidade através de camadas de software que implementam suporte a processamento e sistema de arquivos distribuidos em uma rede de servidores comuns. Em conjução, um efetivo sistema de gerecencimento de recursos enfatiza que a adição, remoção ou uma eventual falha de qualquer um desses componentes não comprometam ou exijam qualquer intervenção na aplicação.

Há várias empresas sérias já fazendo uso dessas tecnologias e até mesmo oferecendo-as como serviços a preços competitivos.

O questionamento agora girará em torno de qual platforma usar em nossos novos projetos: LAMP ou LANP.


Referências:
Hadoop: http://hadoop.apache.org/
HBase: http://hadoop.apache.org/hbase/
CouchDB: http://couchdb.apache.org/
HyperTable: http://www.hypertable.org/
MongoDB: http://www.mongodb.org/
Cassandra: http://incubator.apache.org/cassandra/


PS.: Sugestões de temas para os próximos posts serão bem vindas!

Comentários

Yara Senger disse…
Bene,

Seu post foi muito interessante e fez refletir. Mas, pelo menos para mim ainda ficou uma interrogação... ou melhor, uma nuvem (risos).

O que é utilizado para recuperar os dados ? Fazer uma busca ou inserção no lugar do SQL ?

[]s
Yara
Yara,

A sua pergunta é provavelmente merecedora de um outro "post".
Resumidamente, cada solução NoSQL implementa um conjunto próprio de APIs que por hora, não são padronizadas.
Estas APIs são expostas à aplicação através de classes em Java, pelo uso de "frameworks" que encapsulam serviços como o Thrift ou via web service (RESTFul).
Uma característica importante desses sistemas está no fato que eles são orientados a documentos tendo tuples (conjuntos de chave/valor) como estrutura de dados fundamental.
A grande maiorias dessas soluções são baseadas ou inspiradas por um componente crítico para o Google conhecido como Bigtable.

[]s,

Bene.
Yara Senger disse…
Bene,

Estas soluções são indicadas / utilizadas apenas para aplicações Web / sites ou também são utilizadas com eficiência para soluções corporativas com transações mais complexas ?

Um abraço,
Yara,

A adoção destas soluções em ambiente corporativos ainda engatinha mas há alguns casos de sucesso em empresas como Visa, JPMorganChase, New York Times e outros.
Em todos esses casos, estas soluções são utilizadas principalmente para análise, agregação e classificação de grandes volumes de dados para a obtenção de informações estratégicas e padrões estatíscos. Após estes enriquecimentos, tais informações são utilizados para determinar comportamento de usuários, autenticidade de transações financeiras ou como dados de treino para aplicações que se utilizam de algorítmos como o de machine learning.
Em ambientes OLTP, haverá uma espera pelo amadurecimento destas soluções alternativas até que provem serem tão robustas quanto os bancos de dados tradicionais de hoje.

[]s,

Bene.
Unknown disse…
Este comentário foi removido pelo autor.
Unknown disse…
Legal o post Benedicto, parabéns! Gostaria só de deixar um comentário (ok, 1 ano e meio após o post mas que ainda é atual...) sobre a minha pouquíssima experiência sobre o uso de BDs noSQL (realmente sou um newbie no assunto).

Há um tempo atrás eu comecei a estudar um pouco de noSQL porque tinha interesse em utilizar uma solução desse tipo em um projeto open source que participo. Como eu não gosto muito de fazer as coisas às cegas, fui pesquisar em alguns livros sobre MongoDB, Cassandra e CouchDB, para saber onde estava pisando. Um ponto interessante que todos abordam é exatamente onde se encaixam as soluções noSQL e, uma coisa fica clara em toda literatura: os bancos noSQL não vêm para substituir bancos relacionais, mas sim para preencher uma lacuna que sempre era (e ainda é) preenchida com os BDs relacionais mas exige um malabarismo imenso, torto e complexo. O que acontece é que existem certos problemas que justificam o uso de soluções noSQL e outros não, por exemplo, se você tem um sistema no qual não há manipulação massiva de dados e escalabilidade não é necessariamente um problema, então é provável que um banco de dados relacional deve funcionar sem problemas! Outro fator que entendi (claro que eu posso estar totalmente errado) é que se eu pretendo utilizar somente uma máquina como banco de dados então não faz sentido utilizar um banco noSQL. Isso a princípio me deixou relativamente desapontado porque parece que os noSQLs não servem para o tipo de problema que eu quero resolver (na verdade eu realmente queria usar um noSQL), mas por outro lado fiquei satisfeito porque pelo menos foi definido um contexto mais claro de uso dessa solução. Por essas razões eu acabei optando por ficar no bom e velho MySQL, mas reitero que eu realmente gostaria de utilizar um banco noSQL!!!

Resumindo, na minha opinião, eu acho que os bancos de dados noSQL vieram para ficar e já são realidade. Acredito que ainda falta explorar um pouco mais essa fronteira de onde e como eles podem ser utilizados, mas creio que isso é questão de tempo. De qualquer forma, o assunto é muito interessante e acho que realmente vale a pena estudar e entender um pouco mais sobre.

Desculpem as bobagens que eu provavelmente escrevi :-)

Abraços,
Wellington.

Postagens mais visitadas deste blog

10 reasons why we love JSF

1. One-slide technology: it's so simple that I can explain basic JSF with one slide. 2. Easy to extend: components, listeners, render kit, Events, Controller, etc. 3. Real-world adoption: JBoss, Exadel, Oracle, IBM, ... 4. Architecture model: you can choose between more than 100 different architecture. 5. Open-mind community: using JSF you are going to meet very interesting people. 6. We are using JSF the last 5 years and we found very good market for JSF in Brazil 7. Progress: look to JSf 1.1 to JSF 1.2, JSF 1.2 to JSF 2.0. People are working really hard! 8. Many professionals now available 9. It's a standard. It's JCP. Before complain, report and help! 10. Ed Burns, spec leader, is an old Globalcode community friend! EXTRA: My wife is specialist in JSF. She's my F1 for JSF :) Nice job JSF community! -Vinicius Senger

Facelets ainda mais divertido! Parte II

De volta ao Facelets , na primeira parte mantive o foco na utilização de templates e técnicas de reutilização visando maior agilidade para desenvolver telas com JSF , mas o Facelets vai bem além disso! Nesse post vou comentar e mostrar um pouco sobre a criação de componentes UI (User Interface) usando xht ml - na minha opinião esse é o grande diferencial da tecnologia. Com esse recurso é possível customizar / padronizar componentes usando xhtml + tags JSF + JavaScript + Css, sem código Java. A ideia é bem próxima ao Tag File em uma rápida comparação com JSP (JavaServer Pages), mas no caso do Facelets feito de uma forma ainda mais simples e com aderência a (infra)estrutura do JSF. Vou descrever o mesmo cenário da primeira parte, um sistema composto por vários cadastros ( C reate R ead U pdate D elete). Pensando especificamente em cada formulário, usando como exemplo um rascunho ou protótipo para o cadastro de Fornecedores, podemos assumir o seguinte formato: campos para preenchi...

Devo fazer um curso ou ler um livro?

Acredito que todos os instrutores ou professores, independentemente da área, escola ou centro de treinamento, já devam ter recebido essa pergunta alguma vez na vida: devo fazer um curso ou ler um livro? Para responder a essa pergunta, precisamos avaliar os prós e contras de cada opção. Trabalho com treinamento há algum tempo e, hoje, recebi essa pergunta de um aluno. Não adianta responder a ou b sem argumentar, demonstrando as opções conforme a situação do aluno. O conteúdo, a forma de transmissão e a capacidade de assimilação do indivíduo são chaves para haver benefício maior de aprendizado. Tanto em um bom curso quanto em um bom livro, o conteúdo é a premissa básica . Por conteúdo entendemos: se está organizado; se respeita pré-requisitos; se promove o aprendizado guiado e incremental; se aborda de forma satisfatória os principais pontos; se tem bom balanço entre teoria, exemplos e prática (favorecendo exemplos e prática); se tem como premissa a acessibilidade possível (e cabível) pa...

Sistema interativo de TV Digital com Ginga-J

No início de 2009, os estudantes de Sistema de Informação do Centro Universitário de Votuporanga ( UNIFEV ), Caio César Pereira de Souza e Rodrigo Gonçalves Constantino me apresentaram uma proposta para que eu fosse co-orientador junto ao professor orientador Djalma Domingos da Silva , em seu Trabalho de conclusão de curso (TCC) com tema TV Digital. A base que motivou o assunto, foi a palestra apresentada por Maurício Leal na I Conferência Java Noroeste sobre o tema TV Digital, realizada em 2006 em Votuporanga-SP. Ficamos muito entusiasmados com a possibilidade de interatividade na TV Digital, e a grande quantidade de possibilidades de desenvolvimento de aplicativos nesta área. Acompanhamos de perto as notícias na imprensa e todo o esforço e iniciativas realizadas pelo Fórum do Sistema Brasileiro de TV Digital Terrestre (SBTVD) , que organizou e produziu especificações ABNT, normatizando o sistema de TV Digital Terrestre. O foco do TCC foi realizar o desenvolvimento de uma pequena ...

Hackeando o Prezi com Robot, Socket e Android

O Prezi é uma ferramenta online para construção de apresentação multimídia semelhante ao famoso Power Point, porém, através de templates prontos e animações bem trabalhadas, o Prezi consegue dar uma dinâmica e uma qualidade visual muito maior. Mas mesmo com toda esta propaganda inicial me sentia desconfortável com uma situação do Prezi: necessitaria estar perto do computador ou do notebook para ficar trocando os slides, quer dizer, dando mais um passo na animação construída na ferramenta. Isso pesa muito quando temos um descendente de italiano (meu caso) que fala muito com as mãos e não consegue ficar parado durante a palestra. Desta forma decidi “hackear” o Prezi. Vale dizer que este termo é confundido com o termo “Crakear”, que, neste caso, quer dizer pessoas que invadem ou roubam dados digitais com objetivo de destruir sistemas ou de obter lucro de forma ilícita. O Hacker é o “nerd do bem”!. Inicialmente tentei mudar o aplicativo que podemos baixar do Prezi e passar...

Globalcode no Facebook

As redes sociais estão em alta faz tempo, diversos artigos e blogs falando sobre a extinção da comunicação via e-mail e as novas gerações dialogando somente através de instant messenger, orkut, facebook, twitter... e nós, jovens de 30 anos ficando ultrapassados ainda viciados naquela nova forma de comunicação, o e-mail! Já faz tempo que entendemos os valores das redes sociais, especialmente do twitter. Fazia tempo que pensamos em investir um tempo para criar as páginas para a Globalcode no facebook. Junto com a Ana Abrantes começamos a criar um usuário Globalcode http://www.facebook.com/globalcode que administra várias páginas! Depois criamos as página para os principais cursos da Globalcode e também para a iniciativa Open4Education, e estamos trabalhando a todo vapor para aumentar a integração com nosso site e com o blog. Colocamos o botãozinho "Curtir" ou "Like" nos cursos, ou seja, a partir da página do curso você pode "Curtir" no facebook nos seus c...