Solo me preguntaba cómo lo harías. ¿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.¿Cómo implementarías un sistema de insignia como el de StackOverflow?
Respuesta
Quizás 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 StackOverflow 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.
Tenga en cuenta que, en realidad, no se trata de un tiempo real de desbordamiento de pila: algunas de mis insignias tuvieron que actualizarse en algunas páginas. –
SO usa un truco que involucra las devoluciones de llamada de caché del servidor para imitar una tarea recurrente. Se discute en uno de los podcasts. –
+1 Me acabo de dar cuenta de que también se puede calcular en cada acción, pero hacerlo en un hilo separado para no ralentizar el rendimiento del sitio. –
Yo 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.
Muchas de las insignias sin embargo, no debería ser necesario que mucho que ver con ellos ... ellos deben ser capaces de hacer con una consulta muy bien elaborado
Las imágenes en blanco 1x1 son tan 2002. Hay maneras mejores en 2009, muchas de las cuales se mencionan en este hilo. – phidah
yo no daría lugar a una actualización cada vez que alguien hizo 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.
¿por qué todos los votos negativos? –
Usa una base de datos con 'ganchos/activadores'. 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 Answer> 10 Upvotes == "Good Answer", entonces usted acaba de poner un disparador 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.
leer más aquí: http://www.postgresql.org/docs/8.1/static/triggers.html
¿La transacción que actualiza el n. ° de Votos ascendentes estará esperando mientras se está ejecutando el desencadenador? ¿O la ejecución del disparador es asincrónica? –
En postgres es MVCC. No entiendo cómo funciona, pero 2 personas pueden usar las mismas filas y no tener problemas. Los desencadenantes/tendentes/suceden como parte de la consulta desencadenante, simplemente haciendo el comando correcto en el desencadenante correcto puede dejar de suceder el cambio. –
probablemente me utilizar un servicio de Broker cola en SQL Server para enviar acciones en el procedimiento de la cola y la activación recoge el un montón de acciones a la vez y lo dirige contra una insignia procedimiento de comprobación. Un motor de reglas de insignia, por ejemplo.
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 on App Engine: Implementing a real-time.... El blog fue publicado en enero de 2011, por lo que las cosas pueden haber cambiado desde entonces.
- 1. Un sistema de logros como el de stackoverflow en php?
- 2. How-to build sistema de etiquetado como stackoverflow
- 3. Sistema de insignia del sitio web
- 4. cómo hacer un sistema de votación como stackoverflow usando ajax/jquery/php (eficiente)
- 5. etiquetas de búsqueda como stackoverflow?
- 6. ¿Por qué sitios como stackoverflow con insignias usan algún tipo de trabajo retrasado para determinar cuándo otorgar una nueva insignia?
- 7. ¿Cómo implementarías tu tipo de cadena?
- 8. Consejos para construir un sitio como stackoverflow
- 9. ¿Cómo generar una URL compleja como stackoverflow?
- 10. stackoverflow barra de notificaciones estilo
- 11. ¿Cómo implementarías (re) iterar en Haskell?
- 12. Cómo mostrar un mensaje emergente como en Stackoverflow
- 13. ¿Cómo hacer una notificación de mensaje como Stackoverflow?
- 14. Reputación de StackOverflow con el símbolo del sistema de Windows (cmd.exe)
- 15. Páginas web ASP.NET sin nombres, como stackoverflow?
- 16. ¿Se puede usar CQRS para un sitio como StackOverflow?
- 17. Lanzando un 404 como StackOverflow, sin redirección, al usar IOCControllerFactory
- 18. Tengo un tipo de sistema de votación StackOverflow en una página Confluence
- 19. Desarrollar API de chat como la de Stackoverflow
- 20. La mejor estrategia para implementar el sistema de distintivos de estilo stackoverflow en asp.net mvc
- 21. Contador de vista de página como en StackOverFlow
- 22. Stackoverflow como ventana emergente modal en jquery
- 23. ¿Cómo puedo hacer que un campo de entrada de texto enriquecido como StackOverflow tenga?
- 24. php generador de imágenes fractales como avatar predeterminado de stackoverflow
- 25. ¿Cómo diseñar el esquema para algo así como etiquetas de preguntas de StackOverflow?
- 26. ¿Hay algún editor HTML de código abierto como stackoverflow?
- 27. Validador de Hibernación: @Email acepta ask @ stackoverflow como válido?
- 28. ¿Cómo construir un sistema de etiquetado como SO?
- 29. Cómo resolver el error AutoMapper? (Excepción stackoverflow!)
- 30. Cómo crear una insignia de icono de notificación en aplicaciones de Android (como iPhone)
Envíe un correo electrónico a Jeff Atwood, probablemente le dirá cómo lo hicieron y si recuerdo correctamente podría haberse discutido indirectamente en el podcast o tal vez en uno de los blogs. Yo olvido. –