我正在尝试在某些方面优化我的应用的性能,我想到的一件事就是预先提取'我将在以后响应用户查询时使用它们的概率很高的实体,这样它们将在memcache中以便更快地检索。
我正在考虑做这样的事情(基本上是伪代码):
def get(self):
scored_documents = index.search(user_query)
ndb_keys = get_keys_from_documents(scored_documents)
ndb_keys_url_safe = [key.urlsafe for key in ndb_keys]
taskqueue.add(queue_name='ndb_fetcher',
url='/tasks/ndb_fetcher',
params={'entity_keys':ndb_keys_url_safe})
context = {
# context data goes here
}
self.response.out.write(template.render(context))
ndb_fetcher
基本上只是在快速任务队列中进行ndb.get_multi()
调用。在生成对用户的响应之前,我不想这样做,因为实体很大并且调用可能需要~1 +秒。此外,我不需要来自ndb的数据,直到用户手动请求它为止。所以希望来自实体的许多所需数据已经存在于memcache中,因此AJAX对信息的调用会更快。
这是解决我所说的问题的合理方法吗?