2015-10-28 3 views
0

Скажите, что у меня есть таблица из 100 000 городов (id, city), и мое приложение выложено таким образом, что мне требуется сопоставление городов id-> city для многих поисков. Запуск записи SQL для каждого такого перевода запрещен. Скажем, страница результатов поиска отображает 1000 записей, я не хочу добавлять 1000 SQL-запросов поверх существующего запроса.Лучший способ иметь постоянный хэш в памяти в рельсах?

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

Есть ли разделяемая область памяти, в которой я могу засунуть эту хэш-таблицу при запуске рельсов/пассажиров, а затем все входящие запросы могут найти этот постоянный хэш оттуда.

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

Что такое рельсы способ создания общей постоянной памяти, которую могут использовать все запросы?

+1

Любой сервер кеша с достаточным пространством для хранения. Если не Redis, есть memcached. В любом случае вам понадобится какое-то кэширование. –

+0

Рельсы не являются местом для кэширования этой информации. Сделайте это с помощью отдельного сервера, предназначенного для этого. Избегайте зависимостей, когда эти вещи предназначены для того, чтобы делать то, что вам нужно, не является хорошим использованием вашего времени или ваших ресурсов. Выбирайте и выбирайте разумно, вместо того, чтобы произвольно избегать чего-то просто, потому что это «не было изобретено здесь», а это то, что вы делаете. –

+0

The Tin Man - Я не согласен с этим утверждением. Я думаю, вы хотели бы рассмотреть вопрос о том, является ли добавление внешней зависимости (и необходимых операционных издержек) хорошим использованием вашего времени или нет. Если это тривиальный набор данных относительно его доступной памяти, то использование в хранилище памяти будет соответствовать его потребностям. –

ответ

0

Похоже, вам нужно кэшировать, вы просто пытаетесь избежать внешнего сервера. Я использовал встроенное хранилище кэшей хранилища Rails для больших вычислений, которые глобально допустимы, но я не хочу делать обратный переход во внешний кеш.

Используйте и адаптируйте этот параметр в своей среде. config.cache_store = :memory_store, { size: 64.megabytes }

И, конечно же, у Rails Caching Guide есть все подробности.

+1

2.5 ActiveSupport :: Cache :: MemCacheStore В этом хранилище кэшей используется сервер memcached от Danga для предоставления централизованного кеша для вашего приложения. По умолчанию Rails использует связанный dalli gem. В настоящее время это самый популярный кэш-магазин для производственных сайтов. Это здорово, я думаю, что смогу делать то, что хочу, с рельсами в встроенном хранилище памяти. спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^