对在Python App Engin上使用数据存储分页感到困惑

2024-04-24 11:03:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在构建一个Webapp2应用程序,并试图找到分页的最佳解决方案。 我发现最流行的方法是使用光标。例如:

# My solution is to get all cursors in the very first time
# For example, there will be 2 cursors for 3 pages 
# page1|c1|page2|c2|page3

page_size = 20
all = model.MyModel.gql(...)
...
if cursor:
   # Use cursor to get items
   list = all.with_curosr(...)
else:
   # Get all cursors and memcaching all cursors
   ...

我也尝试了另一个解决方案,尽管我知道很多人会认为这是一个糟糕的解决方案:

^{pr2}$

我的问题来了! 使用cursor有什么好处?在

这两个解决方案都需要执行我的模型.gql(…)以获取数据,而第一个解决方案仍然需要使用\u cursor(…)执行来检索项。 这让我很困惑。在

如果您有更好的解决方案或任何改进我的解决方案的建议,请与我分享!非常感谢你!在


Tags: to方法in应用程序getismyall
1条回答
网友
1楼 · 发布于 2024-04-24 11:03:31

使用光标和页面有很大的不同。使用游标时,最有效的方法是得到下一个游标结果:最多是O(1)或O(logn)。在

每个页面需要扫描整个页面(O)请求分页。在

因此,像使用游标迭代所有页面这样简单的操作最多只能是O(n logn),而使用页面的操作将是O(n^2)。这不仅需要更多的时间,还需要更多的数据存储读取,因为在内部,Google仍然会读取到请求页面的所有条目,然后过滤掉它们。在

因此,它还将产生更多的数据存储读取成本,并且如果您有许多请求,并且更有可能启动另一个实例,则可能会导致更多的实例小时数。在

请参阅官方文档:https://cloud.google.com/appengine/docs/python/datastore/queries#Python_Offsets_versus_cursors

相关问题 更多 >