我们将数据存储在 Google Cloud Datastore 中。我们希望为我们的用户提供 API。
我们的 API 的分页规范与 github API 一样是基于 header 的。我们希望用户使用页面参数。
分页规范
e.g.
Link: <https://api.github.com/search/code?q=addClass+user%3Amozilla&page=15>; rel="next",
<https://api.github.com/search/code?q=addClass+user%3Amozilla&page=34>; rel="last",
<https://api.github.com/search/code?q=addClass+user%3Amozilla&page=1>; rel="first",
<https://api.github.com/search/code?q=addClass+user%3Amozilla&page=13>; rel="prev"
https://developer.github.com/guides/traversing-with-pagination/
API
End-Users <--- Backend Code (PHP) <--- Google Cloud Datastore
如您所知,Google Cloud Datastore 建议使用游标来提高性能和成本。但是我们不希望最终用户使用游标。最终用户是否有可能使用整数页码而不是游标,并且在后端使用游标?
我们使用 Google 的 PHP 客户端。
https://github.com/google/google-api-php-client-services
最佳答案
我相信你可以通过使用 GQL 来获得类似 OFFSET
的东西,但是这样的操作会花费你很多钱(做相当于 LIMIT 1000, 10
的操作将被视为 1,010 次读取 - 而不仅仅是你实际得到的 10 次)。
降低分页的 OFFSET
成本
假设您的页面大小为 10 个项目,并且用户要求跳转到第 5 页。您需要查询前 40 个实体,获取游标并再次运行查询,现在提供游标并限制为 10 个。
建议在第一个查询中使用 keys_only=True
获取。这样你可以:
关于google-cloud-datastore - Google Cloud 数据存储分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43310917/