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