2010-03-10 9 views
6

¿Dónde almacena Google los registros cuando haces una declaración de registro? Las declaraciones de inicio de sesión parecen ser bastante rápidas, por lo que no parece que estén almacenadas en el almacén de datos.¿Cómo funcionan exactamente los registros de Google App Engine?

¿Qué tan confiables son los registros? Si realizo una declaración de registro y tiene éxito, ¿se garantiza que aparecerá en los registros?

¿Cuánto historial de registros se almacena?

La razón por la que estoy interesado en esto es porque estoy creando un sitio web de preguntas y respuestas, y quiero hacer un seguimiento de las opiniones de cada usuario único conectado a cada pregunta, y mostrar el conteo de visitas en la pregunta página. Entonces, si 10 usuarios diferentes visitan la página de preguntas 100 veces, solo cuenta como 10 vistas únicas.

Tengo una computadora externa que procesa el fondo de mi aplicación. Estoy planeando que esta computadora externa descargue los registros aproximadamente cada 30 minutos y calcule cuál debe ser el conteo de las vistas para cada pregunta en función de los registros. Al hacer esto, no tengo que crear una entidad de almacenamiento de datos para cada pregunta diferente que cada usuario ve.

¿Qué piensan? ¿Alguien ve algún problema con esto?

EDITAR: Creo que mi principal preocupación es la fiabilidad de los registros.

Respuesta

5

Esta no es una respuesta a su pregunta, sino que es una respuesta al problema que está tratando de resolver.

Si está familiarizado con Bloom Filters y usa Memcached's incr (o sharded datastore counter) puede crear una solución que sea "lo suficientemente buena". Puede usar un Bloom Filter para probar si hay un valor en el conjunto (en este caso, una identificación de usuario), y si no, incremente su contador y agregue el valor al filtro. Una de las propiedades de Bloom Filters es que agregar un valor al conjunto que se va a verificar con inclusión es una operación de tiempo constante. En el sentido de las manecillas del espacio, tomará un poco de espacio almacenar cada filtro potencial, pero esto ya parece ser un orden de magnitud menos complejo que escribir código para grep periódicamente para los únicos. Here's a Python implementation.

Nada es gratis, sin embargo - dije "lo suficientemente bueno" era importante. Con Bloom Filters, siempre hay una posibilidad de un falso positivo. Es decir, dependiendo del tamaño del hash por pregunta, hay una pequeña posibilidad de que compruebe si la identificación del usuario ya se ha contado y obtener un "SÍ TIENE TIEMPO" cuando esa es la primera vez que el usuario ha visto la pregunta . Puede calcular el tamaño que necesita para un falso positivo razonable, pero existe una compensación de espacio para hacerlo.

+0

Gracias Ikai, consideré usar el Memcache y le hice esta pregunta al respecto: http://stackoverflow.com/questions/2422131/google-app-engine-memcache-how-likely-am-i-to-lose- data-in-this-scenario. Todas las respuestas que recibí decían que no debía confiar en el Memcache para el almacenamiento temporal de datos, solo debería usarlo como un caché. De hecho, se me ocurrió una solución bastante agradable para usar los registros de solicitud para averiguar los datos que necesito :). – Kyle

+0

También probé usando el almacén de datos (http://stackoverflow.com/questions/2427442/google-app-engine-about-how-much-quota-does-a-single-datastore-put-use), y pensé que era demasiado caro, especialmente teniendo en cuenta que los datos que necesito ya están almacenados en los registros de solicitud. – Kyle