¿Cómo calculan los sitios como Quora, Stack Overflow y Facebook el alcance (vistas) de cada ‘publicación’ incluso si el usuario no ha iniciado sesión?

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.

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 = 36278

Y 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.

calculan por ip.

Hacen mesa simple

question_id / post_id, visit_ip, visit_date_time

y establece restricciones para no permitir nuevamente la entrada para la misma dirección IP.

entonces tienes que hacer una consulta simple

seleccione count (visit_ip) de tbl_visists donde question_id = 1;

como si hubiéramos usado el mismo enfoque para http://guruquest.net/