Загрузка и управление справочными данными в Rails - PullRequest
2 голосов
/ 18 декабря 2009

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

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

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

Какой лучший способ справиться с этим?

Ответы [ 2 ]

1 голос
/ 18 декабря 2009

Это отличный вопрос, с которым большинству разработчиков Rails в какой-то момент приходилось иметь дело. Я пытался загрузить все в константу при загрузке. Я также пытался использовать Memcached или Redis с плагином, таким как cached_model или cache_fu , и автоматически заполнял кеш при загрузке приложения. Однако эти подходы работают только для поиска отдельных объектов и вообще не интегрируются с ActiveRecord (например, не работают с ассоциациями), как я уверен, вы заметили.

Существует очевидный рынок для плагина Memcached / Redis с улучшенной интеграцией ActiveRecord, но это звучит как очень сложное мероприятие, поэтому я не думаю, что мы скоро что-нибудь увидим.

Ухудшение ситуации связано с тем, что, если вы предварительно загружаете много данных, вы, вероятно, не захотите делать это при каждом запросе в среде разработки, чего трудно избежать, потому что модели ленивы. загружается (и перезагружается при каждом запросе) в разработке, и, вероятно, вам нужна модель для загрузки данных. Это означает, что хорошее решение должно быть тесно интегрировано с ActiveRecord, чтобы оно работало независимо от того, поступают ли данные из БД или из кэша (если вы не загружаете их в процессе разработки).

В любом случае, извините за многословный отказ от ответа, но я думаю, что обсуждение может быть лучшим, что мы можем сделать на данный момент.

Надеюсь, я ошибаюсь. Кто-нибудь?

0 голосов
/ 07 мая 2010

Просто используйте renum-gem для определения таких данных и has_enum-gem для интеграции рельсов.

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