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?