2010-04-16 10 views
8

¿Cómo se puede escribir una consulta que selecciona los elementos 2000-2010 de una colección de 10000 objetos en el almacén de datos.motor de búsqueda de Google y paginación

Sé que se puede hacer así en GQL:

select * from MyObject limit 10 offset 2000 

De acuerdo con la documentation, cuando se utiliza un offset el motor seguirá habiendo podido ir a todas las filas, sólo que no devolverlos, con lo que la consulta realice de una manera que corresponda linealmente con el valor de offset.

¿Hay alguna otra manera mejor? Como usar una columna pseudo ROWNUM como se podría hacer en otros tipos de almacenes de datos.

Respuesta

6

No hay forma de utilizar páginas de desplazamiento de manera eficiente, excepto para almacenar en caché los resultados. Sin embargo, puede usar datastore cursors para implementar la búsqueda utilizando un enfoque tipo "marcador".

+0

fresca, muchas gracias. –

2

Además de utilizar los cursores, también puede usar un método de orden de clasificación. Por ejemplo:

SELECT * FROM MyObject ORDER BY field LIMIT 10; 

durante los primeros 10 objetos y luego durante los siguientes 10 objetos, etc.

SELECT * FROM MyObject WHERE field > largestFieldValueFromPreviousResult ORDER BY field LIMIT 10; 

campo podría incluso ser una clave si no tiene otro campo apropiado. Aquí está un ejemplo más completo:

http://code.google.com/appengine/articles/paging.html

Cuestiones relacionadas