2010-03-01 12 views
12

Quiero ser capaz de realizar un seguimiento de los puntos de usuario obtenidos en mi sitio web. No es realmente como SO, pero el sistema de puntos es similar en el sentido de que quiero que cada usuario tenga un total y luego quiero hacer un seguimiento de las transacciones que los llevaron a ese total.Realizar un seguimiento de los puntos de usuario (al igual que SO)

¿Debo mantener un total de usuarios en la tabla de usuarios o debo simplemente retirar todas las transacciones que afectan al usuario en preguntas, totalizarlas, sumarlas y mostrar el total de puntos?

Parece que este último es más trabajo de lo necesario para obtener el total. Pero de nuevo me estremezco ante la idea de mantener la misma información (más o menos) en dos lugares diferentes.

¿Cuál es la forma correcta de diseñar esto?

EDIT: Tomó el consejo. Usando ambos y recalcs. Agregué una columna RecalcDate, y si tiene más de un día, se vuelve a cargar. El total también se vuelve a calcular cada vez que un usuario hace algo que debería afectar su puntaje total.

Respuesta

9

Tanto

Usted necesita tener una forma de volver a calcular los totales cuando las cosas van mal, digamos que añadir una nueva característica, o alguien que aprende a explotar el sistema. Puede mantener un total actual en la tabla de usuarios y un registro de transacciones para volver a calcular ese total cuando sea necesario ... no cada vez que necesite el valor para visualizar.

No está almacenando datos duplicados tanto como el historial de auditoría para recurrir, el único duplicado es un número en una columna en la tabla de Usuario ... la alternativa es que un usuario explote el sistema, no hay forma para tirar hacia atrás. Lo mismo sucedió en los primeros días de SO, pero tenían la historia y podían volver a calcular los totales sin sudar.

+0

¿Alguien tomaría este enfoque para un sistema que podría generar cientos de transacciones por cada usuario por día? Por ejemplo, un juego donde rastreas puntos de experiencia u oro. Esas son cosas frecuentes que las personas pueden tratar de explotar, pero almacenar tantas transacciones parece aumentar el tamaño de su base de datos. –

+0

@ Zachary - El espacio en el disco duro se trata del recurso de servidor más económico que existe, en realidad no se necesitan demasiados datos para registrar en la mayoría de los casos. Mira SO, muchas transacciones por día, pero cuando te acercas a algo como, por ejemplo, WoW tiene que lidiar, estás hablando de una escala única. En ese caso, tal vez sea necesario un enfoque diferente, tal vez registrar cada mes el total y solo mantener datos de 3 meses o algo así, para que tenga cierta capacidad de reversión en caso de un cambio de rotura, etc. –

3

Probablemente deberías hacer una combinación de ambos.

Mantenga un total acumulado en la tabla de Usuario y también mantenga un registro de cada transacción que afecte el total del usuario, de esa manera no necesita hacer una suma de todos los registros, pero los tendrá solo en caso.

Es posible que los números no estén sincronizados, por lo que es posible que tenga que hacer un recalc de vez en cuando. (StackOverflow lo llama recalc, donde pasan y actualizan su reputación a lo que debería tener).

Cuestiones relacionadas