Python Can';t遍历大量数据存储记录
我正在尝试迭代大量的数据存储记录,目前大约有330000条。从概念上讲,每个记录都有一行、一列和一个值,我对这些记录进行迭代并构造一个矩阵,然后将其用于计算 我得到的错误是:超时:数据存储操作超时,或者数据暂时不可用 [补充:请注意,我的问题不是应用程序引擎超时。作为CRON作业运行,我有足够的时间,数据存储错误发生的速度比应用程序引擎超时的速度更快。此外,我还尝试了其他问题中给出的答案,正如我在下面提到的。] 该错误发生在迭代运行少于100000条记录之后 我目前的代码是在咨询了过去的相关线程后编写的,它是:Python Can';t遍历大量数据存储记录,python,google-app-engine,google-cloud-datastore,large-data-volumes,Python,Google App Engine,Google Cloud Datastore,Large Data Volumes,我正在尝试迭代大量的数据存储记录,目前大约有330000条。从概念上讲,每个记录都有一行、一列和一个值,我对这些记录进行迭代并构造一个矩阵,然后将其用于计算 我得到的错误是:超时:数据存储操作超时,或者数据暂时不可用 [补充:请注意,我的问题不是应用程序引擎超时。作为CRON作业运行,我有足够的时间,数据存储错误发生的速度比应用程序引擎超时的速度更快。此外,我还尝试了其他问题中给出的答案,正如我在下面提到的。] 该错误发生在迭代运行少于100000条记录之后 我目前的代码是在咨询了过去的相关线程
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更好的方法吗?批量大小、截止日期或读取策略是否有更好的设置
请注意,此进程是在CRON作业中运行的,因此,如果需要很长时间来执行此操作,我不会感到困扰。剩下的过程需要几秒钟,硬部分已经在读取数据
谢谢你的任何想法 有两种选择:
- 使用MapReduce library for App Engine运行所有实体。在MapReduce的地图部分,在每个实体上做你想做的神奇的事情。教程可在此处找到:
- 或者,使用游标和具有有限查询大小的任务。也就是说,您的cron作业将运行第一批或多个实体,如果还有剩余,它将使用您刚才运行的查询的查询游标启动另一个任务
考虑您的批次大小,指定大批次大小可减少往返次数。
最后,如果作业长时间运行,您可以链接任务(观察运行了多长时间并启动新任务以继续),也可以查看mapreduce作业。cron作业的截止日期与任务相同。尽管如此,启动任务以获得重试仍然很有用。我错过了限制增加(据我所知,这似乎只在SDK 1.4发行说明中有记录)。我一直有cron启动任务,因为任务是可重试的,而cron请求不是。许多现有问题都涉及到这一点。可能重复的