Kiedy należy używać bazy danych dokument vs relacyjna vs graficzna? [Zamknięte]

29

Na potrzeby dyskusji rozważmy scenariusz FourSquare.

Scenariusz

Podmioty:

  • Użytkownicy
  • Miejsca

Relacje:

  • Meldowanie: użytkownicy <-> miejsca, wiele do wielu
  • Przyjaciele: użytkownicy <-> użytkownicy, wielu do wielu

Projektowanie bazy danych

Te będą najprawdopodobniej zawierać błędy, proszę je wskazać.

RDBMS

Stoły:

  • Użytkownicy
  • Miejsca
  • Checkins (skrzyżowanie)
  • Przyjaciele (skrzyżowanie)

Plusy:

  • CAP: spójność, dostępność

Cons:

  • CAP: tolerancja podziału, inaczej sharding
  • schematy = nieelastyczna struktura
  • słaba replikacja?

Wykres

Obiekty:

  • Użytkownicy
  • Miejsca

Krawędzie:

  • Znajomi: Użytkownik <-> Użytkownik
  • Meldunki: Użytkownik -> Miejsca
    • zawiera znacznik czasu

Plusy:

  • WPR: spójność, dostępność?
  • bez schematów, łatwo modyfikowalne obiekty i krawędzie
  • zapytania dotyczące wykresów, na przykład:
    • grupowanie
      • znajdowanie grup przyjaciół
      • znajdowanie restauracji lubianych przez podobne osoby
    • jakieś inne typowe / przydatne zapytania?

Cons:

  • CAP: tolerancja podziału?

Dokument / obiekt

3 oddzielne bazy danych?

  • Użytkownicy
    • Lista przyjaciół
  • Checkins
    • znak czasu
    • użytkownik
    • miejsce
  • Miejsca

Plusy:

  • CAP: dostępność, tolerancja podziału
  • bez schematów, obiekty łatwo modyfikowalne

Cons:

  • WPR: spójność

pytania

Dla przypomnienia, wykorzystali MongoDB. Oprócz wszystkich powyższych znaków zapytania:

  1. Nie jestem pewien, jak wdrożyć bazę danych dokumentów.
  2. W jaki sposób bazy danych dokumentów zyskują tolerancję partycji?
  3. Aby uzyskać kontrole pojedynczego użytkownika, zakładam, że operacja przeanalizuje wszystkie kontrole i przefiltruje metadane dla nazwy użytkownika (mapa + filtr). Wydajność analizowania ponad 1 000 000 dokumentów dla każdego użytkownika byłaby bardzo niska. Zakładam, że to nie jest właściwe zachowanie?
  4. Jakie są inne zalety / wady?
wting
źródło
(1) Musisz przeliterować relacje między 2 stołami w okresie biznesowym. Wynika to z faktu, że mogą istnieć relacje równoległe. Na przykład użytkownicy <--> użytkownicy nie implikują relacji 1 mm. Może to oznaczać więcej niż 1. Na przykład: użytkownik lubi innego użytkownika, a użytkownik nienawidzi innych użytkowników. To są 2 relacje. (2) Byłoby pomocne, gdybyś mógł streścić dokładnie to, czego chcesz.
NoChance
@EmmadKareem: (1) Nie zamierzam komplikować scenariusza. Jedyną relacją użytkownika <-> użytkownika, którą jestem zainteresowany, jest wzajemna przyjaźń, która jest relacją wielu do wielu. (2) Chciałbym odpowiedzieć na 4 pytania wymienione na dole wpisu.
wting

Odpowiedzi:

13

Twoje pytanie może być tematem semestralnego kursu uniwersyteckiego. Musisz rozbić go na porcje do zarządzania. W związku z tym wyrzucę tylko częściowe odpowiedzi.

Jedną z pierwszych rzeczy, na które należy zwrócić uwagę przy podejmowaniu decyzji, jakiego rodzaju bazy danych użyć, jest rodzaj zapytań, które będziesz uruchamiać i czy poznasz je wszystkie przed utworzeniem bazy danych. Bazy danych SQL mają tę zaletę, że zapewniają potężne i elastyczne zapytania do wszystkich danych w bazie danych. Bazy danych wykresów mają wysoce wyspecjalizowane funkcje zapytań, które czynią je najlepszymi dla danych wykresów i naprawdę źle dla danych innych niż wykresy (chociaż bazy danych wykresów mogą być składnikami baz danych SQL). Bazy danych NoSQL są znacznie bardziej ograniczone pod względem możliwości pobierania i operowania na danych.

Kolejne to, co sądzisz o właściwościach ACID: Atomowość, spójność, izolacja i trwałość. Bazy danych SQL dają silne gwarancje dotyczące wszystkich 4. Bazy danych NoSQL zwykle nie obiecują wszystkich 4, a sposoby ich odejścia są jednymi z kluczowych różnic, które różnicują różne implementacje bazy danych NoSQL. Z drugiej strony nie jest możliwe zagwarantowanie spójności i dostępności w obliczu partycji (patrz twierdzenie Brewera CAP ), więc żadna baza danych SQL nie zrobi, jeśli nalegasz na pełną dostępność w obliczu partycji. Osobiście bardzo dbam o trwałość danych w bazie danych, ponieważ zazwyczaj pracuję z danymi, w których nawet utrata danych wynosząca 0,0001% jest nie do przyjęcia, a zestawy danych są na tyle małe, że nie muszę się martwić o partycje, więc zdecydowanie faworyzuj bazy danych SQL.

Innym bardzo praktycznym aspektem jest jakość kodu serwera, dostępność administratorów i programistów baz danych, jakość wsparcia dostępnego dla pojawiających się problemów, jakość i dostępność bibliotek interfejsów do łączenia aplikacji z bazą danych i tak dalej. MySQL istnieje od prawie 2 dekad, ma już opracowaną większość błędów, jest bardzo szeroko stosowany, a więc ma zarówno świetne wsparcie, jak i dużą dostępność personelu, i prawdopodobnie będzie wspierany przez następne 10 lat. Nie możesz powiedzieć żadnej z tych rzeczy o Riaku.

Pamiętaj, że chociaż Google praktycznie wynalazł bazy danych NoSQL, aby mogły przechowywać buforowaną i indeksowaną wersję całej sieci WWW, nadal używają MySQL do niektórych celów.

Old Pro
źródło
1
Zdaję sobie sprawę, że dużo pytałem, więc ogólna odpowiedź byłaby w porządku. Podstawowe pytania są następujące: (1) Po co używać bazy danych dokumentów do rzekomego dzielenia na fragmenty, jeśli można zastosować logiczne dzielenie w poziomie za pomocą dzielenia zakresu? (2) Jak zaprojektowałbyś bazę danych dokumentów do użycia w scenariuszu FourSquare i jak radzi sobie z niektórymi typowymi zastosowaniami (pokaż meldunki użytkownika, pokaż znajomym użytkownika, pokaż użytkownikom aktualnie zameldowanym)?
wting
1
@William, istnieją dziesiątki artykułów odpowiadających na pytania łatwo dostępnych za pośrednictwem Google. Nawet kilka na samej przepełnieniu stosu . Odrób pracę domową.
Old Pro