python - 对 App Engine 数据存储均匀分布的同步查询

标签 python sql google-app-engine

当从 Google AppEngine 的数据存储区检索行时,我们希望通过多个同步进程来实现对实体类型的所有数据的检索。这些进程在后端 Python 服务器中异步运行。关键是让每个进程检索整个数据集的“ block ”,以便我们可以几乎均匀地在所有进程之间分配负载,如下所示:

    |_____|_____|_____|_____|_____|_____|_____|.....|_____|_____|
       p1   p2    p3     p4    p5    p6    p7         pk-1   pk

其中每个 pn 都是一个进程,并且会检索所有实体。

我认为实现这一点的方法是以某种方式说这样的话(在Python中):

chunk_size = num_entities / num_chunks
base_query = 'select * from entity offset %d limit %d'

for chunk in range(0, to = num_entities, step_by = chunk_size):

    cursor = get_cursor(base_query, offset = chunk, limit = chunk_size)

    while is_ready(cursor):
        do_task_with_data(cursor.next())

其中 get_cursor 将从 AppEngine 获取一个光标,该光标从给定偏移量开始的结果中滚动。我仅在此处包含 limit 参数,以防它有帮助,但例如,它也可以在 while 循环内强制执行。无论如何,我们希望得到这样一种情况:查询不是 O(n) 且有限制和偏移量的情况(即最后一个查询必须在获取数据之前滚动浏览几乎所有数据)。

另一种选择可能是根据一些随机值(我们确实有)来分配实体,使用 0 -> 1 的范围划分为 chunk_num block 。

甚至可以以某种方式从 App Engine 中获取数据转储,然后对其进行处理(尽管由于大小,这不是我们的首选)。

实现这一目标的好方法是什么?有没有更好的方法来解决这个问题?对此的任何想法将不胜感激。

最佳答案

我认为您几乎描述了 mapreduce framework 的内容。确实如此。

关于python - 对 App Engine 数据存储均匀分布的同步查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13640797/

相关文章:

python拆分空字符串

python - 改进的 IDE'ish Python 命令行包括代码完成?

sql - Oracle SQL 中的 CASE .. WHEN 表达式

sql - 如何在 T-SQL 中获取主机名?

python - 如何加载文件并创建无限保存文件?

python - 在python中 reshape 图像矩阵

sql - 为什么 TOP 或 SET ROWCOUNT 使我的查询如此缓慢?

javascript - 当涉及到 Websockets 时,我不确定要使此应用程序在 Google Cloud 上正常运行我缺少什么

python - GAE,如何在创建新模型实例时运行模型的函数?

google-app-engine - 带和不带 Protocol Buffers 的 Google Cloud Datastore