Python “预取”实体
我正在尝试优化我的应用程序在某些方面的性能,我考虑的一件事是“预取”实体,在这种情况下,我很有可能在稍后响应用户的查询时使用它们,以便它们在memcache中进行更快的检索 我在考虑做一些类似伪代码的事情,基本上:Python “预取”实体,python,google-app-engine,google-cloud-datastore,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
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_取数器基本上只需在快速任务队列中执行ndb.get_多重调用。在生成对用户的响应之前,我不想这样做,因为实体很大,调用可能需要1秒以上的时间。此外,在用户手动请求之前,我不需要ndb中的数据。因此,希望来自实体的大量所需数据已经在memcache中,这样AJAX调用信息的速度会更快
这是解决我所说问题的合理方法吗 我在试着理解你说的话。。。。您想预取数据,但仅在用户调用数据之后?您似乎对ndb所做的操作是正确的,并且会将所有内容都放在memcache中。但是要预取。。。我真的不知道pre-fetch可能是一个不好的术语-我不知道还能说什么。那你是什么意思?我想了解你在做什么,但我有点不明白你的要求。如果您需要在经常运行的查询中更快地运行此查询,也许可以在应用程序开始时运行几个ndb查询,以便将数据放入memcache中?转到AJAX怎么样?那么您将把页面呈现给客户端,然后在客户端通过JS请求数据,然后在数据到达时用数据填充页面?或者,如果用户必须表明他们想看到它,如果它已经到达该点,就让它可见?