2010-06-28 16 views
6

Estoy tratando de contar el número de usuarios únicos por día en mi aplicación java appengine. He decidido usar el framework mapreduce (mapreduce.appspot.com) para java appengine para hacer este cálculo sin conexión. Me las he arreglado para crear un trabajo de reducción de mapas que atraviesa todas mis entidades que representan un evento de sesión de un solo usuario. Puedo usar un contador simple también. Sin embargo, tengo varias preguntas:Contando usuarios únicos usando Mapreduce para Java Appengine

1) ¿Cómo solo puedo incrementar un contador una vez por cada identificación de usuario? Actualmente estoy mapeando entidades que contienen una propiedad de identificación de usuario, pero muchas de estas entidades pueden contener el mismo ID de usuario, así que ¿cómo solo lo cuento una vez?

2) Una vez que tengo estos resultados del trabajo almacenado en estos contadores, ¿cómo puedo persistir con ellos en el almacén de datos? Veo los resultados de los contadores en la página de estado de mapreduce, pero quiero que estos resultados se conserven automáticamente en el almacén de datos.

Ideas?

Respuesta

1

No he usado realmente la funcionalidad de MapReduce todavía, pero mi entendimiento teórico es que puede escribir cosas en el almacén de datos desde su mapeador. Podrías crear un tipo de Entidad llamado algo así como UniqueCount, e insertar una entidad cada vez que tu mapeador vea una ID que no haya visto antes. luego puede contar cuántas identificaciones únicas tiene. De hecho, puede actualizar un contador cada vez que encuentre una nueva entidad única. Es posible que desee buscar en Google "contador sin formato" para obtener sugerencias sobre cómo crear un contador en el almacén de datos que pueda manejar un alto rendimiento.

Eventualmente, cuando terminen la funcionalidad Reduce, me imagino que toda esta tarea se volverá bastante trivial.

+0

"cada vez que encuentre una entidad única": ¿cómo puede saber si la entidad que está mirando (actualmente mapeo) es una que ha visto antes? – aloo

+0

Digamos que su asignador acaba de recibir la entidad con ID de usuario ABC123. lo primero que debe hacer es verificar si hay una entidad UniqueCount para ABC123. Si lo hay, ya sabes que ya lo explicaste, y no harás nada. Si no lo hay, creará una entidad UniqueCount para ABC123. Después de haber hecho eso para todas sus entidades, tendrá exactamente una entidad UniqueCount para cada usuario. A continuación, puede hacer un conteo más directo de solo las entidades UniqueCount. –

+0

Ahh, esto implica crear otro tipo de entidad en el almacén de datos ... y ejecutar dos pases. Parece razonable, pero esperaba una solución más simple – aloo

Cuestiones relacionadas