【发布时间】:2014-05-21 03:38:42
【问题描述】:
在未来的某个时候,我可能需要批量加载迁移数据(即来自 CSV)。有没有人提出以下例外情况?如果使用 ndb.put_multi() 函数,行为是否也有任何变化?
from google.appengine.ext import ndb
while True:
if not id:
break
id, name = read_csv_row(readline())
x = X(parent=ndb.Key('Y','static_id')
x.id, x.name = id, name
x.put()
class X(ndb.Model):
id = StringProperty()
name = StringProperty()
class Y(ndb.Model):
pass
def read_csv_row(line):
"""returns tuple"""
【问题讨论】:
-
是的,但是您提供的代码不起作用。如果您运行该代码,您将得到很多异常;-)。如果整个过程花费的时间超过 60 秒,则需要考虑使用任务。如果您需要用户执行任务,请先将文件上传到 GCS,然后启动任务以进行导入。
-
@TimHoffman,感谢您的建议。我会考虑使用 GCS。实际代码是针对可能在短时间内以每秒超过 1 条消息的速度进入的入站邮件,因此我猜需要一些排队。知道我会怎么做吗?
-
您可以将电子邮件存储在数据存储中,如果它们超过 1MB,则可以存储在 gcs 中。在数据存储中保留一个代理对象。然后您可以将这些记录用作您的队列。启动一个命名任务以在 10 分钟内处理队列中的所有邮件或尽可能多的邮件。值得一读尼克约翰逊关于任务队列的一些文章 - blog.notdot.net/tag/deferred。事实上,我建议值得阅读他关于 appengine 的所有文章 ;-)
标签: google-app-engine python-2.7 app-engine-ndb