¿Qué tan rápidos son App Engine db.get (claves) y A.all (keys_only = True) .filter (‘b =’, b) .fetch (1000)?

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.