O termo persistência poliglota se tornou frequente na minha vida de consultor quando comecei a trabalhar com big data e bancos não relacionais (NoSQL), principalmente MongoDB.
A experiência mostrou que usar mais de um banco de dados em uma mesma aplicação pode multiplicar seu fator de sucesso. O(s) banco(s) deixa(m) de ser o gargalo, se transforma na principal solução e pode elevar muito o nível de maturidade de qualquer aplicação, indpendente de sua natureza.
Podemos usar uma aplicação de e-commerce como exemplo. Ao fazer uma análise do comportamento de navegação dos usuários, percebemos que ficam mais tempo olhando detalhes dos produtos, buscando informações e fazendo comparações entre diferentes modelos do mesmo produto. Ou seja, o catálogo de produtos é a parte do site que concentra maior parte dos acessos. Nem todo mundo que está navegado vai realizar uma compra naquele instante.
Se o catálogo de produtos estiver no MongoDB, podemos usar todas as vantagens de um modelo de persistência baseada em documentos para expandir e criar features interessantes neste catálogo. Também podemos escalar horizontalmente, criar shards e replica sets, tornando a navegação no site bastante rápida e estável. Também podemos estar preparados para uma estrutura elástica em momentos de pico, como blackfriday, dia das mães e natal.
O cadastro de usuários, dados financeiros e detalhes da compra já realizada pode ficar no Postgresql e assim usar todos os recursos ACID e transacional que um banco relacional oferece.
Também podemos implementar um ótimo sistema de recomendações, baseada no perfil do usuário e seus interesses com base na navegação e medindo quanto tempo ele ficou em cada produto, classificando assim seus maiores interesses. Para isso, usamos um banco baseado em grafos como o Neo4J para criar essa base de recomendações, específica para cada usuário.
Podemos ir além, usar MongoDB novamente para uma ferramenta de BI (Business Inteligence), usar Riak para carrinho de compras e Redis para cache.
Esse exemplo mostra que uma aplicação de e-commerce pode ficar mais eficiente ao usar pelo menos 3 bancos diferentes: MongoDB, PostgreSQL e Neo4J. Cada banco fica responsável por uma parte da aplicação, isso é usar a ferramenta certa para cada etapa.
Palestra no FISL
No dia 10 de Maio, às 13h, na sala 41B estarei palestrando sobre esse assunto durante o Fórum Internacional de Software Livre, em Porto Alegre. Vou mostrar exemplos práticos e explorar melhor como a persitência poliglota pode ser implementada em diferentes aplicações. Essa palestra é indispensável para arquitetos de soluções, desenvolvedores e interessados em big data e NoSQL.
Quem puder comparecer e ajudar a enriquecer esse assunto, será muito bem-vindo! Te vejo por lá!
Atualização
A sala estava quase lotada! Agradeço a cada um de vocês pela participação, espero que tenham gostado. Abaixo, os slides da minha apresentação.