2010-07-16 9 views
7

Estoy buscando la forma de rastrear eventos en una aplicación django (los eventos generalmente serían clics vinculados a una identificación de usuario única específica).Recomendación para los mecanismos de seguimiento de clics/eventos (python, django, apio, mongo, etc.)

Estos eventos básicamente contendrían un tipo de evento como "clic" y luego cada evento de clic se asignaría a una identificación única (muchos eventos pueden ir a una identificación) y cada evento tendría un conjunto de datos que incluiría elementos como referencia, etc. ...

He intentado con el mixpanel, pero por ahora la API de datos que ofrecen parece demasiado limitada, ya que no puedo encontrar una manera de obtener todos mis datos mediante una identificación única (aparte del evento sí mismo).

Estoy estudiando el uso de django-eventracker, pero tengo curiosidad acerca de cualquier otro pensamiento sobre la mejor manera de hacerlo. Mongo o CouchDb parecen ser una gran elección aquí, pero el apio/rabbitmq se ve muy atractivo con mongo. El bombeo de estos eventos en las aplicaciones existentes db parece ser limitante en este punto.

De todas formas, esto es sólo un hilo para ver lo que otros pensamientos están en esto y cómo han aplicado algo como esto ...

disparar

+0

mongodb escribe más rápido que couchdb. mongodb es la elección allí. – panchicore

Respuesta

3

No estoy familiarizado con las soluciones pre-empaquetadas que mencionar. Si tuviera que diseñar esto desde el principio, tendría una JS simple recopilando información sobre los clics y posteándola de vuelta al servidor a través de Ajax (usando cualquier marco JS que ya esté usando), y en el lado del servidor simplemente anexaría esa información en un archivo de registro para el posterior procesamiento "fuera de línea", por lo que sería independiente de django u otro marco del lado del servidor, esencialmente.

Al añadir a un archivo de registro es una acción muy ligero, mientras que DB para uso en la web son generalmente de forma optimizada para el funcionamiento (no escritura intensiva)-lectura intensiva, por lo que de acuerdo con usted que la colocación de esa información vigor (ya que engaña) en la base de datos de la aplicación existente es poco probable que ofrezca un buen rendimiento.

+0

Necesitaré la capacidad de hacer más análisis de los datos que los que ofrecerá un archivo de registro, pero el archivo de registro no es una mala idea. Los eventos se procesan a través del servidor a través de llamadas ajax, pero también me gusta la idea de una cola de tareas en este punto ... – jmat

+2

@jmat: en realidad no existen limitaciones sobre lo que puede y no puede poner en los archivos de registro ... como ha mencionado @Alex, siempre puede analizar esos datos "sin conexión" en cualquier tipo de estructuras que necesite para realizar su análisis real. –

+1

@jmat, como @Matthew dice, el registro ofrece exactamente las mismas posibilidades para el "análisis de los datos" que obtendría al bombear los datos directamente a cualquier programa: el registro simplemente se queda un tiempo, por lo que puede procesarse (más de una vez, si es necesario) cuando sea más conveniente hacerlo (p. ej., un procesamiento liviano y rápido hecho a la vez por un demonio observador para conocer algunas cosas simples que necesita saber a la vez, almacenaje más completo fuera de línea más tarde, ¡lo que sea!) –

1

Si con un clic hace clic en un enlace que carga una página nueva (o realiza una solicitud AJAX), entonces lo que pretende hacer es bastante sencillo. Los servidores web tienden a mantener registros de texto sin formato sobre las solicitudes, con información sobre el usuario, la hora/fecha, la referencia, la página solicitada, etc. Puede examinar estos registros y extraer las estadísticas que necesita.

Por otro lado, si tiene una aplicación web donde los clics no generan necesariamente solicitudes de servidor, la mejor opción es recopilar información de clics con javascript.

+0

Estos clics pueden provenir de múltiples fuentes, dominios internos y externos, por lo que en general, js es la única respuesta aquí ... que ya está funcionando, estoy más interesado en formas de almacenar grandes cantidades de estos datos sin afectar los clics. y cargas de página. – jmat

2

Es probable que desee mantener un formato flexible para que sus registros anticipen las necesidades o los cambios futuros. En este sentido, las bases de datos orientadas a documentos sin esquema son agradables. Una ventaja es que la estructura de sus datos estará cerca de las necesidades de su aplicación para cualquier análisis que realice más adelante (por lo tanto, evite algunos de los trabajos inevitables de análisis/borrado de datos).

Si está pensando en usar mysql, postgresql o similar, entonces debe buscar algo como rsyslog para almacenar en búfer las escrituras y evitar la penalización de rendimiento con el registro pesado. (No puedo decir mucho sobre el apio y otros mecanismos de puesta en cola para este tipo de cosas, pero suenan prometedores.)

Mongodb tiene algunas características agradables que lo hacen fácil de registrar como capped collections. Se puede encontrar un resumen en this post.

+0

El último enlace que proporcionó es uno de los principales motivos que estoy buscando con mongo para este propósito ... esto. – jmat

Cuestiones relacionadas