gpt4 book ai didi

python - GAE 数据存储上的模式迁移

转载 作者:太空狗 更新时间:2023-10-29 23:56:02 25 4
gpt4 key购买 nike

首先,这是我在 Stack Overflow 上的第一篇文章,所以请原谅任何新手的错误步骤。如果我可以更清楚地表达我的问题,请告诉我。

我在 Google App Engine 上运行一个大型应用程序,并且一直在添加新功能,这迫使我修改旧的数据类并添加新的数据类。为了清理我们的数据库并更新旧条目,我一直在尝试编写一个脚本,该脚本可以遍历类的实例、进行更改,然后重新保存它们。问题是当您调用服务器的时间超过几秒时,Google App Engine 会超时。

几个星期以来,我一直在为这个问题而苦苦挣扎。我找到的最佳解决方案在这里:http://code.google.com/p/rietveld/source/browse/trunk/update_entities.py?spec=svn427&r=427

我为自己的网站创建了该代码的一个版本,您可以在此处查看:

def schema_migration (self, target, batch_size=1000):
last_key = None
calls = {"Affiliate": Affiliate, "IPN": IPN, "Mail": Mail, "Payment": Payment, "Promotion": Promotion}

while True:
q = calls[target].all()
if last_key:
q.filter('__key__ >', last_key)
q.order('__key__')
this_batch_size = batch_size

while True:
try:
batch = q.fetch(this_batch_size)
break
except (db.Timeout, DeadlineExceededError):
logging.warn("Query timed out, retrying")
if this_batch_size == 1:
logging.critical("Unable to update entities, aborting")
return
this_batch_size //= 2

if not batch:
break

keys = None
while not keys:
try:
keys = db.put(batch)
except db.Timeout:
logging.warn("Put timed out, retrying")

last_key = keys[-1]
print "Updated %d records" % (len(keys),)

奇怪的是,该代码对于具有 100 到 1,000 个实例的类非常有效,并且脚本通常需要大约 10 秒。但是,当我尝试为我们的数据库中包含更多 100K 个实例的类运行代码时,脚本运行了 30 秒,然后我收到了:

“错误:服务器错误

服务器遇到错误,无法完成您的请求。如果问题仍然存在,请报告您的问题并提及此错误消息和导致它的查询。""

知道为什么 GAE 在整整 30 秒后超时吗?我该怎么做才能解决这个问题?

谢谢!凯勒

最佳答案

您听到了第二个 DeadlineExceededError。 AppEngine 请求每次只能运行 30 秒。当引发 DeadLineExceedError 时,您的工作是停止处理并进行整理,因为时间不多了,下次引发时您将无法捕获它。

你应该看看使用 Mapper API将您的迁移分成多个批处理并使用任务队列运行每个批处理。

关于python - GAE 数据存储上的模式迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5137070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com