Есть несколько тем по этой теме, но я думаю, что мой вариант использования несколько отличается.
Что я хочу сделать:
- Компонент полнотекстового поиска для моего приложения GAE / J
- Размер индекса невелик: 25-50 МБ или около того
- Мне не нужны живые обновления индекса, периодическая повторная индексация - это хорошо
- Это для автозаполнения и тому подобного, поэтому оно должно быть очень быстрым (у меня сложилось впечатление, что реализация инвертированного индекса в хранилище данных приводит к значительной задержке)
Моя стратегия до сих пор (просто планирую, еще ничего не пыталась реализовать):
- Использовать Lucene с RAMDirectory
- Периодическое задание cron создает индекс, сериализует его в хранилище данных, сохраняет идентификатор обновления (или метку времени)
- Сервлет поиска загружает индекс при запуске и создает RAMDirectory
- При каждом запросе сервлет проверяет текущий идентификатор обновления и при необходимости перезагружает индекс
Главное, на чем я не уверен, как синхронизировать данные в памяти между экземплярами - сработает ли это, или я что-то упустил?
Кроме того, как далеко я могу нажать его, прежде чем у меня начнутся проблемы с использованием памяти? Я не мог найти что-нибудь о квотах RAM для GAE. (Этот индекс небольшой, но я могу придумать еще кое-что, что хотел бы добавить)
И, конечно, есть мысли о лучших подходах?