2010-04-16 16 views
8

come si potrebbe andare a scrivere una query che seleziona gli elementi 2000-2010 da una collezione di 10.000 oggetti nell'archivio dati.Google App Engine e il paging

So che si può fare in questo modo in GQL:

select * from MyObject limit 10 offset 2000 

Secondo il documentation, quando si utilizza un offset il motore sarà ancora recuperare tutte le righe, non li solo tornare, rendendo così la query eseguire in modo che corrisponda linearmente al valore di offset.

C'è un modo migliore? Come usare una colonna pseudo ROWNUM come si potrebbe fare in altri tipi di archivi dati.

risposta

6

Non c'è modo in modo efficiente pagina utilizzando offset, ad eccezione di memorizzare nella cache i risultati. Tuttavia, è possibile utilizzare datastore cursors per implementare il paging utilizzando un approccio di tipo "segnalibro".

+0

fresco, grazie mille. –

2

Oltre a utilizzare i cursori si può anche utilizzare un approccio ordinamento. Per esempio:

SELECT * FROM MyObject ORDER BY field LIMIT 10; 

per i primi 10 oggetti e quindi per i prossimi 10 oggetti, ecc

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

campo potrebbe anche essere una chiave, se non si dispone di un altro campo appropriato. Ecco un esempio più completo:

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