2010-04-16 23 views
8

Veri deposunda 10000 nesneden oluşan bir koleksiyondan 2000-2010 öğelerini seçen bir sorgu yazmak nasıl olur?Google uygulama motoru ve sayfalama

Ben GQL böyle yapılabileceğini biliyoruz: Bir offset kullanırken

select * from MyObject limit 10 offset 2000 

documentation göre, motor hala tüm satırları alıp bunu, sadece bu nedenle sorguyu hale dönmelerini değil offset'un değerine doğrusal olarak denk gelecek şekilde gerçekleştirin.

Daha iyi bir yolu var mı? Böyle bir sahte ROWNUM sütun gibi diğer veri depolarında yapabileceği gibi.

cevap

6

Sonuçları önbelleğe almak dışında, ofsetleri verimli bir şekilde kullanmanın bir yolu yoktur. Bununla birlikte, bir 'yer imi' tipi yaklaşımı kullanarak çağrıları uygulamak için datastore cursors'u kullanabilirsiniz.

+0

Serin, çok teşekkür ederim: Burada daha kapsamlı bir örnektir. –

2

İmleçlerin yanı sıra sıralama düzeni yaklaşımı da kullanabilirsiniz. Örneğin: Başka bir uygun alanı yoksa önümüzdeki 10 nesneler için daha sonra

SELECT * FROM MyObject ORDER BY field LIMIT 10; 
ilk 10 nesneler için

ve vb

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

Saha bile bir anahtar olabilir.

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

İlgili konular