Pregunta

Estoy construyendo un sitio web con contenido generado por el usuario. En la página principal que quiero mostrar una lista de todos los elementos creados, y yo quiero ser capaz de clasificarlos por un contador de vista. Eso es parecer fácil, pero quiero varios contadores. Quiero saber que era el artículo más visitado en el último día, la semana pasada o los últimos meses o general.

Mi primera idea era crear 4 columnas de contador en el elemento de DB-Tabla. Uno para cada uno de forma diaria, semanal, mensual y, en general, y al crear una tarea programada, que despeja el contador diario cada 24 horas, el contador semanal cada 7 días y así sucesivamente.

Pero mi problema con esto es, ¿Qué pasa si quiero saber que era el elemento más visto de la semana, justo después del contador de semana consiguió borra?

Lo que necesito es una manera eficiente de crear un contador continuo, que consiguió reducir por cada visita a una página que es demasiado viejo, y se incrementa para cada nueva vista de página.

En este momento estoy pensando en una solución con el Redis servidor , pero no tienen ninguna solución todavía.

Estoy buscando una idea general, pero FYI estoy desarrollando esta aplicación en Ruby on Rails.

¿Fue útil?

Solución

Lo que sugeriría que el seguimiento de los accesos a cada página, con sólo una marca de tiempo y cualquier identificador de usuario o lo que se puede almacenar, entonces se puede calcular los contadores de cómo te gusta y cambiar más adelante porque tiene los datos de una forma sencilla para su uso. Una tabla con entidad (página) ID de usuario y la marca de tiempo debe ser bueno. Sólo tiene que añadir a eso, cuando cada vez se solicita la página.

Para reducir el número de inserciones que pueda lotes juntos en su software. La construcción de una inserción de múltiples filas como aquí para MySQL ahorrará gastos generales. Usted sólo tendrá sus clases para construir el inserto como se describe y almacenar hasta el inserto. Una idea es no sólo tiempo, sino que fija un número de filas a lotes que le permite decir, como máximo, si el servidor se le hace único número x perder de filas de éxitos.

Hay un disparador de MySQL, que puede causar a funcionar sólo después de que el lote completo de los insertos se hace lo que se puede utilizar para actualizar las tablas informativas, por lo que no tiene que golpear constantemente la tabla de seguimiento principal éxito.

Además, si esta tiene por qué ser muy alto rendimiento que podría ser interrumpido en su propio fragmento y se accede a través de Ajax llama a hacer el seguimiento de golpe y llevar los conteos.

Otros consejos

Lo que puede hacer es lo que se visitó la tienda y en qué fecha (fecha y hora) y que haría esto para cada uno y cada vez que se visitó el algo. Cuando se desea recuperar lo que estaba visitied, que le eligió los dentro de un rango de fechas (fecha y hora) y sumarlos.

o

Cada uno de sus enlaces tendrá su propia fila respectiva por cada día que se visitan. Si ellos son visitados más de una vez en un día y luego se sumará 1 al valor ya existente.

Se podría utilizar el segundo ejemplo y el almacenamiento por semana en lugar de diariamente si sus semanas son algo así como Domingo-Sábado y no de 7 días antes de hoy. Así que reemplazar el día de palabras con la palabra semana por lo tanto tener una menor cantidad de almacenamiento de datos.

veo que se quiere evitar enormes almacenes de datos, pero en la medida en que desea que esto funcione, no veo mucho mejor que this.You podría utilizar el segundo ejemplo y hacer almacenamiento de semana en lugar de diariamente si sus semanas son algo así como domingo-sábado y no de 7 días antes de hoy.

Aquí hay una posibilidad de que el servidor regis después de ver algún tipo de documentación.

SET link_id|date => "visit_count"

Esto almacena el link_id o como se llame, junto con el date separados por | o lo que sea el carácter que desea utilizar. En esa clave-valor se almacena el visit_count.

decir que desea agregar un golpe a ese enlace en esta fecha. Se podría GET link_id|date y luego agregar 1 a la visit_count regresa y luego almacenar de nuevo la forma en que se muestra arriba.

Si desea obtener la cantidad de golpes para una fecha en concreto quizás con la GET link_id|date de nuevo.

Sólo usaría ruby-on-rails para reemplazar link_id, date y visit_count con los valores apropiados.

Espero que esto te ayuda.

Lo que podría hacer es crear una tabla llamada ViewCounters.

No sería una columna 'pageId', una columna de 'día', y una columna de 'vistas'. El pageId correspondería a la página que se está viendo, y el 'día' se correspondería con el día en que fue visto en.

Cada vez que una página se ve, se encuentra (o crea si no existe aún una) la fila en la tabla ViewCounters con su pageId, y con el día actual. Sería entonces incrementar la columna 'vistas' de esa fila.

Esto le da la máxima flexibilidad en lo que respecta a la creación de nuevos contadores y el acceso a la historia. Por otra parte, para el número de reproducciones, semanales, mensuales y contadores diarias son todos muy barato para generar.

Otra gran ventaja de esto sería que sólo ha fila por página por día, lo cual no es realmente tan malo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top