Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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
Java “实施建议”;“反向文件频率”;在GAE上?_Java_Google App Engine_Tf Idf - Fatal编程技术网

Java “实施建议”;“反向文件频率”;在GAE上?

Java “实施建议”;“反向文件频率”;在GAE上?,java,google-app-engine,tf-idf,Java,Google App Engine,Tf Idf,我需要在谷歌应用程序引擎中实现“反向文档频率”。我在寻找提高效率的建议。现在我把基本的程序当作 解析网页时,我会将每一对都保存到数据存储中,比如 for(String phrase : phrase_collection){ dataStore.put(phrase, domain); } for(String phrase : phrase_collection){ long count = dataStore.get(phrase).size(); } 稍后在计算IDF时,我从数

我需要在谷歌应用程序引擎中实现“反向文档频率”。我在寻找提高效率的建议。现在我把基本的程序当作

解析网页时,我会将每一对都保存到数据存储中,比如

for(String phrase : phrase_collection){
  dataStore.put(phrase, domain);
}
for(String phrase : phrase_collection){
  long count = dataStore.get(phrase).size();
}
稍后在计算IDF时,我从数据存储中获取短语的匹配项,如

for(String phrase : phrase_collection){
  dataStore.put(phrase, domain);
}
for(String phrase : phrase_collection){
  long count = dataStore.get(phrase).size();
}
但是,速度并不令人满意,通常会导致30秒超时。在这种情况下,我还有其他挑战

-多语言输入(网页)。因此,这些短语也使用不同的语言,这使得很难进行缓存

-解析网页和排名短语也需要很多时间。整个过程就像字符集检测->语言检测->按不同语言解析->排名

在GAE中启用“始终打开”


我期待任何建议!提前谢谢

您有两个选择:

您可以使用新引入的后端来启动和运行。这样,您就不必处理超时,也不必担心并行任务

您可以使用任务队列。(作为后端的替代)但这取决于您并行化任务的能力


在任何情况下,都应该开始使用memcache。(如果使用JDO,只需启用它即可)。您还可以考虑切换到“更原生”的持久层,如ObjyFy或Tigg,它支持Ayn Access和/或MyCaskFox。

< p>您正在为每个短语做一个单独的获取(和放置)。这自然会非常慢,因为您要对数据存储进行大量的往返。相反,您应该使用和的变体,它们接受实体或键的iterable,并在单个事务中执行它们


您还应该“离线”完成这项工作——正如Stefan所建议的,使用后端或任务队列。任务队列可能更适合这里。

谢谢!我将首先尝试后端。批处理get/put是一个基本概念,但要组合查询条件很难。此外,我不能离线完成这项工作,因为我需要将短语P(来自同一文档)与文档进行实时排序。我正在尝试缓存和异步数据存储,感觉好多了。@Shuai我不确定我是否理解你的评论。查询条件不适用于批获取或批放置,您确实需要在此处执行批操作-这应该也很容易。我的意思是1)很难从数据存储中检索所有短语并存储在memcache中,尤其是在所有语言中,存储都在快速增长。2) 然后,对于每个文档,我必须检索其中出现的短语,而不是全部。在这种情况下,如何进行批处理?@Shuai Memcache具有批处理操作,与数据存储相同。要获取文档中出现的短语的记录,只需累积一个关键对象列表,每个短语一个,然后执行单个
数据存储。获取列表中的
。它将返回一个对象列表。