Estou usando os bancos de dados NoSQL há algum tempo e esta é minha contribuição para o tópico:
Um ótimo caso de uso para um banco de dados NoSQL é um aplicativo para geração de estatísticas e / ou relatórios , especialmente quando os dados são fornecidos por uma fonte de terceiros.
Em uma situação como essa, um banco de dados NoSQL pode ser uma ótima escolha
Vamos considerar, por exemplo, o MongoDB :
Depois que você tiver seus dados em JSON (eles podem vir de uma API de terceiros ou ser exportados de um aplicativo sql) no MongoDB, é bastante fácil importar e atualizar os dados JSON no banco de dados; por exemplo, usando o mongoimport
utilitário de linha de comando
Nesse ponto, é muito simples criar consultas dinâmicas com filtragem e agrupamento, que se encaixam bem nesse tipo de aplicativo.
Por exemplo, usando a Estrutura de agregação :
$pipeline = [];
//filter by date
$pipeline[] = [ '$match' => [ 'created_at' => [ '$gte' => $starDate, '$lte' => $endDate ] ] ];
//if we want to filter by a specific field, we add the filter to the pipeline array
if( $filters->isFilterByField() )
$pipeline[] = [ '$match' => [ 'field' => $fieldValue ] ];
//group the results by date and get the count
$pipeline[] = [ '$group' => [ '_id' => '$created_at', 'num_elements' => [ '$sum' => 1 ] ] ];
return $collection->aggretate( $pipeline );
Gostaria de destacar a facilidade com que podemos adicionar / remover dinamicamente filtros usando estruturas de dados php e evitando a concatenação tediosa de strings para criar nossas consultas. Com essa abordagem, adicionar / remover filtros dinamicamente é tão fácil quanto adicionar / remover elementos de uma matriz
Outro grande benefício vem do fato de que uma solução como essa provavelmente será mais rápida do que o uso de um banco de dados relacional , onde precisamos fazer junções com tabelas diferentes para obter todos os dados de que precisamos
Além disso, este caso de uso é ideal porque evita todos os principais limites de um banco de dados NoSQL:
Falta de transações: o aplicativo não realiza gravações, mas apenas lê, portanto, não precisamos de transações.
Falta de junções entre tabelas: não precisamos de junções, pois podemos usar redundância para armazenar nossos dados desnormalizados nas coleções. Como apenas lemos dados, não precisamos nos preocupar em sincronizar dados desnormalizados entre as atualizações.
Dessa forma, podemos nos concentrar em armazenar os dados com redundância de uma maneira que se adapte bem às nossas consultas , que serão focadas em coleções únicas.
Estou escrevendo isso porque, se eu tivesse lido algo assim há algumas vezes, teria me poupado algum tempo para fazer pesquisas
Espero que seja útil para alguém