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?
- grupowanie
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:
- Nie jestem pewien, jak wdrożyć bazę danych dokumentów.
- W jaki sposób bazy danych dokumentów zyskują tolerancję partycji?
- 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?
- Jakie są inne zalety / wady?
Odpowiedzi:
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.
źródło