Scenariusze przypadków użycia NoSQL lub KIEDY używać NoSQL [zamknięte]

252

Przy całym szumie znalezienie wiarygodnych informacji o tym, kiedy tego użyć, wydaje się naprawdę trudne. Zadaję więc następujące pytania i przepraszam, jeśli są to naprawdę głupie pytania z góry:

  1. Czy powinienem używać NoSQL do danych użytkownika? Np. Profile, nazwy użytkowników + hasła itp.
  2. Czy powinienem używać NoSQL do ważnej zawartości? Np. Artykuły, posty na blogu, spis produktów itp.

Zakładam, że nie? Wydaje mi się, że NoSQL służy tylko do szybkiego dostępu do rzeczy, z których można utracić dane. Ale czytam również, że aplikacje NoSQL mają wbudowaną redundancję, aby nie tracić danych?

Również jeśli powyższe 2 przykłady są złe, czy możesz podać mi konkretne przypadki użycia biznesowego, w których użyłbym NoSQL? Widzę wiele ogólnych opisów, ale niewiele przykładów z prawdziwego świata. Jedyne, co mogę wymyślić, to wiadomości i analizy między użytkownikami.

Dzięki!

użytkownik1389722
źródło

Odpowiedzi:

183

To naprawdę jest pytanie „to zależy”. Kilka ogólnych punktów:

  • NoSQL jest zwykle dobry dla danych nieustrukturyzowanych / „bez schematów” - zwykle nie musisz jawnie definiować swojego schematu z góry i możesz po prostu zawierać nowe pola bez żadnej ceremonii
  • NoSQL zazwyczaj faworyzuje schemat zdenormalizowany ze względu na brak obsługi JOIN w świecie RDBMS. Więc zwykle miałbyś spłaszczoną, zdormalizowaną reprezentację swoich danych.
  • Korzystanie z NoSQL nie oznacza, że ​​możesz stracić dane. Różne bazy danych mają różne strategie. np. MongoDB - możesz w zasadzie wybrać poziom, na którym chcesz zmniejszyć wydajność a potencjalną utratę danych - najlepsza wydajność = większy zakres utraty danych.
  • Często bardzo łatwo jest skalować rozwiązania NoSQL. Dodanie większej liczby węzłów w celu replikacji danych to jeden ze sposobów na a) zaoferowanie większej skalowalności i b) zaoferowanie większej ochrony przed utratą danych w przypadku awarii jednego węzła. Ale znowu, zależy od konfiguracji DB / NoSQL. NoSQL niekoniecznie oznacza „utratę danych”, tak jak wnioskujesz.
  • IMHO, złożone / dynamiczne zapytania / raportowanie najlepiej obsługiwać z RDBMS. Często funkcjonalność zapytania dla bazy danych NoSQL jest ograniczona.
  • To nie musi być 1 lub inny wybór. Z moich doświadczeń wynika, że ​​używam RDBMS w połączeniu z NoSQL do niektórych przypadków użycia.
  • Bazy danych NoSQL często nie mają możliwości wykonywania operacji atomowych w wielu „tabelach”.

Naprawdę musisz przyjrzeć się i zrozumieć, jakie są różne typy sklepów NoSQL i jak one zapewniają skalowalność / bezpieczeństwo danych itp. Trudno jest udzielić kompleksowej odpowiedzi, ponieważ tak naprawdę wszystkie są różne i zajmują się różnymi sprawami .

Na przykład dla MongoDb sprawdź ich przypadki użycia, aby zobaczyć, co sugerują jako „dobrze dopasowane” i „mniej dobrze dopasowane” zastosowania MongoDb.

AdaTheDev
źródło
16
Twierdzenie o braku obsługi sprzężeń przez NoSQL jest mylące. Niektóre bazy danych NoSQL są w rzeczywistości znacznie lepsze w sprzężeniach niż relacyjne bazy danych. Niektóre wcale ich nie obsługują. Ta odpowiedź wydaje się bardziej dotyczyć w szczególności MongoDB niż ogólnie NoSQL.
Alan Plum
1
Świetne podsumowanie. @AlanPlum, o jakich konkretnych bazach danych NoSQL chodzi?
brian
2
@brian Jestem współpracownikiem ArangoDB ( arangodb.com ), który jest połączeniem bazy danych dokumentów (think MongoDB) i bazy danych grafów (think Neo4J) z nie tylko tanimi połączeniami, ale także prawdziwymi transakcjami. To powiedziawszy, bazy danych NoSQL nie są jednorodną grupą i niemożliwe jest uogólnienie jednej bazy danych NoSQL na całą „kategorię”.
Alan Plum
Jeśli zastanawiasz się nad użyciem RDB, ponieważ „sprzężenia nie są obsługiwane” w NoSQL, gorąco polecam obejrzenie tego filmu z AWS re: Invent. Rozbija całe podejście do NoSQL! Bardzo mi pomogło. youtu.be/HaEPXoXVf2k
dillon.harless
9

Myślę, że Nosql jest co najmniej „bardziej odpowiedni” w tych scenariuszach (mile widziane jest dodatkowe uzupełnienie)

  1. Łatwo skalować w poziomie, dodając więcej węzłów.

  2. Zapytanie o duży zestaw danych

    Wyobraź sobie mnóstwo tweetów publikowanych na Twitterze każdego dnia. W RDMS mogą istnieć tabele z milionami (lub miliardami?) Wierszy i nie chcesz wykonywać zapytań bezpośrednio na tych tabelach, nawet nie wspominając, że przez większość czasu połączenia tabel są również potrzebne w przypadku złożonych zapytań.

  3. Wąskie gardło dysku I / O

    Jeśli strona internetowa musi wysyłać wyniki do różnych użytkowników w oparciu o informacje w czasie rzeczywistym użytkowników, prawdopodobnie mówimy o dziesiątkach lub setkach tysięcy żądań odczytu / zapisu SQL na sekundę. Wtedy dysk we / wy będzie poważnym wąskim gardłem.

otm
źródło
20
Nie rozumiem, co może być problemem z RDBMS dla # 2. A NoSQL ma mniej dyskowych I / O jak na nr 3?
avi
5
Jak mówi @avi, myślę, że nie ma problemu dla nr 2, o ile przeszukujesz tabele za pomocą indeksu. Miliony wierszy? Ok, pobierz tylko te indeksy, których chcę użyć
Xtreme Biker
11
# 2 i 3 są fałszywe. W przypadku 2 przeprowadziłem testy wydajności dotyczące importowania / eksportowania danych i widziałem, jak SQL Server 2014 niszczy Mongo przy imporcie i eksporcie dużych danych. W przypadku 3 silnie wpisane dane w SQL zwykle zajmują (widziałem ponad 50% przed kompresją) dużo mniej miejsca niż bazy danych dokumentów.
brian
7
Tak, a nawet dla nr 1 po prostu tego nie rozumiem. Skalowanie w górę jest częścią umowy klastrowej, którą proponują wszystkie główne rdbms
Sebas
2
Wszystkie trzy są błędne, jeśli masz nieograniczone pieniądze
Chazt3n