“预取”实体

时间:2014-08-07 14:39:48

标签: python google-app-engine google-cloud-datastore

我正在尝试在某些方面优化我的应用的性能,我想到的一件事就是预先提取'我将在以后响应用户查询时使用它们的概率很高的实体,这样它们将在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对信息的调用会更快。

这是解决我所说的问题的合理方法吗?

0 个答案:

没有答案