Полнотекстовый поиск в Google App Engine (Java)

По этой теме витает несколько потоков, но я думаю мой вариант использования несколько отличается.

Что я хочу сделать:

  • Компонент полнотекстового поиска для моего приложения GAE / J
  • Размер индекса невелик: 25-50 МБ или около того
  • Мне не нужны обновления индекса в реальном времени, a периодическое повторное индексирование - это нормально
  • Это для автозаполнения и т.п., поэтому оно должно быть очень быстрым (у меня такое впечатление, что реализация инвертированного индекса в Datastore приводит к значительной задержке)

Моя стратегия на данный момент ( только планирую, пока ничего не реализовал):

  • Используйте Lucene с RAMDirectory
  • Периодическое задание cron создает индекс, сериализует его в хранилище данных, сохраняет идентификатор обновления (или временную метку)
  • Загрузка сервлета поиска индекс при запуске и создает RAMDirectory
  • При каждом запросе сервлет проверяет текущий идентификатор обновления и при необходимости перезагружает индекс

Главное, о чем я не уверен, - как синхронизировать данные в памяти между экземплярами - будет эта работа, или я что-то упускаю?

Кроме того, как далеко я могу продвинуться, прежде чем у меня возникнут проблемы с использованием памяти? Я не смог найти ничего о квотах RAM для GAE. (Этот индекс невелик, но я могу придумать еще кое-что, что я хотел бы добавить)

И, конечно, есть какие-нибудь мысли о лучших подходах?

7
задан Dmitri 11 December 2010 в 02:10
поделиться