ndb数据存储查询游标和索引问题

2024-09-27 00:16:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我们使用的是ndb数据存储、python、标准google应用程序引擎。我们想使用查询游标。但是为了让它按照herehere工作,看起来我们需要实现数据存储_模型.查询().订单数据存储_型号.键). 你知道吗

例如,在我们的查询中

teacher_model_query     = teacher_model.query(ndb.AND(
                ndb.GenericProperty('signinout_time') >= signinout_time_start, 
                ndb.GenericProperty('signinout_time') <= signinout_time_end))

teacher_query_forward = teacher_query.order(ndb.GenericProperty('signinout_time')).order(teacher__model.key)
teacher_query_reverse = teacher_query.order(-ndb.GenericProperty('signinout_time')).order(- 
 teacher__model.key)

不幸的是,这意味着我们必须为此创建一个新索引

- kind: teacher_model
  properties:
  - name: signinout_time
    direction: desc
  - name: __key__
    direction: desc

这就侵蚀了每个项目200个索引的限制。你能确认一下我们需要订货吗(-数据存储.model.key)查询光标是否反向工作?如何在不需要创建额外索引的情况下执行查询游标?你知道吗


Tags: 数据keynamemodelheretimeorderquery
2条回答

我改了以前的帖子,因为它完全错了。你知道吗

根据https://cloud.google.com/datastore/docs/concepts/queries#limitations_of_cursors

An exception is if the original query's final sort order was on __key__. In that case, you can use the cursor in a reverse query, which is the original query with each sort order reversed. The reverse query can modify the start cursor, end cursor, offset, and limit.

因此,似乎最后一个排序字段必须是一个键,并且需要另一个具有所有反转排序的索引。这将消耗两个综合指数。你知道吗

我能想到的一种避免这种情况的方法是在分页时将所有游标存储为堆栈。这可以在客户端完成。然后,当用户向后导航或跳转到特定的上一页时,关联的光标可用于始终向前移动。假设页面大小为25。然后在25、50、75和100处生成一个游标。然后,如果用户想要返回到50,您将选择关联的游标并生成从50到75的行,这只是向前迭代。你知道吗

只有当应用程序需要在查询结果页中向后移动时,才需要创建这样的索引。例如,如果您提供一个页面导航功能,并且您允许这样的导航到上一个页面,那么这可能是需要的。你知道吗

但是,如果您只是使用游标将处理负载拆分为更小的批,则通常不需要这样的功能—在这种情况下,您只能朝一个方向导航。你知道吗

相关问题 更多 >

    热门问题