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

2º Bate Papo do SP-GTUG - Divulgação

Pessoal, Para aqueles que já estiveram presentes nas atividades do SP-GTUG (encontros ou bate papos na Globalcode), e para os que ainda não puderam estar presentes, teremos um novo bate papo acerca de mais duas tecnologias do Google: AdSense e Python no GAE. Este será o nosso segundo bate papo do SP-GTUG, nos mesmos moldes dos minicursos da Globalcode . Local e data O bate papo acontecerá no dia 27/03/10, das 10:00 às 13:00 na Globalcode. Para fazer sua inscrição e participar acesse a home da Globalcode e vá até a parte de "Minicursos Gratuitos da Semana ". Conteúdo das apresentações Abaixo seguem as descrições passadas pelos palestrantes: Título: "Algoritmos em Python" Resumo: Python é uma linguagem considerada frugal, simples, sem ser simplória! Entenda como construir algoritmos ninjas com essa linguagem, adotada pela Google e pelo MIT. Veremos muito, muito código, desde algoritmos clássicos até tutoriais do

JSF 2 - Composite Components, você não precisa mais ser um ninja

Estamos em uma nova era da computação, os dados não estão mais localizados em um banco dentro de sua empresa, vivemos a explosão de redes sociais, informações são geradas a todo instante, e se torna essencial que sua aplicação conheça os serviços disponíveis na web e consumam suas APIs geralmente disponíveis por serviços REST. Legal, mas como ficam meus aplicativos Java EE neste novo cenário? Para quem vem acompanhando a evolução da plataforma, é notório que todo esforço vem sendo utilizado para aumentar a produtividade e a integração com novos serviços. Basicamente duas especificações surgem com muita força para atender este cenário, a JSR - 314 (JSF-2) e JSR - 311 (JAX-RS), neste post exploraremos a JSR-314 (JSF2) e sua nova forma de criar Composite Components. Uma das grandes queixas dos desenvolvedores JSF era a complexidade em criar composite components, era necessário um vasto conhecimento sobre o ciclo de vida de uma aplicação JSF. Agora, você não precisa ser mais um “ninja” em

Gosta de informática e sonha ser programador Java um dia ?

A Globalcode está procurando jovens que queiram ser programadores no futuro, para fazer parte de sua equipe de vendas e operacional na unidade Paraíso em São Paulo somente. O grande diferencial é o planejamento para carreira de programador. O planejamento de cursos do portifólio da Globalcode: Academia do Programador, Academia Java, Academia Web, Robótica, Eletrônica, etc, será realizado periodicamente de acordo com o desempenho e interesse individual. Atenção : Este não é um estágio para trabalhar com Java, são duas vagas CLT administrativas para pessoas que queiram ser programadores no futuro. Perfil : Conhecimentos de informática básica, saber lidar com pessoas e trabalhar em equipe. Deve ter concluído o ensino médio, ter boa escrita, ser organizado, responsável, comprometido e dinâmico. Interesse por computação, programação, internet, robótica, eletrônica,... Temos duas vagas para jovem-aprendiz abertas: 1) Setor operacional No dia a dia Serviços externos Controle de estoqu

Palestras do TDC Business Disponíveis Online

🚨 Atenção, TDC Lovers! O TDC Business em São Paulo acabou, mas os conteúdos mal começaram!  Não pô de aproveitar a STADIUM ao vivo? Não tem problema, porque trouxemos ela até você. Todas as palestras da STADIUM, palco principal do TDC, já estão no ar e liberadas para qualquer pessoa assistir. Essa Trilha incrível conta com palestras de Trilhas Premium e temas variados de forma GRATUITA para você poder maratonar de casa!  Aproveite para prestigiar seu evento de TI favorito com pipoca direto do seu sofá. 🎥 🍿 Gravação da STADIUM, 22 a 24 de Agosto de 2022, disponível aqui: https://www.globalcode.com.br/videos/tdc-2022-business/  Todas as demais trilhas do TDC Business serão publicadas gradualmente nas próximas semanas, fique atento aos nossos e-mails, você será notificado por lá quando sua Trilha estiver disponível. Acompanhe nossas redes sociais para não perder nada e ficar por dentro de todas as novidades do TDC!

TDC INNOVATION lança University Pass

Modalidade de ingresso tem como objetivo ajudar na capacitação dos universitários Uma pesquisa realizada em 2020 pela Associação Brasileira das Empresas de Tecnologia da Informação e Comunicação (Brasscom) diz que até o ano de 2024 o Brasil precisará de cerca de 420 mil profissionais na área de Tecnologia da Informação. Porém, por ano, a mesma pesquisa diz que o país forma apenas 46 mil profissionais capacitados no nicho. Pensando nisso, para ajudar na formação e capacitação desses jovens profissionais, o TDC INNOVATION, segunda edição do ano do The Developer's Conference, lança o University Pass, modalidade de ingresso que possibilita aceso digital gratuito a todas as palestras do evento, ou com 50% de desconto para quem preferir ir pessoalmente. Com o tema central “Desafios para a criação do futuro Digital”, o TDC INNOVATION ocorrerá entre 1 e 3 de junho, de forma híbrida: presencialmente no Centro de Convenções CentroSul, em Florianópolis, e com transmissão simultaneamente pela