He estado usando NoSQL DB por un tiempo, y esta es mi contribución al tema:
Un gran caso de uso para una base de datos NoSQL es una aplicación para la generación de estadísticas y / o informes , especialmente cuando los datos provienen de una fuente de terceros.
En una situación como esa, una base de datos NoSQL puede ser un gran opción
Consideremos, por ejemplo, MongoDB :
Una vez que tenga sus datos en JSON, (podría provenir de una API de terceros o exportarse desde una aplicación SQL) en MongoDB es bastante sencillo importar y actualizar los datos JSON en la base de datos; por ejemplo usando la mongoimport
utilidad de línea de comandos
En este punto es muy simple construir consultas dinámicas con filtrado y agrupación, que encajan bien con este tipo de aplicación.
Por ejemplo, usando el Marco de agregación :
$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 );
Me gustaría señalar la facilidad con la que podemos agregar / quitar filtros dinámicamente usando estructuras de datos php y evitando la tediosa concatenación de cadenas para construir nuestras consultas. Con este enfoque, agregar / eliminar filtros dinamycally es tan fácil como agregar / eliminar elementos de una matriz
Otro gran beneficio proviene del hecho de que una solución como esta es probable que sea más rápida que usar una base de datos relacional , donde tenemos que hacer uniones con diferentes tablas para obtener todos los datos que necesitamos
Además, este caso de uso es óptimo porque evita todos los límites principales de una base de datos NoSQL:
Falta de transacciones: la aplicación no realiza escrituras sino solo lecturas, por lo que no necesitamos transacciones
Falta de uniones entre tablas: no necesitamos uniones, ya que podemos usar la redundancia para almacenar nuestros datos desnormalizados en las colecciones. Como solo leemos datos, no debemos preocuparnos por sincronizar datos desnormalizados entre actualizaciones.
De esta manera, podemos centrarnos en almacenar los datos con redundancia de una manera que se ajuste bien a nuestras consultas , que se centrará en colecciones individuales.
Solo estoy escribiendo esto porque si hubiera leído algo así hace algunas veces, me habría ahorrado algo de tiempo hacer investigaciones
Espero que sea útil para alguien