2009-06-03 5 views
20

En cualquier sitio web, como en StackOverflow, cada pregunta tiene un conteo de visitas, y el usuario que lee una pregunta pero ha leído previamente no contará dos veces.¿Cómo se implementa mejor "Ver conteo"?

Tengo algunas ideas sobre cómo se implementa y el uso de tablas para hacerlo.

¿Cuál crees que es la mejor manera de implementar esto?

Respuesta

10

Tienes un par de opciones como yo las veo.

Galletas

Puede almacenar una cookie en el navegador del usuario para cada página que se está conectando puntos de vista sobre. Verifique esta existencia de cookies y no registre una vista si la cookie ya existe.

Lo malo de esto es que no funcionará si las cookies están desactivadas o si alguien está tratando de jugar con el sistema.

En el lado positivo, no tiene que preocuparse por el almacenamiento de potencialmente millones/miles de millones de filas de datos de tablas.

base de datos

Usted lleva a cabo un registro para cada vista. Relacionando ese registro con un usuario de alguna manera, p. ID de miembro, dirección IP; algo que debe ser exclusivo del usuario. La IP no es ideal, pero es lo suficientemente buena si no requiere que los usuarios inicien sesión.

Así que tendría, por ejemplo, una tabla con las siguientes columnas,

  • ArticleID (clave externa)
  • identificación de usuario (clave externa)
  • Fecha

La fecha será útil por un par de razones,

  • Informes. Puede construir estadísticas mucho mejores una vez que sepa cuándo se grabó cada vista.
  • Ver tiempos de espera. Por ejemplo, es posible que solo desee almacenar una vista por usuario por hora. Con la columna de fecha retenida puede hacer esto.

Si su aplicación se vuelve popular en esta situación, entonces tendrá que lidiar con las implicaciones de almacenamiento. Tengo una aplicación popular de Facebook que da como resultado que se agreguen más de 100.000 filas de visualización cada día. De forma realista, si tu aplicación se vuelve tan popular que se convierte en un problema, entonces tendrás problemas mucho más grandes con los que lidiar.

+0

¿tiene algún código de ejemplo? – AminM

1

Cuando la mayoría de los visitantes de su sitio están registrados, es relativamente fácil asegurarse de que ninguno de ellos se cuente dos veces.

No estoy seguro si SO cuenta las vistas de los huéspedes. Supongo que podría verificar pero es tarde.

+0

acabo de ver una pregunta varias veces y el conteo no cambió después de la primera vez. –

+1

Creo que tampoco cuenta las visitas por parte del OP, por lo que si hago una pregunta y luego miro el número de visitas, creo que esa es la cantidad de usuarios que han analizado la pregunta. –

2

Respuesta corta: ¡Depende!

  • Depende realmente de la precisión con que necesita que su recuento de vistas sea, ¿es aceptable que una persona se pueda registrar dos o tres veces?
  • Depende de para qué vas a utilizar los datos. Si desea hacer otras cosas ordenadas con los datos (estadísticas, lista de vistas recientes, etc.), puede considerar almacenar todas las vistas individuales en una base de datos. Esto podría dar como resultado una gran tabla por lo que debe tener esto en cuenta antes de implementarla.

He utilizado previamente cookies combinadas con una base de datos en memoria para almacenar las vistas individuales (por razones obvias guardé el recuento de vista real en una tabla de base de datos persistida en el disco). Podría hacer esto porque las estadísticas no significaban nada.

0

Trataré de dar una respuesta desde el punto de vista funcional.

recuento de visitas por usuario - para usuarios registrados. para usuarios anónimos, por sesión.

incremento de vista cuenta en la primera vista y en cualquier vista después de una actualización significativa por otra persona que la persona que ve el elemento.

vista de cartel en el momento de la creación no debe contar

se puede imaginar haciendo que sea más sencillo también, pero he tratado de pensar en una solución ideal.

1

Parece que stackoverflow no cuenta los usuarios invitados (no registrados) que ven un tema. El problema con el conteo de vistas anónimas del usuario es que su contador puede ser jugado. Alguien siempre puede eliminar la cookie y ver de nuevo. Registrar las vistas es la solución más segura para la precisión, pero, por supuesto, tiene dos problemas principales: el tamaño de la mesa y la falta de usuarios invitados/anónimos. Me sorprende que stackoverflow no esté registrando usuarios invitados (no registrados). Creo que la mayoría de los puntos de vista vendrían de estos usuarios que realizan búsquedas en Google.

9

En mi sitio web me ocupo del conteo de visitas y la "masa de datos" que esto produce al dividir el número de visitas usando un número aleatorio.

Digamos que tengo un generador de números aleatorios con una buena distribución entre 0 y 1, y obtengo 100.000 vistas por día en una página en particular. Si llamo a la función 'logView()' cada vista, pero en ella se genera un nuevo número aleatorio y solo realmente registra la vista en el DB cuando el número aleatorio es < 0.001, luego para las 100,000 visitas solo llegaré al DB aproximadamente 100,000 * 0.001 = 1000 veces.

Si deseo devolver el conteo de una vista, entonces simplemente divido mi número de base de datos por el mismo valor, por ej. 1000/0.001 = 100.000. Esto es aproximadamente exacto a las 1000 vistas más cercanas.

Obviamente, puede elegir un rango de números aleatorios dependiendo de la carga de su sitio, e incluso cambiar esto si su carga cambia drásticamente (solo necesita modificar los valores almacenados en consecuencia).

Además, una página con solo 1000 vistas puede que ni siquiera obtenga un 1 en el recuento de vistas, pero si tiene una página con 100.000 vistas, entonces la que tiene 1000 es bastante insignificante.

+0

Buena idea. Gracias por compartir –