traducir online inspiration desing bom app design

online - design traducir



¿Cómo implementarías un sistema de insignia como el de StackOverflow? (6)

Solo me preguntaba cómo harías esto. ¿Tendría algún tipo de proceso que analice todas las acciones que tuvieron lugar durante los últimos X minutos? ¿Activaría una verificación de actualización de insignia cada vez que se llevara a cabo alguna acción (voto por aumento, voto por disminución, etiqueta, etc.)? Parece que esto sería un proceso relativamente costoso de una forma u otra.


Probablemente usaría una cola de Service Broker en SQL Server para enviar acciones a la cola y el procedimiento de activación recoge un montón de acciones a la vez y lo ejecuta contra un procedimiento de comprobación de insignia. Un motor de reglas de insignia, por ejemplo.


No activaría una actualización cada vez que alguien hiciera una acción; lo que haría en su lugar es un proceso por lotes que analiza cada acción realizada en el último minuto, resume el estado de "cada minuto" de cada usuario y da nuevas insignias basadas en eso.


Personalmente, tengo un trabajo cron o similar que procesa estos de forma regular. Probablemente en un sistema de flujo "cron falso", donde tendría una llamada de imagen invisible y pasaría por la "pila de cron" interna para ver qué hay que hacer.

Sin embargo, muchas de las insignias no deberían tener tanto que ver con ellas ... deberían poder hacerse con una consulta muy bien elaborada


Tal vez un poco de ambos. Probablemente pondría en cola un cheque cada vez que ocurra una acción, y tendré un proceso que irá a la cola y determinará si se ha ganado una insignia para cada control. De esta forma, es un tiempo semi-real sin causar que las páginas tarden más en cargarse. De hecho, aquí en noté una demora entre cuando se gana la insignia y cuando el sistema se da cuenta, por lo que este sitio probablemente usa el mismo enfoque.


Use una base de datos con ''hooks / triggers''. Luego puede activar un evento en ciertos cambios de estado, por ejemplo, tiene una tabla que registra cada voto de una respuesta determinada.

Usted sabe que Respuesta> 10 votos a favor == "Buena respuesta", por lo que simplemente pondría un activador que ocurre cuando LAST_STATE = 9 y NEXT_STATE = 10 y ENTRY_AWARDED_GOODANSWER = false.

Postgresql es una de esas bases de datos que admite dichos desencadenadores.

Lea más aquí: http://www.postgresql.org/docs/8.1/static/triggers.html


Khan Academy hace todo lo posible para otorgar las insignias en tiempo real. Ellos argumentan que es importante para la sensación de gamey del sitio web. También tienen un trabajo por lotes que reevalúa periódicamente los datos y otorga las insignias perdidas.

Ben Kamens, Badges en App Engine: Implementando un tiempo real ... El blog fue publicado en enero de 2011, por lo que las cosas pueden haber cambiado desde entonces.