python - Update for big count of NDB Entities fails -


i have simple task. after migration , adding new field (repeated , composite property) existing ndb entity (~100k entities) need setup default value it.

i tried code first:

q = dm.e.query(ancestor=dm.e.root_key) user in q.iter(batch_size=500):      user.field1 = [dm.e2()]      user.put() 

but fails such errors:

2015-04-25 20:41:44.792 /**** 500 599830ms 0kb appengine-google; (+http://code.google.com/appengine) module=default version=1-17-0 w 2015-04-25 20:32:46.675 suspended generator run_to_queue(query.py:938) raised timeout(the datastore operation timed out, or data temporarily unavailable.) w 2015-04-25 20:32:46.676 suspended generator helper(context.py:876) raised timeout(the datastore operation timed out, or data temporarily unavailable.) e 2015-04-25 20:41:44.475 traceback (most recent call last): file "/base/data/home/runtimes/python27/python27_lib/versions/1/google/appengine/runtime/wsgi.py", line 267, in 

the task runs on separate task queue have @ least 10 mins execute seems not enough it. strange other thing: warnings ndb. may there dead lock because of updates same entities other instances (initiated users) not sure.

anyway want know best practices (and simplest) such task. know mapreduce looks me overcomplicated such task.

update:

also tried use put_multi grabbing entities in array gae stops instance exceeds ~600 mb of memory (with 500 mb limit). seems not enough memory store entities (~100k).

after execute _migrate_users() process 50 users , create task process next 50 users , on. may use bigger batch size 50 depending on size of entities.

def _migrate_users(curs=none):   users, next_curs, more = user.query().fetch_page(50, start_cursor=curs)   user in users:     user.field1 = 'bla bla'   ndb.put_multi(users)   if more:     deferred.defer(_migrate_users, next_curs, _queue='default') 

Comments

Popular posts from this blog

asp.net mvc - SSO between MVCForum and Umbraco7 -

Python Tkinter keyboard using bind -

ubuntu - Selenium Node Not Connecting to Hub, Not Opening Port -