When it’s ready.

出来るまで出来ない

GAEでの1000件のリミットの所在

「GAEのDatastoreって1000件しかデータがとってこれないよねぇ、大変だよねぇ」という、意味が有るのか無いのかよく分からない会話をしたりする訳ですが、1000件というの数が、どこに効くのかなぁと思いテストコード
Model.all()が1000件ずつ区切られて、その中でorder掛かったりしても全然うれしくないなぁという事をすっきりさせたかった。

from google.appengine.ext import db

class Feed(db.Model):      
   feed_id = db.IntegerProperty()  
   link = db.StringProperty()
   text = db.StringProperty(required=True)
   screen_name = db.StringProperty()
   
   created = db.DateTimeProperty(auto_now_add=True)
   updated = db.DateTimeProperty(auto_now=True)


for i in range(2008):
  f = Feed(text = 'test %s'%(i), feed_id= i)
  f.put()

g = Feed.all().order('-created')[0]
print g.feed_id
g = db.GqlQuery("SELECT * FROM Feed " + 
               "WHERE feed_id = :1 ",2007)
g = g.fetch(1)[0]
print g.feed_id, g.text

とりあえづ、2008個のFeed エンティティを作成して、日付順で並べた最後のやつ取ってきて、最後のやつと思われる物も1本釣りして同じかどうかを確かめる

結果

2007
2007 text 2007

これで何個入ろうとも、最後の一個は必ず取れると言うことが分かった。