Estou aprendendo sobre os bancos de dados NoSQL há uma semana.
Eu realmente entendo as vantagens dos bancos de dados NoSQL e os muitos casos de uso para os quais eles são ótimos.
Mas muitas vezes as pessoas escrevem seus artigos como se o NoSQL pudesse substituir os bancos de dados relacionais. E há um ponto em que não consigo entender:
Os bancos de dados NoSQL são (geralmente) armazenamentos de valores-chave.
Obviamente, é possível armazenar tudo em um armazenamento de valor-chave (codificando os dados em JSON, XML, qualquer que seja), mas o problema que vejo é que você precisa obter uma quantidade de dados que corresponda a um critério específico, em muitos casos de uso. Em um banco de dados NoSQL, você tem apenas um critério que pode procurar efetivamente - a chave. Os bancos de dados relacionais são otimizados para procurar efetivamente qualquer valor na linha de dados.
Portanto, os bancos de dados NoSQL não são realmente uma opção para dados persistentes que precisam ser pesquisados por seu conteúdo. Ou eu entendi algo errado?
Um exemplo:
Você precisa armazenar dados do usuário em uma loja virtual.
Em um banco de dados relacional, você armazena todos os usuários como uma linha na users
tabela, com um ID, o nome, o país dele etc.
Em um banco de dados NoSQL, você armazenaria cada usuário com seu ID como chave e todos os seus dados (codificados em JSON etc.) como valor.
Portanto, se você precisa obter todos os usuários de um país específico (por algum motivo, os profissionais de marketing precisam saber algo sobre eles), é fácil fazê-lo no Banco de Dados Relacional, mas não muito eficaz no Banco de Dados NoSQL, porque você precisa obtenha todos os usuários, analise todos os dados e filtre.
Não digo que seja impossível , mas fica muito mais complicado e acho que não é tão eficaz se você deseja pesquisar nos dados das entradas do NoSQL.
Você pode criar uma chave para cada país que armazene as chaves de todos os usuários que moram nesse país e obter os usuários de um país específico, obtendo todas as chaves depositadas na chave desse país. Mas acho que essa técnica torna um conjunto de dados complexo ainda mais complexo - é mais difícil de implementar e não é tão eficaz quanto consultar um banco de dados SQL. Então eu acho que não é uma maneira que você usaria na produção. Ou é?
Não tenho muita certeza se entendi mal algo ou negligenciei alguns conceitos ou práticas recomendadas para lidar com esses casos de uso. Talvez você possa corrigir minhas declarações e responder minhas perguntas.