2010-10-28 13 views
4

J'ai un client qui parle avec le programme serveur (en utilisant sqlite3 comme stockage) qui doit prendre en charge la pagination. Je pense à la façon de mettre en œuvre cela. Une approche:sql: sqlite: pagination côté serveur

1) user request page 1 
    a. execute query from sqlite3 
    b. return the first page range items to client 

2) user request page N 
    a. execute query from sqlite3 
    b. return the N page range itmes to client 

Donc, dans mon approche chaque utilisateur du temps demande des données, je re question de la requête et obtenir les éléments spécifiés, qui semble perte de temps ... (comparaison avec la mise en cache tous les éléments une fois et juste donnez la partie utilisateur demande, mais cette approche est plus complexe, car j'ai besoin de timeout le cache - l'utilisateur utilise le navigateur je ne sais pas quand l'utilisateur est loggout et le cache est inutile)

Des meilleures idées?

Répondre

5

Peut-être que vous pourriez utiliser la capacité LIMIT… OFFET… de SQLite.

Taken de the select syntax documentation:

Au lieu d'une clause OFFSET distincte, la clause LIMIT peut spécifier deux expressions scalaires séparées par une virgule. Dans ce cas, la première expression est utilisée comme expression OFFSET et la seconde comme expression LIMIT. Cela est contre-intuitif, car lorsque vous utilisez la clause OFFSET, la deuxième des deux expressions est OFFSET et la première LIMIT. Ceci est intentionnel - il maximise la compatibilité avec d'autres systèmes de base de données SQL.