Para Stack Overflow, hay una respuesta (no oficial) sobre ¿Cómo se calcula el número de visitas en una pregunta? pregunta como;
Recientemente he investigado el funcionamiento del contador de vistas de desbordamiento de pila porque quería implementar algo similar (lo cual hice). Mis divagaciones sobre el asunto están aquí: disección del contador de vistas de desbordamiento de pila
Entonces, ¿cómo funciona esa cosa? En pocas palabras, como resultó ser.
- ¿Cuáles son las similitudes y diferencias entre Laravel y Django?
- ¿Cuál es el lenguaje de programación web más seguro para diseñar un sitio web que acepte pagos de créditos?
- ¿Cuáles son los mejores marcos para saber para obtener un trabajo de desarrollador?
- ¿Cuáles son las ventajas y desventajas de alojar un sitio web utilizando Dropbox / Google drive?
- ¿Cómo se puede construir un servidor web con C ++? ¿Cuáles son los beneficios y el lado oscuro de la misma?
Cada página de preguntas tiene ese enlace de contador incrustado:
http://stackoverflow.com/posts/3590653/ivc/[Código aleatorio]
que se golpea con cada carga de la página (ya sea en caché o no).
Hay algún tipo de mecanismo de estrangulamiento en acción. Guarda la información sobre una vista de pregunta por visitante como en pares:
- para usuarios anónimos, es
IP + QuestionNr
.- para usuarios autenticados es
UserNr + QuestionNr
.Esta información se guarda en una entrada de caché que caduca durante aproximadamente 15 minutos. Si un golpe posterior ve que la entrada todavía está allí, descarta el nuevo golpe. Si ya se ha ido, permite un nuevo registro.
Cada vez que se registra un nuevo hit, también se agrega a un búfer de memoria además de la entrada de caché que caduca. El búfer en sí también caduca después de unos minutos o después de que se llena hasta un cierto tamaño, lo que ocurra primero. Cuando caduca, todo lo que ha acumulado se escribe en la base de datos de forma masiva. Lo llaman un “esquema de escritura protegido”. Me gusta el termino Básicamente, las entradas del búfer se agrupan por pregunta y luego se agregan a la suma de las vistas de preguntas, no hay una tabla en particular para almacenar los detalles de cada visita (demasiado para almacenar), como:
ACTUALIZAR Pregunta
SET Views = Views + @NewViews
DONDE Nr = 36278Y lo mismo para cada pregunta que tiene vistas registradas en el búfer. Para optimizar y minimizar el acceso a la base de datos, envía todos los datos para múltiples preguntas a su consulta de actualización en una sola ejecución. Puede formatear los datos como XML, unirse a ellos dentro de la consulta y realizar la actualización en una declaración.
Eso es practicamente todo.
No he podido averiguar qué hace el [Código aleatorio] en la url del contador, pero está bien. Sin esa parte misteriosa, implementé este esquema en el sitio oficial de Microsoft ASP.NET MVC + SQL Server hace aproximadamente dos semanas para un proyecto en el que estoy trabajando actualmente. Lo tengo funcionando en mi máquina de desarrollo desde entonces y funcionó de maravilla. Las vistas se registran correctamente como deberían.