我试图迭代大量的数据存储记录,目前大约有330,000个。从概念上讲,每条记录都有一行,一列和一个值,我会迭代记录并构建一个矩阵,然后我将其用于计算。
我得到的错误是:超时:数据存储区操作超时,或者数据暂时不可用。
[补充:请注意,我的问题不是应用引擎超时。作为CRON作业运行,我有足够的时间,数据存储区错误比应用程序引擎超时更快发生。此外,我已经尝试过其他问题中给出的答案,如下所述。]
错误发生在迭代运行的记录少于100,000之后。
我在查阅过去的相关主题后写的当前代码是:
prodcauses_query = ProdCause.query(projection=['prod_id', 'value', 'cause']).filter(ProdCause.seller_id == seller_id)
for pc in prodcauses_query.iter(read_policy=ndb.EVENTUAL_CONSISTENCY, deadline=600):
### COPY DATA IN RECORD PC INTO A MATRIX
### row is prod_id, col is cause, value is value
有没有比ITER更好的方法呢? batch_size或截止日期或read_policy的任何更好的设置?
请注意,此过程在CRON作业中运行,因此如果执行此操作需要很长时间,则不会打扰我。剩下的过程需要几秒钟,困难部分一直在阅读数据。
感谢您的任何想法!
答案 0 :(得分:1)
两个选项:
答案 1 :(得分:1)
如果您使用任务队列,我还没有说过,所以我认为您不是。
一个cron作业应该开始一个任务来进行其他处理,处理程序仍然有60秒的截止日期。将其作为任务运行将为您提供10分钟的截止日期。
考虑您的批量大小,指定大批量大小会减少往返次数。
最后,如果作业长时间运行,您可以链接任务(观察您运行的时间并开始新任务继续)或查看mapreduce作业。