【发布时间】:2016-04-06 12:36:34
【问题描述】:
我想从 Google 数据存储区加载大量数据。
所以,第 1 步:我运行查询(使用 keysOnly=true)并遍历游标,这样每个游标都指向包含 600 个对象的页面的开头。我将游标存储在局部变量中。
第 2 步:我为每个游标分离一个线程,在每个线程中加载和处理 600 个对象。
这不是使用游标的常用方式。
但是,我觉得它是正确的。步骤 1 和步骤 2 中的实际查询字符串是相同的。这类似于通常的无状态 Web 用例,其中用户可能会请求 Next、Back,然后重新加载前一页;游标不需要直接来自前一个游标查询的结果。
我不想按顺序遍历游标,然后分离线程以并行处理在给定游标查询中加载的对象,因为我想并行化来自数据库的实际 IO 密集型查询。
我的结果有些不一致,似乎涉及丢失页面和重复加载对象。这是多线程从 Google 数据存储区加载大量数据的正确方法吗?如果不是,那是什么?
【问题讨论】:
-
你解决了吗?我有一个类似的问题。
-
LocationsCloudToHub 一种方法是按顺序从 Darattiore 加载每个实体,然后在新线程中为每个实体分拆初始化过程,或者使用队列。见@Andrei Volgin 回答
标签: multithreading google-app-engine google-cloud-datastore cursors