Сильно ли снижается производительность при использовании file_store для хранения кеша, а не mem_cache_store?

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

Достаточно ли использовать file_store в качестве параметра config.cache_store? Или необходимость доступа к файлам для данных снова и снова убьет преимущество кэширования в первую очередь с точки зрения нагрузки на сервер?

Или, может быть, я не совсем понимаю разницу между file_store и mem_cache_store...


person Shpigford    schedule 21.11.2009    source источник


Ответы (2)


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

Затем используйте существующую базу данных для хранения кэшированных элементов. (Вы используете базу данных, верно?)

memcached — это всего лишь быстрая, но тупая база данных. Если вам не нужна «быстрая» часть (*), то не добавляйте дополнительную сложность, несогласованность и накладные расходы, связанные с наличием отдельного уровня кэша.

memcache с file_store — это тупая, но даже не быстрая база данных, и поэтому она мало кому полезна, кроме совместимости/тестирования.

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

person bobince    schedule 21.11.2009
comment
Где вы говорите хранить кешированные элементы? Просто использовать опцию Rails file_store для кэширования? - person Shpigford; 22.11.2009
comment
Таблица в базе данных — MySQL, PostgreSQL, SQL Server, что бы вы ни использовали. (В настоящее время вы не помещаете данные своего приложения в файловую систему, не так ли? Если да, то это серьезная проблема с производительностью, которую вы захотите исправить, переместив ее в правильную базу данных, прежде чем думать о кэшировании.) - person bobince; 22.11.2009
comment
Я использую MySQL. Итак, вы говорите, что с точки зрения производительности хранение кэшированных данных в таблице в моей базе данных лучше, чем хранение кэшированных данных в файловой системе (например, в tmp/cache). - person Shpigford; 22.11.2009

File_store будет кэшировать данные в файлах в файловой системе.

Если эта файловая система является ЛОКАЛЬНОЙ для вашего веб-сервера, то, очевидно, она будет иметь отношение только к этому конкретному веб-серверу, поэтому вы потеряете скорость попадания в кеш, когда кешированный объект существует на одном сервере, но не на другом.

Сколько у вас веб-серверов? 2? 10? 100?

File_store для кэширования не масштабируется должным образом и снизит частоту обращений по сравнению с общим хранилищем (например, хранилищем memcached).

Цель использования memcached заключается в том, чтобы пул веб-серверов мог получить доступ к одному кешу (даже если он может быть разделен на несколько физических серверов). Использование file_store не будет (если только это не сетевая файловая система, а это почти наверняка будет чревато своими проблемами).

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

person MarkR    schedule 21.11.2009
comment
Прямо сейчас у меня есть только один веб-сервер, и, вероятно, мне нужно масштабировать его до нового сервера в любое время в следующем году ... поэтому я думаю, что файловая система может быть моим лучшим выбором, чтобы что-то работало быстрее, пока я не получу отдельная настройка сервера memcache. - person Shpigford; 22.11.2009
comment
Файловый кеш по-прежнему будет РАБОТАТЬ в многосерверной настройке, но он будет получать все более низкую частоту попаданий, чем больше серверов у вас есть, пока он не станет бесполезным; точно, когда это будет, я не могу предсказать. - person MarkR; 22.11.2009