Un db.get () de 50 teclas parece tomarme 5-6 segundos. ¿Eso es normal? ¿Cuál es el tiempo de una función?
También hice un A.all (keys_only = True) .filter (‘b =’, b) .fetch (1000) donde Ab es una propiedad de referencia. Hice 50 viajes de este tipo al almacén de datos, con diferentes valores de b, y el tiempo total fue de solo 3-4 segundos.
¿Cómo es esto posible? db.get () se realiza en paralelo, con un solo viaje al almacén de datos, y creo que buscar una entidad por clave es una operación más rápida que la búsqueda.
Aquí está la definición para mi clase A:
class App(db.Model): name_atom = db.ReferenceProperty(AppName) author = db.ReferenceProperty(Author) short_desc = db.StringProperty() description = db.TextProperty() url = db.StringProperty() rating_avg = properties.RangeProperty(0, 1000, default=0) rating_count = properties.RangeProperty(min_value=0, default=0) add_dt = db.DateTimeProperty(auto_now_add=True) modify_dt = db.DateTimeProperty(auto_now=True)
Actualizar
Bien, AppStats dice: datastore_v3.Get real=2272ms api=416ms
Creo que lo que está sucediendo es que estoy haciendo este db.get ([50 teclas]) justo después de una tonelada de otras llamadas ineficientes del almacén de datos en el mismo controlador de solicitudes, y es solo una limitación de velocidad o algo así. Otras veces he hecho el mismo db.get () y regresó en 200 ms 🙂
Un db.get () de 50 teclas parece tomarme 5-6 segundos. ¿Eso es normal? ¿Cuál es el tiempo de una función?
No. Debería tomar un par de cientos de milisegundos. ¿Cómo lo estás sincronizando, sin embargo?
También hice un A.all (keys_only = True) .filter (‘b =’, b) .fetch (1000) donde Ab es una propiedad de referencia. Hice 50 viajes de este tipo al almacén de datos, con diferentes valores de b, y el tiempo total fue de solo 3-4 segundos.
Eso no es irrazonable, para 50 viajes de ida y vuelta.
¿Cómo es esto posible? db.get () se realiza en paralelo, con un solo viaje al almacén de datos, y creo que buscar una entidad por clave es una operación más rápida que la búsqueda.
Es un resultado extremadamente extraño, y creo que probablemente haya factores de confusión en el trabajo. Como sugiere David, debes usar AppStats para descubrir a dónde va el tiempo.
Al obtener entidades por clave, el tiempo de consulta debe depender principalmente del tamaño de sus entidades. Las entidades deben transferirse a usted a través de la red y luego decodificarse.
Tal vez sus entidades son bastante grandes? Esto podría explicar por qué su consulta keys_only
es más rápida a pesar de que incluye un filtro y obtiene muchos más resultados.
Puede considerar usar AppStats para ver exactamente por qué su solicitud está demorando tanto. Incluso podrías publicarlo junto con tu pregunta.