Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “预取”实体_Python_Google App Engine_Google Cloud Datastore - Fatal编程技术网

Python “预取”实体

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

我正在尝试优化我的应用程序在某些方面的性能,我考虑的一件事是“预取”实体,在这种情况下,我很有可能在稍后响应用户的查询时使用它们,以便它们在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_取数器基本上只需在快速任务队列中执行ndb.get_多重调用。在生成对用户的响应之前,我不想这样做,因为实体很大,调用可能需要1秒以上的时间。此外,在用户手动请求之前,我不需要ndb中的数据。因此,希望来自实体的大量所需数据已经在memcache中,这样AJAX调用信息的速度会更快


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

我在试着理解你说的话。。。。您想预取数据,但仅在用户调用数据之后?您似乎对ndb所做的操作是正确的,并且会将所有内容都放在memcache中。但是要预取。。。我真的不知道pre-fetch可能是一个不好的术语-我不知道还能说什么。那你是什么意思?我想了解你在做什么,但我有点不明白你的要求。如果您需要在经常运行的查询中更快地运行此查询,也许可以在应用程序开始时运行几个ndb查询,以便将数据放入memcache中?转到AJAX怎么样?那么您将把页面呈现给客户端,然后在客户端通过JS请求数据,然后在数据到达时用数据填充页面?或者,如果用户必须表明他们想看到它,如果它已经到达该点,就让它可见?