Pregunta

Estoy desarrollando software usando el motor de aplicaciones de Google.

Tengo algunas consideraciones sobre el diseño óptimo con respecto al siguiente problema: necesito crear y guardar instantáneas de algunas entidades a intervalos regulares.

en el mundo de db relacional convencional, crearía trabajos de db que insertarían nuevos registros de resumen.

por ejemplo, un trabajo insertaría un registro para cada usuario activo que contendría su puntaje actual al " userrank " Mesa, digamos, cada hora.

Me gustaría saber cuál es el mejor método para lograrlo en el motor de Google Apps. Sé que existe el servicio Cron, pero ¿nos permite ejecutar trabajos que insertarán / actualizarán miles de registros?

¿Fue útil?

Solución

¿Ha considerado usar la api remoto ? De esta manera usted podría obtener un shell para su almacén de datos y evitar los tiempos de espera. La clase Mapper que demuestran en ese enlace es bastante útil y la he usado con éxito para realizar operaciones por lotes en ~ 1500 objetos.

Dicho esto, cron debería funcionar bien también. Tiene un límite en el tiempo de cada solicitud individual, por lo que no puede masticarlas todas a la vez, pero puede usar la redirección para recorrer tantos usuarios como desee, procesando un usuario a la vez. Debería haber un ejemplo de esto en los documentos en algún lugar si necesita ayuda con este enfoque.

Otros consejos

Creo que encontrará que hacer una instantánea del estado de cada usuario cada hora no es algo que se pueda escalar bien sin importar su marco. Un entorno más común disimulará esto al permitirle realizar tareas más largas, pero aún llegará al punto en el que no es práctico tomar una instantánea de los datos de cada usuario, cada hora.

Mi sugerencia sería esta: agregue un campo de 'última instantánea' y haga una subclase de la función put () de su modelo (suponiendo que esté usando Python; lo mismo es posible en Java, pero no conozco la sintaxis ), de modo que cada vez que actualice un registro, compruebe si ha pasado más de una hora desde la última instantánea, y si es así, crea y escribe un registro de instantáneas.

Para evitar que las actualizaciones simultáneas creen dos instantáneas idénticas, querrá darle a las instantáneas un nombre de clave derivado del momento en que se tomó la instantánea. De esa forma, si dos actualizaciones simultáneas intentan escribir una instantánea, una sobrescribirá inofensivamente a la otra.

Para obtener la instantánea para una hora determinada, simplemente consulte la instantánea más antigua más reciente que el período solicitado. Como bono adicional, ya que los registros inactivos no son instantáneos, también está ahorrando mucho espacio.

Usaría una combinación de trabajos Cron y un método de recuperación de URL en bucle que se detalla aquí: http: // stage.vambenepe.com/archives/549 . De esta manera, puede capturar sus tiempos de espera y comenzar otra solicitud.

Para resumir el artículo, el trabajo cron llama a su proceso inicial, atrapa el error de tiempo de espera y vuelve a llamar al proceso, enmascarado como una segunda URL. Tienes que hacer ping entre dos URL para evitar que el motor de la aplicación piense que estás en un bucle accidental. También debes tener cuidado de no hacer un bucle infinito. Asegúrese de que haya un estado final para su ciclo de actualización, ya que esto lo pondría sobre sus cuotas bastante rápido si nunca terminara.

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