Oceniamy NoSQL w nadchodzącym projekcie. Zwykle myślę o rzeczach w sposób RDBMS i mam problem z konceptualizacją braku normalizacji.

Rozumiem, że duplikowanie danych nie jest uważane za złe w NoSQL. Mam problem ze zrozumieniem, że naprawiam zmiany w danych, aby zapobiec anomaliom.

Wyjaśnienie pytania na przykładzie:

Organizujesz serię turniejów pokerowych. Masz graczy, lokalizacje i wydarzenia turniejowe. Jak rozumiem, wydarzenie turniejowe może zawierać lokalizację i kolekcję graczy. Nie musi zawierać wszystkich danych gracza, ale jeśli chcesz uzyskać nazwiska i adresy domowe wszystkich, którzy wybierają się na następny turniej, te informacje powinny znajdować się w kolekcji turniejów.

Ktoś ożenił się i przeprowadził, zmieniając nazwisko i adres. Czy aplikacja musi aktualizować kolekcję graczy i kolekcję turniejową? A może mój model kolekcji jest zły? W jaki sposób programiści „śledzą” miejsca powielania informacji?

17
justkevin 2 marzec 2012, 20:42

2 odpowiedzi

Najlepsza odpowiedź

Model, który ostatnio jest często używany, polega na tym, że posiada niezmienny „główny” zbiór danych (w twoim przypadku lista graczy, lista turniejów z graczami w każdym turnieju modelowana „relatywnie”, gdzie turniej rekord zawiera listę identyfikatorów graczy) oraz zdenormalizowaną listę (w twoim przypadku listę turniejów z w pełni wypełnionymi danymi graczy), która jest aktualizowana tylko przez okresowe uruchamianie procesu na danych „głównych”.

W ten sposób aplikacja musi jedynie zaktualizować dane podstawowe, a proces okresowej aktualizacji ostatecznie odbuduje zdenormalizowany wynik.

11
Chris Shain 2 marzec 2012, 20:51

Jedną rzeczą do zrobienia jest posiadanie jednego „systemu zapisu” lub wzorca dla każdego typu danych, które posiadasz. Nie musi istnieć jedno źródło wszystkich danych, ale każde z nich powinno mieć jedno.

Innym środkiem, który należy podjąć, jest wersjonowanie danych (zachowanie zmian historycznych), tak aby zdenormalizowane dane były niezmienne - w twoim przykładzie dane gracza z turnieju, który miał miejsce w przeszłości, są odpowiednie na ten czas. Jeśli gracz przeniósł się na nowy adres od tego czasu, nadal możesz to uzyskać, przechodząc do „systemu zapisu” gracza, aby uzyskać aktualny adres, ale zapis turnieju odzwierciedla jego adres w tym czasie itp.

11
Arnon Rotem-Gal-Oz 3 marzec 2012, 23:46