【问题标题】:ndb datastore query cursor and indexing issuesndb 数据存储区查询游标和索引问题
【发布时间】:2019-10-13 19:28:45
【问题描述】:

我们使用的是 ndb Datastore、python、标准的谷歌应用引擎。我们想使用查询光标。但是为了根据herehere 工作,看起来我们需要实现datastore_model.query().order(-datastore_model.key)。

例如在我们的查询中,我们有

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 个索引的限制。您能否确认我们需要 order(-datastore.model.key) 以使查询光标反向工作?我们如何在不需要创建额外索引的情况下执行查询游标?

【问题讨论】:

    标签: python google-app-engine google-cloud-datastore


    【解决方案1】:

    只有当您的应用需要能够在查询结果页面中向后移动时,您才需要创建此类索引。例如,如果您提供页面导航功能并允许此类导航到上一页,则可能需要这样做。

    但如果您只是使用游标将处理负载拆分为较小的批次,则通常不需要此类功能 - 在这种情况下,您只能在一个方向上导航。

    【讨论】:

    • 是的。我正在使用页面导航功能。您能否确认我需要创建一个索引来实现这一点(向后移动)?有什么建议可以在无需创建新索引的情况下实现该功能?
    • 我不认为你可以:你需要升序和降序,所以2个索引。
    【解决方案2】:

    更改我之前的帖子,因为它完全错误。

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

    一个例外是原始查询的最终排序顺序是 __钥匙__。在这种情况下,您可以在反向查询中使用游标,这是每个排序顺序颠倒的原始查询。相反 查询可以修改起始光标、结束光标、偏移量和限制。

    所以看起来最后一个排序字段必须是一个键,并且需要另一个所有排序反转的索引。这将消耗两个复合索引。

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

    【讨论】:

    • 我尝试在没有 order(datastore_model.key) 的情况下构建我的查询。当我进行反向查询时,这给了我不同的(错误的结果)。而当我使用 order(datastore_model.key) 时,我得到了可预测的正确结果。
    • 我之前的帖子有误。我已经完全更新了它。请查看并查看提供的策略是否适合您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2012-07-15
    • 2011-03-20
    相关资源
    最近更新 更多