Sto usando NoSQL DB da un po 'di tempo, e questo è il mio contributo all'argomento:
Un ottimo caso d'uso per un database NoSQL è un'applicazione per la generazione di statistiche e / o report , in particolare quando i dati vengono forniti da una fonte di terze parti.
In una situazione del genere, un database NoSQL può essere un'ottima scelta
Consideriamo, ad esempio, MongoDB :
Una volta che hai i tuoi dati in JSON, (potrebbe provenire da un'API di terze parti o essere esportato da un'applicazione sql) in MongoDB è piuttosto semplice importare e aggiornare i dati JSON nel database; ad esempio utilizzando l' mongoimport
utilità della riga di comando
A questo punto è molto semplice creare query dinamiche con filtri e raggruppamenti, che ben si adattano a questo tipo di applicazione.
Ad esempio, utilizzando Aggregation Framework :
$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 );
Vorrei sottolineare la facilità con cui possiamo aggiungere / rimuovere dinamicamente i filtri utilizzando strutture di dati php ed evitando noiose concatenazioni di stringhe per costruire le nostre query. Con questo approccio aggiungere / rimuovere filtri dinamicamente è facile come aggiungere / rimuovere elementi da un array
Un altro grande vantaggio deriva dal fatto che una soluzione come questa è probabilmente più veloce rispetto all'utilizzo di un database relazionale , in cui dobbiamo fare join con tabelle diverse per ottenere tutti i dati di cui abbiamo bisogno
Inoltre, questo caso d'uso è ottimale perché evita tutti i limiti principali di un database NoSQL:
Mancanza di transazioni: l'applicazione non esegue scritture ma solo letture, quindi non abbiamo bisogno di transazioni
Mancanza di join tra le tabelle: non abbiamo bisogno di join, poiché possiamo usare la ridondanza per archiviare i nostri dati denormalizzati nelle raccolte. Dato che leggiamo solo i dati, non dobbiamo preoccuparci di sincronizzare i dati denormalizzati tra gli aggiornamenti.
In questo modo possiamo concentrarci sulla memorizzazione dei dati con ridondanza in un modo che si adatta bene alle nostre query , che si concentrerà su singole raccolte.
Sto solo scrivendo questo perché se avessi letto qualcosa del genere qualche volta fa, mi sarebbe stato risparmiato un po 'di tempo per fare ricerche
Spero che sia utile a qualcuno