2012-05-04 8 views
8

De acuerdo con la documentación de Google App Engine, escribir en un grupo de entidades está limitado a una escritura por segundo cuando se utiliza el almacén de datos de replicación alta. Entonces ...Google App Engine HRD: ¿qué ocurre si supero el límite de 1 escritura por segundo para escribir en el grupo de entidades?

  1. ¿Qué sucede si excedo este límite? ¿Algún tipo de excepción? ¿Y que debería hacer?
  2. ¿Cómo sé que estoy cerca de superar este límite? Puedo diseñar la aplicación de manera que las acciones particulares (agregar una entidad ...) no sean frecuentes, pero naturalmente no puedo garantizarlo.

Respuesta

9

una escritura por segundo es un poco baja. en realidad es más que eso. Incluso diría entre 5 y 10 escrituras por segundo, pero no puedo garantizarlo, por supuesto.

Si llega a ese límite, obtendrá una excepción sí. el mensaje de excepción será:
Too much contention on these datastore entities. please try again.

pero no sé/recuerdo la Excepción exacta que surgirá.

tiene la opción de volver a intentar, continuar o cualquier otra cosa que considere correcta en ese momento.

no puede decir si está cerca de un límite de 1 escritura por segundo. sucede y tú lidias con eso.

+1

java.util.ConcurrentModificationException es la excepción que busca –

+0

no, yo no. no usando java;). pero si lo hiciera, entonces sí, esta sería probablemente la excepción que estoy buscando. – aschmid00

+0

El límite en realidad está más cerca de 1 que 10 para el HRD. –

15

Sobre la base de la documentación GAE y de mi experiencia limitada:

  1. esperar algo así como 1 tasa de QPS y ajustar su aplicación en consecuencia.
  2. Sharding es un patrón común para controlar la contención del almacén de datos.
  3. añadir siempre su código defensiva para manejar cada posible excepción (Application Error 5, The datastore operation timed out, Transaction collision for entity group, ..)
  4. En caso de error, vuelva a intentar la escritura en movimiento la tarea en un TaskQueue adecuado o, si se puede, simplemente alertar al usuario que intente de nuevo.
  5. Volviendo a intentar escribir, funciona generalmente.
  6. Cuando sea posible, use un mecanismo de caché de escritura diferida que mueva la operación de escritura que puede conducir a contención a Memcache y Taskqueue ralentizando la velocidad de aciertos del almacén de datos.
  7. Una buena forma de evitar conflictos es mantener los grupos de entidades pequeños, pero no contar demasiado.
  8. Puede tener contención incluso en una sola entidad.
Cuestiones relacionadas