precios planes google engine app almacenamiento google-app-engine go google-cloud-datastore nosql

google-app-engine - planes - google nosql db



Google Datastore: no se ve 1 escritura por segundo por límite de grupo de entidades (3)

He leído mucho acerca de la coherencia fuerte versus eventual, el uso de antepasados ​​/ grupos de entidades, y el 1 de escritura por segundo por grupo de entidades de limitación de Google Datastore.

Sin embargo, en mis pruebas nunca he alcanzado la excepción Too much contention on these datastore entities. please try again. Too much contention on these datastore entities. please try again. y estoy tratando de entender si estoy malinterpretando estos conceptos o me estoy perdiendo una parte del rompecabezas.

Estoy creando entidades así:

func usersKey(c appengine.Context) *datastore.Key { return datastore.NewKey(c, "User", "default_users", 0, nil) } func (a *UserDS) UserCreateOrUpdate(c appengine.Context, user models.User) error { key := datastore.NewKey(c, "User", user.UserId, 0, usersKey(c)) _, err := datastore.Put(c, key, &user) return err }

Y luego leerlos con el datastore.Get . datastore.Get . Sé que no tendré problemas de lectura ya que estoy haciendo una búsqueda por clave, pero si tengo un gran volumen de usuarios creando y actualizando su información, teóricamente alcanzaría el máximo de 1 escritura por segundo constantemente.

Para probar esto, intenté crear 25 usuarios a la vez (utilizando los métodos anteriores, sin procesamiento por lotes), sin embargo, no registré ninguna excepción , lo que implica que debería: Google App Engine HRD: ¿qué sucede si supero la escritura de 1? por segundo límite para escribir en el grupo de entidades?

¿Qué me estoy perdiendo? ¿La afirmación solo se aplica a las consultas, no es un volumen suficientemente alto o me falta algo completamente distinto?


De la documentación:

Las escrituras en un solo grupo de entidades están serializadas por el almacén de datos de App Engine, y por lo tanto hay un límite en la rapidez con la que puede actualizar un grupo de entidades. En general, esto funciona entre 1 y 5 actualizaciones por segundo; Una buena pauta es que debería considerar realizar una nueva configuración si espera que un grupo de entidades deba mantener más de una actualización por segundo durante un período prolongado.

Tenga en cuenta las palabras "período extendido". 1 actualización por segundo es básicamente un rendimiento mínimo garantizado. En cualquier momento dado, es posible que pueda alcanzar niveles significativamente más altos, pero Google le advierte que no debe diseñar esos niveles para que siempre estén disponibles.


La limitación es por grupo de entidades, lo que significa que puede crear tantos usuarios como necesite sin limitaciones (que es donde la escala brilla), siempre y cuando no compartan el mismo antecesor.

Las cosas cambian una vez que comienzas a utilizar la clave de usuario como el antecesor de otras entidades, haciéndolas parte del mismo grupo y teniendo así un límite en la cantidad de cambios que puedes hacer por segundo.

Por cierto, esto es una generalización, lo más probable es que pueda hacer ~ 5 cambios por segundo, esta limitación existe debido a las propiedades transaccionales de un grupo de entidades, por lo que hay algún tipo de tabla con cambios que se deben ejecutar secuencialmente, por lo que tiene para bloquear, y por lo tanto hay un rendimiento limitado.

Aún así, la regla general es pensar que solo puedes hacer 1 por segundo para forzarte a pensar sobre cómo trabajar en estas condiciones.

Y como se mencionó, esto solo es relevante cuando actualiza la base de datos, get y las consultas deben escalarse según sea necesario.


No creo que te estés perdiendo nada aquí. Anteriormente, había visto las mismas limitaciones al escribir en el mismo grupo de entidades, pero recientemente (esta semana, de hecho) no he visto los retrasos. Estoy dispuesto a sugerir que Google ha resuelto este problema, y ​​espero que alguien me pruebe lo correcto.