Daniel đúng, nhưng nếu bạn không muốn làm hỏng người lập bản đồ, yêu cầu bạn thêm một thư viện khác vào ứng dụng của mình, bạn có thể sử dụng Task Queues hoặc thậm chí đơn giản hơn bằng cách sử dụng deferred library được bao gồm trong SDK 1.2 .3.
20.000 thực thể không phải là ấn tượng và tôi cho rằng nhiệm vụ này sẽ không được thực hiện thường xuyên (nhưng ngay cả khi có, nó là khả thi).
Dưới đây là ví dụ sử dụng NDB và thư viện hoãn lại (bạn có thể dễ dàng thực hiện việc đó bằng DB, nhưng hãy cân nhắc chuyển sang NDB nếu bạn chưa sử dụng nó). Đó là một cách khá thẳng về phía trước, nhưng không quan tâm nhiều đến thời gian chờ:
def update_model(limit=1000):
more_cursor = None
more = True
while more:
model_dbs, more_cursor, more = Model.query().fetch_page(limit, start_cursor=more_cursor)
for model_db in model_dbs:
model_db.updated = True
ndb.put_multi(model_dbs)
logging.info('### %d entities were updated' % len(model_dbs))
class UpdateModelHandler(webapp2.RequestHandler):
def get(self):
deferred.defer(update_model, _queue='queue')
self.response.headers['Content-Type'] = 'text/html'
self.response.out.write('The task has been started!')
Tôi thực sự đã sử dụng khung MapReduce để pipelining các hoạt động này có vẻ là một ý tưởng hay. Mối quan tâm của tôi là có nhiều thao tác đơn lẻ() hoạt động song song. ngoài vấn đề hiệu năng, tôi lo lắng về thời gian chờ của kho dữ liệu vì nhiều thực thể chia sẻ các nhóm thực thể. Có anyway để đường ống và vẫn tổng hợp put() s? –
api map-reduce cho phép các hoạt động kho dữ liệu hàng loạt thông qua một nhóm đột biến. http://code.google.com/p/appengine-mapreduce/wiki/GettingStartedInPython –