[quote=AbelBueno][quote=kicolobo]Bom gente, andando por pisos mais sólidos, alguém aqui já experimentou problemas interessantes com bases NoSQL que acabaram por fazerem voltar a avaliar o modelo relacional como solução?
É interessante termos este tipo de situação pra podermos discutir e entender melhor a questão.[/quote]
Apenas para complementar, eu gostaria de fazer a pergunta inversa :
Quais foram os problemas que já enfrentaram com bancos relacionais que foram resolvidos com NoSql ?
Eu não cheguei a implementar projetos com NoSQL, mas vi o Sql patinar quando precisei:
-
Controlar hierarquia de auto-relacionamento, como responder quem é o chefe do chefe do chefe…
-
Atributos variáveis e opcionais para as mesmas entidades ( a tabela esparsa que é citada no post).
Utilizar aquela técnica de EAV costuma causar graves problemas de performance.
[/quote]
Abel, EXCELENTE pergunta.
Vamos às respostas:
Eu constantemente passo por um problema (que inclusive ilustrei no meu post http://www.itexto.net/devkico/?p=1199) que é o de ter tabelas muito esparsas no banco de dados.
O que acontecia: eu precisava lidar com diversos registros pertencentes a um determinado tipo (equipamento pra ilustrar), e que eram salvos em uma base relacional.
Problema: cada um com seus próprios tipos de atributo e, pra piorar, que podiam variar o tempo inteiro. Então surgiam colunas que eram usadas em, por exemplo, um registro.
Pra resolver o problema, a outra abordagem seria criar uma estrutura muito complicada envolvendo meta-informações, contendo quais os campos que cada tipo de equipamento tinha… Uma meleca.
E o interessante é que temos um software gigantesco (Smartplant, da Intergraph) que funciona exatamente assim: tabelas ultra esparsas, com milhões de registros nos quais há colunas usadas por um, dois registros.
O modelo documental sem esquema resolveu o problema, porque assim eu podia armazenar todos os atributos que eu quisesse para cada equipamento de uma forma muito mais simples e fácil. E com a vantagem de que não precisava de joins complicados e este tipo de monstruosidade.
Outro caso em que o modelo relacional se mostrou limitado para mim (e ainda se mostra) diz respeito a soluções nas quais eu precise lidar com grafos. Por exemplo: um sistema de comissionamento. Comissionamento é o processo de teste de todos os equipamentos que vão fazer parte de uma planta. Para que a planta funcione direito, é necessário que seus dependentes também estejam ok, e por aí vai.
No modelo relacional representar grafos é bastante complicado. Questões do tipo: “me mostre as dependências de suas dependências” é complicado de implementar.
Usando o Neo4J, baseados em grafos, fica banal.
Como pode ver, são questões em que o seu domínio não é bem representado pelo relacional, ou seja, naqueles casos em que você vai além da visão bidimensional da tabela, ou que precisaria de tantas junções pra obter o mesmo resultado que simplesmente não justifica.
No entanto, em minha experiência estes se mostraram casos raros, bem raros mesmo infelizmente. Pra todos os outros, existe o relacional (desculpa MasterCard).