Od jakiegoś czasu używam baz danych NoSQL i to jest mój wkład w temat:
Wielki przypadek użycia dla bazy danych NoSQL jest aplikacją dla statystyk i / lub raporty generacji , szczegĂłlnie gdy dane są dostarczane ze źródła osób trzecich.
W takiej sytuacji baza danych NoSQL może być świetnym wyborem
Rozważmy na przykład MongoDB :
Gdy masz już swoje dane w formacie JSON (mogą pochodzić z zewnętrznego interfejsu API lub zostać wyeksportowane z aplikacji sql) w MongoDB jest dość trudne importowanie i aktualizowanie danych JSON w bazie danych; na przykład za pomocą mongoimport
narzędzia wiersza poleceń
W tym momencie bardzo łatwo jest budować dynamiczne zapytania z filtrowaniem i grupowaniem, które dobrze pasują do tego rodzaju aplikacji.
Na przykład korzystając ze struktury agregacji :
$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 );
Chciałbym zwrócić uwagę na łatwość, z jaką możemy dynamicznie dodawać / usuwać filtry przy użyciu struktur danych php i unikać żmudnego łączenia ciągów znaków w celu tworzenia naszych zapytań. Dzięki temu podejściu dodawanie / usuwanie filtrów w sposób dynamiczny jest tak proste, jak dodawanie / usuwanie elementów z tablicy
Kolejna wielka korzyść wynika z faktu, że takie rozwiązanie prawdopodobnie będzie szybsze niż korzystanie z relacyjnej bazy danych , w której musimy łączyć różne tabele, aby uzyskać wszystkie potrzebne dane
Poza tym ten przypadek użycia jest optymalny, ponieważ pozwala uniknąć wszystkich głównych ograniczeń bazy danych NoSQL:
Brak transakcji: Aplikacja nie zapisuje, a jedynie odczytuje, więc w ogóle nie potrzebujemy transakcji
Brak złączeń między tabelami: nie potrzebujemy złączeń, ponieważ możemy użyć redundancji do przechowywania naszych zdenormalizowanych danych w kolekcjach. Ponieważ czytamy tylko dane, nie musimy się martwić synchronizacją zdenormalizowanych danych między aktualizacjami.
W ten sposób możemy skupić się na przechowywaniu danych z redundancją w sposób dobrze dopasowany do naszych zapytań , które będą koncentrować się na pojedynczych kolekcjach.
Piszę to tylko dlatego, że gdybym jakiś czas temu czytał coś takiego, zaoszczędziłoby mi trochę czasu na robienie badań
Mam nadzieję, że komuś się przyda