2012-04-21 5 views
0

データストア内に多数の既存のエンティティがあるモデルにComputedPropertyフィールドを追加したいと思います。すべてのComputedPropertyフィールドを再生成

この新しいComputedPropertyで既存のエンティティをクエリするには、まず計算されたプロパティを生成する必要があります。

計算をトリガして計算された値をデータストアに戻す最も効率的な方法は何ですか?

答えて

0

実際にどれだけのデータがあるかによって異なります。ここではタスクキューのソリューションですが、それはあなたのクォータで外食します...

class StampValue(webapp.RequestHandler): 
    _task_url = '/tasks/stamp' 
    _page_size = 100 

    @classmethod 
    def fire(cls, **params): 
     taskqueue.add(url=cls._task_url, params=params) 

    def get(self): 
     self.fire() 

    def post(self): 
     key = self.request.get('key') 
     if key: 
      entities = MyModel.gql('WHERE __key__ >= :1 ORDER BY __key__ ASC', db.Key(key)).fetch(self._page_size+1) 
     else: 
      entities = MyModel.gql('ORDER BY __key__ ASC').fetch(self._page_size+1) 

     key = None 
     if len(entities) == self._page_size+1: 
      key = str(entities[-1].key()) 
      self.fire(key=key) 
      entities = entities[:self._page_size] 

     for entity in entities: 
      # update your field here 
     db.put(entities) 
+0

ありがとう。これはうまくいくはずです。 – kvdb

0

あなたが話しているエンティティの数によって異なります。 MapReduceまたは単にリモートAPIを使用する(コンソールを起動して手動で行う)

関連する問題