2012-03-02 9 views
13

Oceniamy NoSQL dla nadchodzącego projektu. Mam tendencję do myślenia o rzeczach w sposób RDBMS i mam problem z konceptualizacją braku normalizacji.Jak obsługiwać zmiany w zduplikowanych danych w NoSQL

Rozumiem, że powielanie danych nie jest uważane za błędne w NoSQL. Mam problem z ustaleniem zmian w danych, aby zapobiec anomalii.

Wyjaśnienie Pytanie o Przykład:

Jesteś organizuje cykl turniejów pokerowych. Masz graczy, miejsc i wydarzeń turniejowych. Jak rozumiem, wydarzenie turniejowe może zawierać lokalizację i kolekcję graczy. Nie trzeba mieć wszystkich danych gracza, ale jeśli chcesz uzyskać nazwy i adresy domowe wszystkich, którzy wybiorą się na następny turniej, informacja o tym numerze powinna znajdować się w kolekcji turniejowej.

Ktoś się ożenił i przeniósł, zmieniając nazwisko i adres: . Czy aplikacja musi aktualizować kolekcję odtwarzaczy i kolekcję turniejową ? Czy mój model zbiorów jest błędny? Jak deweloperzy "śledzą", gdzie są duplikowane informacje?

Odpowiedz

10

Model, który widzę ostatnio dość często używany, to niezmienna "master" kolekcja danych (w twoim przypadku lista graczy, lista turniejów z graczami w każdym turnieju zamodelowanym " relacyjnie ", gdzie rekord turnieju zawiera listę identyfikatorów graczy) oraz listę zdenormalizowaną (w twoim przypadku listę turniejów z całkowicie wypełnionymi danymi gracza), która jest zawsze aktualizowana tylko przez okresowe przeprowadzanie procesu nad" mistrzem " "dane.

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

+0

Kiedy mówisz "niezmienny", czy dosłownie oznaczasz, że jeśli * coś * zmienia się w tym obiekcie głównym, usuwasz go i tworzysz nowy? –

+1

Przepraszam, prawdopodobnie niewłaściwe użycie tego słowa. Przez niezmienny miałem na myśli to, że lista główna nie jest modyfikowana podczas tworzenia zdenormalizowanej listy. –

9

Jedną z rzeczy do zrobienia jest posiadanie jednego "systemu rekordów" lub wzorca dla każdego rodzaju danych, które posiadasz. Nie musi być jedno źródło dla wszystkich danych, ale każdy powinien je mieć.

Kolejnym krokiem, jaki należy podjąć, to sprawdzenie wersji danych (zachowanie zmian historycznych), aby denormalizowane dane mogły pozostać niezmienne - w twoim przykładzie dane gracza dotyczące turnieju, które miały miejsce w przeszłości, są odpowiednie dla tego czasu. Jeśli od tego czasu gracz przeniósł się na nowy adres, możesz go uzyskać, przechodząc do "systemu rekordów" gracza, aby uzyskać aktualny adres, ale rekord turnieju odzwierciedla jego/jej adres w tym czasie itd.

Powiązane problemy