我正在使用GAE来运行一个宠物项目。
我有一个大表(100K行),我正在运行索引查询。这看起来很好。但是,迭代结果似乎需要非线性时间。做一些分析,似乎对于第一批行(100左右)它是线性的,但然后从悬崖上掉下来并开始花费越来越多的时间来检索到达行。这是代码草图:
q = Metrics.all()
q.filter('Tag =', 'All')
q.order('-created')
iterator = q.run(limit = 100)
l = []
for i in iterator:
l.append[i.created]
知道什么可能导致这种行为非线性吗?
答案 0 :(得分:1)
最有可能的原因是你没有使用Query Cursors,而是使用它们,你会看到你的表现得到改善。
此外看起来您正在使用旧数据库,请考虑切换到NDB,因为最新的实现假设更好更快。
答案 1 :(得分:0)
如果您知道要处理的确切数字,请考虑使用fetch。 run会以较小的块(默认批量大小为20)获取结果,然后会有额外的往返操作。
OOT:可能很好重命名列表变量,它与python list函数同名:)