2010-03-01 9 views
12

Chcę mieć możliwość śledzenia punktów użytkownika uzyskanych w mojej witrynie. Nie jest tak jak SO, ale system punktowy jest podobny, ponieważ chcę, aby każdy użytkownik miał całkowitą sumę, a następnie chcę śledzić transakcje, które doprowadziły do ​​tej sumy.Śledzenie punktów użytkownika (jak SO)

Czy powinienem zatrzymać użytkownika w tabeli użytkownika, czy też powinienem wyciągnąć wszystkie transakcje, które wpływają na użytkownika w sumie pytań, sumować je i pokazywać sumę punktów?

Wygląda na to, że ta ostatnia to więcej pracy niż potrzeba, aby uzyskać całość. Ale potem znowu wzdrygam się na myśl o zachowaniu tych samych danych (mniej lub bardziej) w dwóch różnych miejscach.

Jaki jest właściwy sposób zaprojektowania tego?

EDYCJA: Wziąłem radę. Używanie obu i rekursy. Dodałem kolumnę RecalcDate, a jeśli ma ponad jeden dzień, zostanie ponownie rekalowana. Suma ta jest również przeliczana za każdym razem, gdy użytkownik robi coś, co powinno wpłynąć na ich całkowity punkt.

Odpowiedz

9

Zarówno

Trzeba mieć sposób przeliczania sumy, gdy coś pójdzie nie tak, można powiedzieć, dodać nową funkcję, czy ktoś uczy się wykorzystywać system. Możesz zachować bieżącą sumę w tabeli użytkowników i rekord transakcji, aby przeliczyć tę sumę, gdy jest taka potrzeba ... nie za każdym razem, gdy potrzebujesz wartości do wyświetlenia.

Nie przechowujesz zduplikowanych danych tak długo, jak historia audytu, aby się ponownie pojawiła, jedynym duplikatem jest jedna cyfra w jednej kolumnie w tabeli użytkowników ... alternatywą jest użytkownik, który wykorzystuje system, nie ma mowy aby go wycofać. To samo stało się we wczesnych dniach SO, ale oni mieli historię i mogli przeliczyć sumy bez potu.

+0

Czy ktoś podejmie takie podejście w przypadku systemu, który może generować setki transakcji dla każdego użytkownika dziennie? Na przykład gra, w której śledzisz punkty doświadczenia lub złoto. Są to częste rzeczy, które ludzie mogą próbować wykorzystywać, ale przechowywanie wielu transakcji wydaje się zwiększać rozmiar bazy danych. –

+0

@Zachary - miejsce na dysku twardym jest najtańszym zasobem serwera, w rzeczywistości nie jest to zbyt wiele danych do zapisania. Spójrz na SO, mnóstwo transakcji dziennie, ale kiedy podchodzisz do czegoś takiego jak powiedzmy WoW, masz do czynienia z wyjątkowo dużą skalą. W takim przypadku może być inne podejście, może nagrywanie co miesiąc, co jest sumą i tylko trzymanie 3-miesięcznych danych lub coś takiego, więc masz możliwość wycofania zmian w przypadku zerwania zmiany itp. –

3

Prawdopodobnie powinieneś zrobić mieszankę obu.

Utrzymuj sumę bieżącą w tabeli użytkownika, a także rejestruj każdą transakcję, która ma wpływ na sumę użytkowników, w ten sposób nie musisz wykonywać sumy wszystkich rekordów, ale będziesz mieć je tylko w walizka.

Numery mogą się zsynchronizować, dlatego może zaistnieć potrzeba ponownego wykonania obliczeń raz na jakiś czas. (StackOverflow nazywa to recalc, gdzie przechodzą i aktualizują swoją reputację do tego, co powinieneś mieć).

Powiązane problemy