Question

Comment peut-on aller sur l'écriture d'une requête qui sélectionne les articles 2000-2010 sur une collection de 10000 objets dans le magasin de données.

Je sais que cela peut être fait comme ça dans GQL:

select * from MyObject limit 10 offset 2000

Selon la documentation , lorsque vous utilisez un offset la moteur encore chercher toutes les lignes, ne pas les renvoyer, rendant ainsi la requête agit d'une façon qui correspond linéairement avec la valeur de offset.

Y at-il une meilleure façon? Par exemple en utilisant une colonne pseudo-ROWNUM comme on pourrait le faire dans d'autres types de magasins de données.

Était-ce utile?

La solution

Il n'y a aucun moyen de façon efficace page à l'aide des compensations, sauf pour mettre en cache les résultats. Vous pouvez toutefois utiliser datastore curseurs pour implémenter la pagination en utilisant une approche de type 'signet'.

Autres conseils

En plus d'utiliser les curseurs, vous pouvez également utiliser une approche d'ordre de tri. Par exemple:

SELECT * FROM MyObject ORDER BY field LIMIT 10;

pour les 10 premiers objets, puis pour les 10 objets, etc.

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

Le champs pourrait même être une clé si vous ne disposez pas d'un autre champ approprié. Voici un exemple plus complet:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top