我喜欢数据存储的简单性,可扩展性和易用性;并且新的ndb库中的增强功能非常棒。正在寻找创意/替代方案来提供页面/项目数量/导航与GAE数据存储查询相匹配的项目
正如我理解的数据存储最佳实践,不应该编写代码来提供匹配查询结果的项目和/或页数,当匹配查询的项目数很大时;因为唯一的方法就是检索所有资源密集型的结果。
但是,在许多应用程序(包括我们的应用程序)中,常见的愿望是查看匹配项的数量,并为用户提供导航到这些结果的特定页面的能力。如文章Paging Through Large Datasets中所述,要求解决提取(限制,偏移量= X)的要求使数据存储区分页问题更加复杂。为了支持推荐的方法,数据必须包含一个可以按照显示结果的方式排序的唯一值列。此列将为每个结果页面定义一个起始值;保存它,我们可以高效地获取相应的页面,允许根据请求导航到特定页面或下一页面。因此,如果您想要以多种方式显示排序结果,则可能需要维护多个此类列。
应该注意的是,从SDK v1.3.1开始,Query Cursors是推荐的数据存储区分页方式。它们有一些限制,包括缺少对IN和!=过滤器操作符的支持。目前,我们的一些重要查询使用IN,但我们会尝试使用或来编写它们以用于查询游标。
遵循建议的准则,一个可以给用户一个(下一页)和(后退)导航按钮,以及特定页面的按钮导航进行。例如,如果用户按下3次(下一个),该应用程序可以显示以下按钮,记住每个唯一的起始记录或光标以保持导航高效:(上一页)(第1页)(第2页)(Page-3)(Page-4)(Next)。
一些人建议分开跟踪计数,但当用户被允许在一组丰富的字段上查询时,这种方法是不实际的,这些字段会改变返回的结果。
我正在寻找一般对这些问题的见解和明确了以下问题:
你提供什么样的导航选项查询结果的数据存储区的应用程序来解决这些限制?
如果提供高效结果数量和整个查询结果集的页面导航 用户是当务之急,应使用数据存储 的赞成GAE MySql solution现在所提供的被抛弃。
大表体系结构或 数据存储实施中是否会有任何即将发生的更改,这些更改将为 提供额外的功能,以有效地计算查询结果?
非常感谢您的帮助。
假设我们使用C = query.count(N)方法向用户显示“1-20 of C”或“1-20 of many;我们如何确定一个合理的值,成本明智,对于N.在我们的使用case 100会太小,关于如何最好地调整这个大小以降低成本的建议?来自NDB的文档:“请注意,count(),虽然比fetch()快,但每次调用都会执行很多工作“。使用多少配额? Guido,感谢Python,NDB和您的帮助:) IMO页数和导航是一些应用程序的一个很好的功能,因为用户可以评估和调整与其参数相匹配的数据大小钻进之前。 – 2012-02-23 16:12:18
您可以使用以下页面计算成本:http://code.google.com/appengine/docs/billing.html#Billable_Resource_Unit_Costs。AFAIK Count()就像是一个按键查询。考虑缓存计数。(根据亲如果您的缓存数量有限,则可以使用分片计数器模式将计数存储在数据存储中。) – 2012-02-24 00:30:42
也是IN/OR查询的更新:您可以将任何查询转换为游标 - 通过在现有排序顺序末尾添加__key__排序来支持查询。例如。在NDB中:'Employee.query(Employee.name.IN(['Joe','Jane']))。order(Employee.name,Employee.key).fetch_page(N)' - 没有Employee.key命令它会引发BadArgumentError。 – 2012-02-24 00:47:27