Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';t遍历大量数据存储记录_Python_Google App Engine_Google Cloud Datastore_Large Data Volumes - Fatal编程技术网

Python Can';t遍历大量数据存储记录

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条记录之后 我目前的代码是在咨询了过去的相关线程

我正在尝试迭代大量的数据存储记录,目前大约有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作业将运行第一批或多个实体,如果还有剩余,它将使用您刚才运行的查询的查询游标启动另一个任务

您没有说如果您正在使用任务队列,那么我假设您没有

cron作业应该启动一个任务来执行处理,否则处理程序仍有60秒的截止时间。将其作为任务运行将给您10分钟的最后期限

考虑您的批次大小,指定大批次大小可减少往返次数。


最后,如果作业长时间运行,您可以链接任务(观察运行了多长时间并启动新任务以继续),也可以查看mapreduce作业。

cron作业的截止日期与任务相同。尽管如此,启动任务以获得重试仍然很有用。我错过了限制增加(据我所知,这似乎只在SDK 1.4发行说明中有记录)。我一直有cron启动任务,因为任务是可重试的,而cron请求不是。许多现有问题都涉及到这一点。可能重复的