Ich benutze seit einiger Zeit NoSQL-DBs und dies ist mein Beitrag zum Thema:
Ein großer Anwendungsfall für eine NoSQL - Datenbank ist eine Anwendung für Statistik und / oder Berichte Generation , expecially , wenn Daten von einer Dritten Quelle vorgesehen ist.
In einer solchen Situation kann eine NoSQL-Datenbank eine gute Wahl sein
Betrachten wir zum Beispiel MongoDB :
Sobald Sie Ihre Daten in JSON haben (sie könnten von einer Drittanbieter-API stammen oder aus einer SQL-Anwendung exportiert werden), ist es in MongoDB ziemlich einfach, die JSON- Daten in die Datenbank zu importieren und zu aktualisieren . beispielsweise mit dem Befehlszeilen mongoimport
Dienstprogramm
Zu diesem Zeitpunkt ist es sehr einfach, dynamische Abfragen mit Filterung und Gruppierung zu erstellen , die gut zu dieser Art von Anwendung passen.
Beispiel: Verwenden des 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 );
Ich möchte auf die Leichtigkeit hinweisen, mit der wir Filter mithilfe von PHP-Datenstrukturen dynamisch hinzufügen / entfernen können und die mühsame Verkettung von Zeichenfolgen beim Aufbau unserer Abfragen vermeiden. Mit diesem Ansatz ist das Hinzufügen / Entfernen von Filtern dinamycally so einfach wie das Hinzufügen / Entfernen von Elementen zu einem Array
Ein weiterer großer Vorteil ergibt sich aus der Tatsache, dass eine solche Lösung wahrscheinlich schneller ist als die Verwendung einer relationalen Datenbank , in der Verknüpfungen mit verschiedenen Tabellen hergestellt werden müssen, um alle benötigten Daten zu erhalten
Außerdem ist dieser Anwendungsfall optimal, da alle Hauptgrenzen einer NoSQL-Datenbank vermieden werden:
Fehlende Transaktionen: Die Anwendung führt keine Schreibvorgänge durch, sondern nur Lesevorgänge. Daher benötigen wir überhaupt keine Transaktionen
Fehlende Verknüpfungen zwischen Tabellen: Wir benötigen keine Verknüpfungen, da wir Redundanz verwenden können , um unsere denormalisierten Daten in den Sammlungen zu speichern . Da wir nur Daten lesen, müssen wir uns keine Sorgen um die Synchronisierung denormalisierter Daten zwischen Aktualisierungen machen.
Auf diese Weise können wir uns darauf konzentrieren, die Daten redundant in einer Weise zu speichern, die gut zu unseren Abfragen passt und sich auf einzelne Sammlungen konzentriert.
Ich schreibe das nur, denn hätte ich so etwas vor einiger Zeit gelesen, hätte ich mir Zeit gespart, um Nachforschungen anzustellen
Hoffe, es wird jemandem nützlich sein