5

Desde el blog de appengine:¿Cómo implementa appengine query en una lista de manera eficiente?

Planificación de consultas avanzada: estamos eliminando la necesidad de explotar los índices y reducir los requisitos de índice personalizado para muchas consultas. El SDK sugerirá mejores índices en varios casos y un próximo artículo describirá qué otras optimizaciones son posibles.

Como prueba, que tienen una entidad en appengine que tiene un ListProperty

class Entity(db.Model): 
    tags = db.StringListProperty() 

que tienen 500.000 entidades, la mitad de ellos tienen etiquetas = [ '1'], y la otra mitad tienen etiquetas = [ '2']

mi consulta es

SELECT FROM Entity WHERE tags='1' and tags='2' 

Se devolvió resultados muy rápidamente. ¿Qué plan está usando para lograr esto? ¿Cómo se indexa la lista para lograr esto? En los viejos tiempos, un índice explosivo habría sido necesario.

+0

IIRC esto se cubrió en una de las charlas técnicas: nunca requirió un índice explosivo, solo StringListProperty – bdonlan

+1

Ninguno de los cambios avanzados en la planificación de consultas afectará esta consulta. ¿Cómo insertaste las entidades? Si todos los que tienen etiquetas = 2 tienen identificaciones más altas que las que tienen etiquetas = 1 (o viceversa), esta consulta es trivial de satisfacer. –

+0

Creo que la consulta significaba: SELECCIONE DE Entidad DONDE etiquetas = '1' y etiquetas = '2' ORDEN POR fecha – Jaap

Respuesta

2

El algoritmo utilizado internamente ('merge-join') se describió en la charla técnica de Google I/O 2009 Building Scalable, Complex Apps on App Engine. Esta funcionalidad también ha estado disponible desde el lanzamiento de GAE; los 'índices explosivos' solo ocurren si crea un índice compuesto de múltiples StringListProperties.

Vale la pena señalar que esta funcionalidad es en realidad un poco más general de lo que imagina: cualquier combinación de múltiples filtros de igualdad en cualquier combinación arbitraria de propiedades puede satisfacerse sin ningún índice compuesto, siempre que todos sean filtros de igualdad y usted no tiene un orden de clasificación No todos tienen que ser de StringListProperty, e incluso se pueden dividir en múltiples StringListProperty.

Cuestiones relacionadas