Thanks much! Apparently something being a one-liner with RDBMS is no
indication it'll be simple with GAE's datastore :)
2009/7/27 Alkis Evlogimenos ('Αλκης Ευλογημένος) <[email protected]>:
> What I used to do was to use the mapper framework found in GAE articles.
> After the task queue was released I found it a lot easier to code and write
> tests for a simple handler that updates one at a time. Basically the handler
> has a get that is accessible only from admin and get enqueues a task for the
> first item in the kind you want to upgrade. The post does the upgrade of the
> passed key and finds the next in line to upgrade and queues a task for that.
> When there is no entities left to process I send an email to myself that
> this is done.
>
> It looks like this:
> class Upgrade(webapp.RequestHandler):
> def get(self):
> self.response.out.write('Started rewriting stuff')
> next = MyModel.all(keys_only=True).get()
> upgrader_queue.add(
> taskqueue.Task(url='/admin/upgrade_mymodel/', params={'next':
> str(next)}))
> def post(self):
> key = db.Key(self.request.get('next'))
> next = MyModel.all(keys_only=True).filter('__key__ >', key).get()
> def txn():
> entity = db.get(key)
> if entity:
> // do stuff
> if next:
> upgrader_queue.add(
> taskqueue.Task(url='/admin/upgrade_mymodel/', params={'next':
> next}))
> else:
> // mail myself that upgrade is done!!!
> db.run_in_transaction(txn)
> This has a race condition: if an entity is added during the time you perform
> the upgrade you will not process it. This is ok if all "new" entities do not
> need to be upgraded which is often the case.
> On Mon, Jul 27, 2009 at 3:56 PM, Alexander Tereshkin <[email protected]>
> wrote:
>>
>> Hello All,
>>
>> Could you please share your wisdom on the following issue: I have
>> added a new property to a model and would like to filter the data on
>> this property. However, I already have quite a bit of data stored and
>> all the entities that were created before the last upgrade don't have
>> the new property and hence won't be returned by the queries once the
>> filter is added.
>> How are you dealing with such situations? Is there some sort of best
>> practice here or maybe I just missed something in the docs? Since
>> there are no batch updates, it looks like the only option is to cycle
>> through all the entities and update them one by one. But then again
>> there's too much data to do it in a single request, so I should
>> process only this much entities at a time and enqueue the rest of
>> processing.
>> It just sounds like too much code for something this simple. I'm
>> considering writing a generic routine in python to handle this type of
>> upgrades, but wanted to check first if I'm missing anything or if such
>> routine already exists.
>>
>> Thanks,
>> Alex
>>
>>
>
>
>
> --
>
> Alkis
>
> >
>
--
Best Regards,
Alexander Tereshkin,
Y-NODE Software
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Google App Engine" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/google-appengine?hl=en
-~----------~----~----~----~------~----~------~--~---