在GAE上实施“逆文档频率”的建议?

时间:2011-06-01 12:24:19

标签: java google-app-engine tf-idf

我需要在Google应用引擎中实现“逆文档频率”。我正在寻找提高效率的建议。现在我把基本例程作为,

在解析网页时,我将每对保存到数据存储区,例如

for(String phrase : phrase_collection){
  dataStore.put(phrase, domain);
}

稍后计算IDF时,我会从数据存储中获取短语的出现,例如,

for(String phrase : phrase_collection){
  long count = dataStore.get(phrase).size();
}

然而速度并不令人满意,并且经常导致30秒超时。在这种情况下,我还有其他挑战,

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

- 解析网页和排名短语也需要很长时间。整个过程就像charset_detect - > language_detect - >根据不同的语言解析 - >排名。

在GAE中始终启用。

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

2 个答案:

答案 0 :(得分:1)

你正在为每个短语做个人获取(和放置)。这自然会非常缓慢,因为您正在对数据存储区进行大量的往返。相反,您应该使用接受可迭代实体或键的putget变体,并在单个事务中执行它们。

你也应该“脱机”完成这项工作 - 正如Stefan建议的那样,使用后端或任务队列。任务队列可能是更好的匹配。

答案 1 :(得分:0)

您有几个选择:

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

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

无论如何,你应该开始使用memcache。 (如果您使用JDO,您只需启用它like so)。您还可以考虑切换到“更原生”的持久层,如objectify或twig,它支持asyn访问和/或开箱即用的内存缓存。