我喜欢数据存储的简单性、可扩展性和易用性;并且在新的ndb库中发现的增强功能非常棒。
据我了解数据存储最佳实践,当匹配查询的项目数量很大时,不应编写代码来提供匹配查询结果的项目和/或页数;因为这样做的唯一方法是检索资源密集型的所有结果。
但是,在包括我们在内的许多应用程序中,通常希望查看匹配项的计数并为用户提供导航到这些结果的特定页面的能力。数据存储分页问题因需要解决fetch(limit, offset=X)的限制而变得更加复杂,如通过大数据集分页一文中所述. 为了支持推荐的方法,数据必须包含一个唯一值列,该列可以按照结果显示的方式进行排序。此列将为每页结果定义一个起始值;保存它,我们可以有效地获取相应的页面,允许根据请求导航到特定页面或下一页。因此,如果要显示以多种方式排序的结果,可能需要维护几个这样的列。
需要注意的是,从 SDK v1.3.1 开始,查询游标是推荐的数据存储分页方式。它们有一些限制,包括不支持 IN 和 != 过滤器运算符。目前我们的一些重要查询使用IN,但我们将尝试使用OR编写它们以用于查询游标。
遵循建议的指南,可以为用户提供(下一个)和(上一个)导航按钮,以及导航进行时的特定页面按钮。例如,如果用户按(Next) 3 次,应用程序可以显示以下按钮,记住每个按钮的唯一起始记录或光标以保持导航效率:(Prev) (Page-1) (Page-2) (Page -3)(第 4 页)(下一个)。
一些人建议单独跟踪计数,但是当允许用户查询一组丰富的字段以改变返回的结果时,这种方法是不切实际的。
我正在寻找有关这些问题的一般见解,特别是以下问题:
您在数据存储应用程序中提供哪些查询结果导航选项来解决这些限制?
如果为用户提供有效的结果计数和整个查询结果集的页面导航是一个优先事项,那么应该放弃使用数据存储,转而支持现在提供的GAE MySql 解决方案。
大表架构或数据存储实现中是否有任何即将发生的变化,这些变化将为有效计算查询结果提供额外的功能?
非常感谢您的帮助。