Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.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_Datastore - Fatal编程技术网

Python 有没有办法缓存提取输出?

Python 有没有办法缓存提取输出?,python,google-app-engine,datastore,Python,Google App Engine,Datastore,我正在一个在云中运行的封闭系统上工作 我需要的是一个搜索函数,它使用在regexp中键入的用户来过滤数据集中的行 phrase = re.compile(request.get("query")) data = Entry.all().fetch(50000) #this takes around 10s when there are 6000 records result = x for x in data if phrase.search(x.title) 现在,数据库本身不会有太多变化

我正在一个在云中运行的封闭系统上工作

我需要的是一个搜索函数,它使用在regexp中键入的用户来过滤数据集中的行

phrase = re.compile(request.get("query"))
data = Entry.all().fetch(50000)  #this takes around 10s when there are 6000 records
result = x for x in data if phrase.search(x.title)
现在,数据库本身不会有太多变化,每天的搜索不会超过200-300次

有没有办法缓存所有条目(我预计不会超过50000个条目,每个条目都不会超过500字节),这样检索它们就不会花费超过10秒的时间?或者将其并行化?我不介意10秒,但我介意用户等待10秒


要解决诸如“为它编制索引并使用.filter()”-查询是一个regexp,我不知道是否有任何索引机制允许使用regexp。

由于条目数量有限,您可以对所有条目进行memcache,然后在内存中按您概述的方式进行筛选。但是,请注意,每个memcache项不能超过1mb。但您可以并行获取多达32mb的memcache条目

因此,将条目拆分为子集,memcache这些子集,然后通过预计算memcache键并行读取它们

详情如下:

您还可以使用or(无耻插头)将数据存储在app engine的本地实例上,这样您就可以更快地访问所有实体,而不受memcache边界或数据存储延迟的限制


提示:如果本地实例的内存超过185MB,就会被杀死,因此如果您知道自己在做什么,就可以在其中存储相当多的数据

由于您的数据大约为20MB,您可以将其完全加载到本地实例内存中,这将是您所能获得的最快速度。或者,您可以将其存储为应用程序旁边的数据文件,读取速度比访问数据存储快。

如何将内容加载到本地实例内存中?@Merlin只需将其作为全局变量(或类变量)存储在模块中即可。