Сохранение словаря между запросами Rails - PullRequest
2 голосов
/ 27 марта 2012

Приложение My Rails 3 решает вариант настольной игры 'Boggle'.Каждый запрос включает в себя тысячи поисков по словарю.Какой лучший способ сохранить большой объект словаря между запросами?

Мой словарь реализован в Trie, который прекрасно работает.Проблема в том, что сборка Trie занимает около 30 секунд (большой словарь).Как я могу сохранить один словарь между запросами?Словарь - это просто обычный объект Ruby, а не ActiveRecord.

Я бы хотел сохранить словарь в приложении Rails в этом случае, хотя я подозреваю, что стандартный подход - делегировать поиск в словаре другому процессу (это так?).

Спасибо.

Ответы [ 3 ]

1 голос
/ 30 марта 2012

Совершенно разумно иметь в качестве модели Rails обычный старый объект или класс ruby.

Если ваш словарь реализован с помощью методов класса, это становится очень просто. Переместите его в app / models, и Rails автоматически загрузит класс и сделает его доступным для ваших контроллеров. Добавьте инициализатор в config / initializers, и вы можете убедиться, что словарь загружается при запуске приложения Rails.

Если ваш словарь на самом деле является экземпляром класса Dictionary, это не так полезно. Вам, вероятно, лучше всего инициализировать его как глобальную константу. Да, я знаю, что мы все обучены, чтобы вздрогнуть от идеи глобалов в эти дни; но дело в том, что один (предположительно неизменный) словарь приложения действительно должен быть загружен в память и доступен глобально. Просто убедитесь, что вы назвали его (и, возможно, пространство имен) так, чтобы избежать путаницы или конфликтов.

0 голосов
/ 27 марта 2012

Обычно, чтобы создать иллюзию постоянства между запросами, используются куки, но если данные большие, не стоит помещать весь объект в куки. Было бы лучше сохранить словарь в БД, сохранить идентификатор в сеансе и извлекать / обновлять этот объект при каждом запросе.

0 голосов
/ 27 марта 2012

Разве вы не можете хранить его в какой-либо БД - в БД в памяти, такой как redis, memcached и т. Д. ... или в постоянной БД?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...