寻找想法/替代方案来提供与 GAE 数据存储查询匹配的页面/项目计数/项目导航

2024-02-14

我喜欢数据存储的简单性、可扩展性和易用性;以及新版本中发现的增强功能ndb http://code.google.com/p/appengine-ndb-experiment/图书馆很棒。

据我了解数据存储最佳实践,当与查询匹配的项目数量很大时,不应编写代码来提供匹配查询结果的项目和/或页数;因为执行此操作的唯一方法是检索所有结果,这是资源密集型的。

然而,在许多应用程序(包括我们的应用程序)中,人们普遍希望看到匹配项的计数并为用户提供导航到这些结果的特定页面的能力。由于需要解决以下限制,数据存储分页问题变得更加复杂获取(限制,偏移量=X)正如文章中概述的分页大型数据集 http://code.google.com/appengine/articles/paging.html。为了支持推荐的方法,数据必须包含一个具有唯一值的列,该列可以按照结果显示的方式进行排序。该列将为每页结果定义一个起始值;保存它后,我们可以有效地获取相应的页面,从而可以根据请求导航到特定页面或下一页。因此,如果您想显示以多种方式排序的结果,则可能需要维护多个此类列。

需要注意的是,从 SDK v1.3.1 开始,查询游标 http://code.google.com/appengine/docs/python/datastore/queries.html#Query_Cursors是执行数据存储分页的推荐方法。它们有一些限制,包括缺乏对 IN 和 != 过滤运算符的支持。目前我们的一些重要查询使用IN,但我们会尝试使用OR与查询游标一起使用。

遵循建议的指南,可以为用户提供(Next) and (Prev)导航按钮,以及导航过程中的特定页面按钮。例如,如果用户按下(Next)3次,应用程序可以显示以下按钮,记住每个按钮的唯一起始记录或光标以保持导航效率:(上一页) (第1页) (第2页) (第3页) (第4页) (下一页).

有些人建议单独跟踪计数,但当允许用户查询一组丰富的字段(这些字段会改变返回的结果)时,这种方法并不实用。

我正在寻找对这些一般问题以及具体以下问题的见解:

  1. 您在数据存储应用程序中提供哪些查询结果导航选项来解决这些限制?

  2. 如果为用户提供高效的结果计数和页面导航 整个查询结果集的优先级,应该使用数据存储 被抛弃而有利于GAE MySql 解决方案 https://developers.google.com/cloud-sql/现在正在提供。

  3. 大表架构是否有任何即将发生的变化或 数据存储实现将提供额外的功能 有效地计算查询结果?

非常感谢您的帮助。


这完全取决于您通常会得到多少结果。例如。通过向 .count() 传递一个合适的限制,如果 #items 例如,您可以提供准确的计数。

使用 NDB,最有效的方法可能是使用 fetch_page() 请求实体的第一页,然后使用生成的游标作为 count() 调用的起点;或者,您最好使用其异步设施同时运行第一页的 fetch() 和 count() 。如果您的查询不支持游标,第二个选项可能是您唯一的选择。大多数 IN / OR 查询当前不支持游标,但如果您按以下顺序排序,它们就支持游标__key__.

在UI选项方面,我认为提供下一页和上一页选项就足够了;可以向前跳几页的“Gooooooogle”用户界面很可爱,但我自己几乎从不使用它。 (要实现“上一页”,请颠倒查询的顺序并使用与当前页面相同的游标。我很确定这肯定有效。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

寻找想法/替代方案来提供与 GAE 数据存储查询匹配的页面/项目计数/项目导航 的相关文章

随机推荐