Предложения по внедрению «обратной частоты документов» на GAE? - PullRequest
0 голосов
/ 01 июня 2011

Мне нужно реализовать «частоту обратных документов» в движке приложений 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 -> parse по разным языкам -> ранжирование.

Всегда включен в GAE.

Я с нетерпением жду любых предложений!Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 02 июня 2011

Вы делаете индивидуальные get (и put) для каждой фразы.Естественно, это будет очень медленно, так как вы совершаете множество обращений к хранилищу данных.Вместо этого вам следует использовать варианты put и get , которые принимают итерируемые объекты или ключи, и выполнять их все в одной транзакции.

Вам также следуетвыполнять эту работу «в автономном режиме» - как предполагает Стефан, используя бэкенды или очереди задач.Очереди задач, скорее всего, будут лучше соответствовать здесь.

0 голосов
/ 01 июня 2011

У вас есть несколько вариантов:

Вы можете использовать недавно введенные бэкэнды, чтобы все заработало. Таким образом, вам не нужно иметь дело с таймаутом и не нужно беспокоиться о параллельных задачах.

Вы можете использовать очередь задач. (В качестве альтернативы бэкэнду.) Но это зависит от вашей способности парализовать свои задачи.

И в любом случае вы должны начать использовать memcache. (Если вы используете JDO, вы можете просто включить его , например ). Вы также можете рассмотреть возможность перехода на «более родной» уровень персистентности, такой как objectify или twig, который поддерживает асинхронный доступ и / или memcache из коробки.

...