Frage

Wie kann man über das Schreiben eine Abfrage, wählen Elemente 2000-2010 aus einer Sammlung von 10.000 Objekten im Datenspeicher gehen würde.

Ich weiß, dass es so in GQL getan werden kann:

select * from MyObject limit 10 offset 2000

Nach der Dokumentation , bei Verwendung eines offset die Motor wird nach wie vor alle Zeilen holen, nicht nur sie zurück, wodurch die Abfrage in einer Art und Weise durchzuführen, dass entspricht linear mit dem Wert von offset.

Gibt es einen besseren Weg? Wie eine Pseudo ROWNUM Spalt wie man in anderen Arten von Datenspeichern tun könnte.

War es hilfreich?

Lösung

Es gibt keinen Weg, um effizient Seitenversätze, mit der Ausnahme der Ergebnisse zwischenzuspeichern. Sie können jedoch verwenden Datenspeicher Cursor Paging zu implementieren mit einem ‚Lesezeichen‘ Typ Ansatz.

Andere Tipps

Neben Cursor verwenden, können Sie auch eine Sortierreihenfolge Ansatz. Zum Beispiel:

SELECT * FROM MyObject ORDER BY field LIMIT 10;

für die ersten 10 Objekte und dann für die nächsten 10 Objekte, etc.

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

Feld könnte sogar ein Schlüssel sein, wenn Sie keine andere dafür vorgesehene Feld haben. Hier ist ein vollständigeres Beispiel:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top