Какая стратегия кэширования лучше всего подойдет для этой проблемы? - PullRequest
1 голос
/ 18 ноября 2008

Прежде всего, позвольте мне сказать, что я новичок в рельсах, работаю с ним всего пару дней.

Мое первое приложение немного отличается от традиционного: в одном из моих классов моделей у меня есть части данных, которые извлекаются из базы данных, а другая часть, полученная путем выполнения HTTP-запроса REST к внешнему ресурсу.

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

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

Как я могу реализовать это и какой компромисс будет для хранения этих кешей? Желательно ли хранить эти данные в сеансе или в отдельной структуре на сервере? Должен ли я рассмотреть одну из тех внешних структур кэширования, как GigaSpaces и т. Д ...?

Заранее благодарим за любые советы, которые вы можете предложить по этой проблеме.

1 Ответ

1 голос
/ 18 ноября 2008

Я бы порекомендовал одну из двух стратегий:

  1. Используйте memcached , демон кэширования с открытым исходным кодом. Клиентские библиотеки доступны для нескольких популярных языков и поддерживают такие вещи, как запланированная аннулирование кэшированных данных и т. Д.
  2. Включите в свою базу данных некоторые поля для хранения кэшированных данных, а также поле «cache_last_updated», которое обновляется каждый раз, когда вы сохраняете запись. Затем, при извлечении записи из базы данных, если значение этого поля более 5 минут, вы можете повторно кэшировать данные из RESTful API (вы не используете CouchDB?) И сохранить это в базе данных обновить последнюю обновленную метку времени и затем вернуть эти данные пользователю.

Я бы порекомендовал первое, потому что, честно говоря, в противном случае вы будете выполнять несколько операций чтения и записи в базу данных за один запрос, что приведет к значительным потерям производительности.

Кроме того, этот вопрос может относиться и к другим вещам, кроме Ruby on Rails - многие сценарии включают кэширование из какого-либо внешнего источника.

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