我正在使用python 27在appengine上组合一个基本的photoalbum。我已经编写了以下方法来从匹配特定“冒险”的数据存储中检索图像细节。我正在使用限制和偏移进行分页,但效率非常低。浏览5页(每页5张照片)后,我已经使用了16%的数据存储小型操作。有趣的是,我只使用了1%的数据存储读取操作。如何使数据存储小型操作更有效 - 我不确定这些是什么。
def grab_images(adventure, the_offset=0, the_limit = 10):
logging.info("grab_images")
the_photos = None
the_photos = PhotosModel.all().filter("adventure =", adventure)
total_number_of_photos = the_photos.count()
all_photos = the_photos.fetch(limit = the_limit, offset = the_offset)
total_number_of_pages = total_number_of_photos / the_limit
all_photo_keys = []
for photo in all_photos:
all_photo_keys.append(str(photo.blob_key.key()))
return all_photo_keys, total_number_of_photos, total_number_of_pages
答案 0 :(得分:6)
一些事情:
挑剔:你不需要the_photos =无
答案 1 :(得分:1)
处理分页的方式效率很低,因为它通过偏移量之前的每个记录来传递数据。您应该考虑使用Google http://code.google.com/appengine/articles/paging.html描述的书签方法构建分页机制。
使用此方法,您只需浏览每个页面所需的项目。我还敦促你按照Shay的建议正确缓存,它既快又便宜。
答案 2 :(得分:0)
您可能需要考虑迁移到新的NDB API。它对期货,缓存和自动操作的使用可能对你有很大的帮助。显式优于隐式,但NDB对细节的管理使您的代码更简单,更易读。
BTW,您是否尝试使用appstats并查看您的请求如何使用服务器资源?