【发布时间】:2013-11-29 14:52:35
【问题描述】:
我很想知道在 Google App Engine 中迁移实体架构的最佳做法是什么。我们经常使用管道,我倾向于构建一个管道任务来处理这种迁移。所以这就是我想出的(在这个例子中,如果用户的年龄是质数,我存储):
class MigrateUsers(pipeline.Pipeline):
def run(self, keys):
futures = []
users = ndb.get_multi(keys)
for user in users:
user.age_is_prime = is_prime(user.age)
futures.append(user.put_async())
ndb.Future.wait_all(futures)
class Migration(pipeline.Pipeline):
def run(self):
all_results = []
q = ds.User.query().filter()
more = True
next_cursor = None
# Fetch user keys in batch and create MigrateUsers jobs
while more:
user_keys, next_cursor, more = \
q.fetch_page(500, keys_only=True, start_cursor=next_cursor)
all_results.append((yield MigrateUsers(keys=user_keys)))
# Wait for them all to finish
pipeline.After(*all_results)
我的问题是,我这样做对吗?我的“迁移”任务迭代所有用户以创建分段任务,这感觉有点笨拙。我确实看了一下mapreduce,但我觉得它不合适。我会很感激任何建议,如果您正在使用 mapreduce 并且不介意转换我的示例,我将非常感激。
【问题讨论】:
标签: google-app-engine app-engine-ndb