Przypadki użycia dla NoSQL [zamknięte]

144

NoSQL cieszy się ostatnio dużym zainteresowaniem w naszej branży. Naprawdę interesuje mnie, jakie są opinie ludzi na temat najlepszych przypadków jego użycia w porównaniu z przechowywaniem w relacyjnych bazach danych. Co powinno skłonić programistę do myślenia, że ​​określone zbiory danych są bardziej odpowiednie dla rozwiązania NoSQL. Szczególnie interesują mnie MongoDB i CouchDB, ponieważ wydają się one zajmować najwięcej w zakresie rozwoju PHP i na tym się skupiam.

robjmills
źródło
6
Cassandra i MongoDB to zupełnie inne produkty - zupełnie inne kategorie . Odpowiedź na to pytanie byłaby łatwiejsza, gdyby chodziło o przypadki użycia dla określonego typu bazy danych (OODB, DODB, DKVS itp.) „NoSQL” to tylko ogólny termin na „wszystko, co nie jest SQL” - może równie dobrze być czymś w rodzaju BerkleyDB lub zbiorem płaskich plików znajdujących się w udziale sieciowym.
Aaronaught
@Aaronaught Doceniam różnice, myślę, że jestem winny używania terminu parasolowego z nosql
robjmills

Odpowiedzi:

86

Po prostu obiecaj sobie, że nigdy nie będziesz próbował mapować relacyjnego modelu danych do bazy danych NoSQL, takiej jak MongoDB lub CouchDB ... Jest to najczęstszy błąd popełniany przez programistów podczas oceny powstających technologii.

Takie podejście jest analogiczne do wzięcia samochodu i próby wykorzystania go do ciągnięcia wózka po drodze jak konia.

Jest to naturalna reakcja, wynikająca oczywiście z doświadczenia każdego, ale prawdziwą wartością korzystania z bazy danych dokumentów jest możliwość uproszczenia modelu danych i zminimalizowania cierpienia programisty. Twoja baza kodu zmniejszy się, błędów będzie mniej i łatwiej będzie do znalezienia, wydajność będzie niesamowita, a skalowanie będzie znacznie prostsze.

Jako założyciel Joomla jestem stronniczy :-), ale pochodzę z przestrzeni CMS, coś takiego jak MongoDB jest srebrnym pociskiem, ponieważ zawartość jest bardzo naturalnie mapowana do systemów dokumentów.

Innym świetnym przypadkiem dla MongoDB jest analiza w czasie rzeczywistym, ponieważ MongoDB ma bardzo wysoką wydajność i skalowalność, szczególnie w zakresie współbieżności. Na stronie MongoDB.org znajdują się studia przypadków, które pokazują te atrybuty.

Zgadzam się z poglądem, że każda baza danych ma swoje własne cele i przypadki użycia; odpowiednio przyjąć cel każdej bazy danych do oceny.

spacemonkey
źródło
1
naprawdę dobrze powiedziane spacemonkey, jestem w tej samej sytuacji co seegee, najwyraźniej mamy myśleć w nowy sposób i powinniśmy zadać sobie pytanie, w jaki sposób mogę uporządkować dane moich aplikacji w strukturę dokumentu, usuwając się ze sposobu myślenia RDBMS, kiedy to robimy analiza ta
on_
49

W witrynie MongoDB wspomniano o kilku świetnych przypadkach użycia - w każdym razie dla MongoDB. Podane przykłady to analiza w czasie rzeczywistym, logowanie i wyszukiwanie pełnotekstowe. Wszystkie te artykuły są warte przeczytania http://www.mongodb.com/use-cases

Jest też świetny opis, w którym baza danych NoSQL najlepiej pasuje do jakiego typu projektu: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

robjmills
źródło
8

To, co lubię w NoSQL, nie ma nic wspólnego z wydajnością, a wszystko z użytecznością. Magazyny dokumentów są po prostu łatwiejsze w obsłudze, gdy niepodzielne jednostki danych są podobne do dokumentów, ponieważ serializacja do i z obiektów jest banalna. To po prostu fajniejsze, a to ważny czynnik w przypadku projektów osobistych lub pobocznych.

ysimonson
źródło
1
Nie powiedziałbym dokładnie, że to trywialne , ale poza tym jest to dobra uwaga w przypadku baz danych zorientowanych na dokumenty. W przypadku niektórych innych produktów NoSQL jest odwrotnie - DKVS są zwykle trudniejsze do zmapowania niż bazy danych SQL / relacyjne bazy danych.
Aaronaught
8

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ą mongoimportnarzę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

Moppo
źródło
3

Gorąco polecam wykład Martina Fowlera:

https://www.youtube.com/watch?v=qI_g07C_Q5I

STRESZCZENIE: Martin przedstawia szybkie wprowadzenie do baz danych NoSQL: skąd się one wzięły, charakter modeli danych, których używają oraz inny sposób myślenia o spójności. Na tej podstawie wyjaśnia, jakie okoliczności należy rozważyć przy ich użyciu, dlaczego nie spowodują, że relacyjne bazy danych staną się przestarzałe, oraz ważne konsekwencje wytrwałości poliglotów.

Rysuje ładny obraz tego, czym jest NoSQL, różnymi kategoriami i rzeczami, które każdy musi zrozumieć, wychodząc ze świata relacyjnych baz danych. Pozdrowienia.

user3631881
źródło
Zrozumiano, będzie o tym pamiętać na przyszłość.
user3631881
3

Najpierw musisz zrozumieć CAP (spójność, dostępność i partycjonowanie, gdzie musisz wybrać dwie z trzech) teorię i nasz biznesowy przypadek użycia. MongoDB zapewnia spójność i partycjonowanie, a Couch DB zapewnia dostępność i partycjonowanie.

Filmy Edureka na youtube dotyczące NoSQL to jedne z najlepszych samouczków wideo.

https://www.youtube.com/watch?v=gJFG04Sy6NY

https://www.youtube.com/watch?v=KSq6tMMXZ8s

https://www.youtube.com/watch?v=3z1KFA2qcSo

Dobre prezentacje są dostępne w slideshare.net

http://www.slideshare.net/quipo/nosql-databases-why-what-and-when?qid=3bb9f7f6-a53d-41b1-8403-cd6f181d0ca7&v=qf1&b=&from_search=1

http://www.slideshare.net/EdurekaIN/no-sql-databases-35591065?qid=f1b9c095-6d70-4d0a-91da-1df664c4f389&v=qf1&b=&from_search=3 (Ta prezentacja obsługuje samouczek wideo w serwisie YouTube)

Ravindra babu
źródło
1

W niektórych przypadkach użycia, szczególnie w przypadku zapytań analitycznych, możesz uruchamiać zapytania SQL w MongoDB z tym opakowaniem z Postgres.

metdos
źródło
1

Ponieważ obecnie na rynku jest o wiele więcej baz danych NoSQL niż kiedykolwiek wcześniej, proponuję zajrzeć do Gartner Magic Quadrant, jeśli szukasz bazy danych, która będzie również świetna dla aplikacji korporacyjnych opartych na wsparciu, możliwościach rozbudowy, zarządzaniu i koszt.

http://www.gartner.com/technology/reprints.do?id=1-23A415Q&ct=141020&st=sb

Chciałbym zasugerować Couchbase każdemu, kto jeszcze go nie wypróbował, ale nie w oparciu o wersję, która jest pokazana w raporcie (2.5.1), ponieważ jest to prawie 2 wersje za tym, gdzie obecnie znajduje się CB Server, zbliżając się do wydania 4.0 w drugiej połowie 2015 r. .

http://www.couchbase.com/coming-in-couchbase-server-4-0

Inną częścią dotyczącą Couchbase jako dostawcy / produktu jest to, że jest to baza danych wielokrotnego użytku. Może działać jako czysty magazyn K / V, baza danych zorientowana na dokumenty ze skalowaniem wielowymiarowym, pamięć podręczna, pamięć podręczna z trwałością i obsługuje SQL zgodny z ANSI 92 z automatycznymi łączeniami, replikacją do klastrów DR za naciśnięciem przycisku i ma nawet element mobilny wbudowany w ekosystem.

Jeśli nic więcej, warto sprawdzić najnowsze testy porównawcze:

http://info.couchbase.com/Benchmark_MongoDB_VS_CouchbaseServer_HPW_BM.html http://info.couchbase.com/NoSQL-Technical-Comparison-Report.html

Austin Gonyou
źródło