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

PrimeFaces com JSF2 no ScrumToys

O JSF traz um grupo de componentes visuais prontos, a partir da versão 2.0 com suporte a Ajax nativo! Melhor que isso é a possibilidade de customizar ou utilizar uma suíte de componentes prontos para "turbinar" o projeto com o minimo de esforço. PrimeFaces é uma suite de componentes JSF customizados, a maioria com suporte a ajax, conta com um Kit para desenvolvimento mobile, é open source, a documentação é razoável, facíl de instalar e usar. Nesse exemplo utilizo o PrimeFaces 2.0.0, versão com suporte a JSF 2, no ScrumToys. Conheçe o ScrumToys ? ScrumToys é um Projeto Exemplo para JavaServer Faces 2.0 dentro do NetBeans 6.8, criado e mantido pelo time da Globalcode. É interessante que você tenha o NetBeans 6.8 para fazer esse exemplo, senão tiver baixe aqui . Baixe também, aqui , o PrimeFaces e o configure no NetBeans como biblioteca para o ScrumToys. Inicialmente o PrimeFaces requer a runtime JSF, mas isso pode variar dependendo de quais componentes você utilize, mai

Seja um Palestrante do TDC Connections 2022

A Equipe TDC está muito feliz e orgulhosa em começar mais uma jornada de eventos em 2022 e criar muitas oportunidades! Agora, chegou o momento para você que sempre quis ser palestrante mas não teve oportunidade, e também de quem já é palestrante experiente, e está ansioso para compartilhar aquela nova prática ou caso de sucesso fresquinho, submeter sua palestra para o TDC Connections e co-criar conosco o maior evento de desenvolvedores do Brasil.  Link de inscrição: https://cfp-conn.thedevconf.com.br/?_ga=2.103579840.1386204218.1643036190-1988609034.1631800014 Confira aqui o calendário do TDC 2022. Nesta edição teremos muitas novidades e você poderá palestrar de forma Online ou Presencial! Entenda como vai funcionar o TDC CONNECTIONS: Nesta edição, além de todo o conteúdo dividido em Trilhas transmitidas ao vivo (13 trilhas simultâneas) também teremos dois eventos híbridos em Recife e Belo Horizonte, que terão uma trilha por dia, ao vivo, para um público limitado, seguindo protocolo

Entendendo como funciona a programação de computadores: linguagens de programação, lógica, banco de dados

Nesse post, diferente dos últimos que foram mais enfáticos nas experiências com tecnologias, vou focar um pouco mais nos profissionais que estão começando, ou pretendem ingressar na área de desenvolvimento de software, falando sobre conceitos fundamentais relacionados a programação em geral . Mercado de trabalho para programação Conforme já sabemos, o mercado de desenvolvimento de software, especialmente no Brasil, continua em franca expansão, sendo que cada vez mais as empresas buscam desenvolver seus próprios sistemas usando as mais diferentes e novas tecnologias. Algumas matérias interessantes: As seis profissões mais valorizadas em 2010 no IDG Now! Muitas vagas e sensação de reaquecimento da economia Por isso, a área de desenvolvimento de software tem despertado interesse em muitos profissionais de outras áreas que desejam mudar de profissão, já que as oportunidades de trabalho tendem a ser maiores. Esse é um perfil presente em muitos dos clientes da Globalcode que acabou m

JSON fácil em Java com GSon !

Ola pessoal ! O formato JSON ( J ava S cript O bject N otation) vem se consagrando cada vez mais na comunicação de dados, principalmente nos dispositivos móveis devido a esse formato ser mais leve que o XML e também mais legível. Uma prova disso são as inúmeras bibliotecas que existem para manipular esse formato, e no caso do Android, o suporte ao JSON é nativo. Mas apesar de ter esse suporte nativo, algumas operações devem ser feitas manualmente e o código acaba ficando um pouco verboso e repetitivo, já que para cada objeto que se deseja transmitir é necessário fazer um método que lê as propriedades do JSON e faz as devidas atribuições no seu objeto Java. Vamos supor o seguinte objeto sendo transmitido em JSON: {   user: {     id: 123456,     name: "Neto Marin",     username: "netomarin",     email: "netomarin@globalcode.com.br"   } } Se você fosse tratar um Webservice que envia esse JSON para o seu aplicativo Android, além de criar a o

Top 4 desafios do gestor de TI e como superá-los

  O setor de TI se apresenta como uma área essencial ao desenvolvimento e expansão da empresa, em especial, aquelas que têm a criação de soluções tecnológicas como core business. O mercado dinâmico da atualidade, com mudanças constantes e concorrência elevada, exige aperfeiçoamento do gestor de TI para se destacar em suas atividades. Pensando em te ajudar nesse processo, separamos 4 desafios do gestor de TI e como superá-los. Acompanhe! Transformação digital na atualidade A transformação digital é constante e define os caminhos futuros da nossa sociedade. Por isso, o setor de TI vem se tornando mais estratégico em empresas de todos os segmentos. O home office é um bom exemplo de como a revolução digital está se processando. Vamos falar sobre ele e outros pontos nos tópicos a seguir. Confira! Desafios do gestor de TI Para se manter atualizado sobre o tema e permanecer competitivo no mercado, é  necessário acompanhar as tendências de TI . Confira, abaixo, alguns dos principais desafios d

Segurança da informação no alvo: o que esperar do futuro?

A segurança da informação não se trata apenas de proteger os dados contra acesso não autorizado. Na prática, refere-se aos recursos que impedem: uso; registro; inspeção; divulgação; interrupção; modificação; destruição de dados. O uso de dados pode abranger desde um perfil nas redes sociais a detalhes financeiros, biometrias ou novos projetos. Por isso, a preocupação com a proteção dos dados é crescente, tanto para empresas quanto clientes. Para muitas pessoas, a coleta de dados é considerada invasão de privacidade, criando desconfiança do titular dos dados, pois o uso dos dados pode ser facilmente corrompido, utilizado para fins não declarados. Apesar de o uso dos dados terem impulsionado os avanços tecnológicos na última década, as organizações lidam com o desafio de distinguir dados de informações pessoais de modo a proteger a privacidade e as preferências dos clientes. Neste artigo, abordaremos o impacto da segurança da informação e o que esperar do futuro. Confira casos conhecido