먼저 스택 오버플로에 대한 첫 번째 게시물이므로 새삼스런 실수를 용서하십시오. 내 질문의 틀이 어떻게 드러나는 지 명확하게 알 수 있다면 알려주십시오.GAE 데이터 저장소에서 스키마 이전
Google App Engine에서 대형 응용 프로그램을 실행 중이며 이전 데이터 클래스를 수정하고 새 클래스를 추가해야하는 새로운 기능이 추가되었습니다. 데이터베이스를 정리하고 오래된 항목을 업데이트하기 위해 클래스의 인스턴스를 반복하고 변경 한 다음 다시 저장할 수있는 스크립트를 작성하려고했습니다. 문제는 Google App Engine이 몇 초가 걸리는 서버 호출을 할 때 시간이 초과된다는 것입니다.
저는 몇 주 동안이 문제로 어려움을 겪었습니다. 내가 찾은 가장 좋은 방법은 여기에 있습니다 :
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),)
이상하게 코드와 클래스를 완벽하게 작동합니다 : http://code.google.com/p/rietveld/source/browse/trunk/update_entities.py?spec=svn427&r=427
난 당신이 여기에서 볼 수있는 내 자신의 웹 사이트에 대한 해당 코드의 버전을 개발 100 - 1,000 개의 인스턴스 사이에 있으며 스크립트는 종종 10 초 정도 걸립니다. 내가 더 좋아 100K 인스턴스와 우리의 데이터베이스 클래스의 코드를 실행하려고 할 때, 스크립트는 30 초 동안 수행 한 후, 나는이 나타납니다
"오류 : 서버에 오류가 발생
서버 오류 문제가 지속되면 문제를보고하고이 오류 메시지와 그 원인을 알린 쿼리를 언급하십시오. ""
정확히 30 초 후에 GAE가 시간 초과되는 이유는 무엇입니까? 이 문제를 해결하려면
고맙습니다! 켈러
정말 빨리 문의해야합니다. 여기 또는 App Engine Google 그룹 (http://groups.google.com/group/google-appengine-python).마이그레이션은 일반적인 문제이며, 사람들은 제공 할 솔루션이 많습니다. 혼자 힘겨워하지 마라. – Calvin