Подтвердить что ты не робот

Что быстрее/лучше для кеширования, файловой системы или Memcached?

Я пока не думаю, что это ясно для меня, быстрее читать вещи из файла или из memcached? Почему?

4b9b3361

Ответ 1

Memcached работает быстрее, но память ограничена. Жесткий диск большой, но I/O медленнее по сравнению с памятью. Вы должны поместить самые горячие вещи в memcached, а все остальные могут перейти в кэш файлы.
(Или подняться и вложить немного денег в большую память, например эти ребята:)

В некоторых тестах см.: Сравнение производительности кэша (файл, Memcached, Query Cache, APC)

В теории:

Read 1 MB sequentially from memory       250,000 ns
Disk seek                             10,000,000 ns

http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf

Ответ 2

Существует несколько разных аспектов, которые могут быть полезными для одного или другого:

  • Вам нужно/хотите поделиться этими данными между несколькими серверами? Файловая система локальна, доступ к memcached осуществляется через сеть.
  • Насколько велики ваши кеширование? Файловая система, вероятно, будет лучше для больших объектов.
  • Сколько memcached-запросов может быть на странице? Соединения TCP и срывы могут занимать больше времени, чем простая статистика statystem() на локальной машине.

Я бы предложил вам посмотреть на ваш прецедент и сделать некоторые профилирования обоих подходов. Если вам удастся использовать файловую систему, я бы это сделал. Добавление в memcached добавляет еще один уровень сложности и потенциальных точек отказа (memcached client/server).

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

Ответ 3

"Быстрее" нельзя использовать без контекста. Например, доступ к данным в memcached на удаленном сервере может быть "медленнее" из-за латентности сети. С другой стороны, чтение данных из памяти удаленного сервера через сеть 10 Гбит может быть "быстрее", чем чтение одних и тех же данных с локального диска.

Основное различие между кешированием файловой системы и использованием memcached заключается в том, что memcached является полным решением для кеширования. Таким образом, есть списки LRU, концепция срока действия (свежесть данных), некоторые операции высокого уровня, такие как cas/inc/dec/append/prepend/replace.

Memcached легко развертывается и отслеживается (как мы можем отличить рабочую нагрузку на кеш от файловой системы, скажем, ядро? Можем ли мы вычислить общий объем кэшированных данных? Распределение данных? Планирование мощности? И так далее).

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

Ответ 4

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

Очевидно, что быстрее читать вещи в файловой системе (при условии, что это жесткий диск). Даже SDD будет заметно медленнее, чем чтение в памяти. И причина этого в том, что HDD/FileSystem построена для производительности, а не для скорости, в то время как память DDR особенно полезна по этой причине.

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

Ответ 5

Это зависит от того, хранится ли кеш локально. Memcache может хранить данные по сети, что не обязательно быстрее, чем локальный диск.

Ответ 6

На самом деле, это не так просто, как чтение из памяти намного быстрее, чем чтение с жесткого диска. Как вам известно, Memcached основан на подключении tcp, если вы подключаетесь каждый раз, когда хотите получить sth или set sth на сервер memcached (это большинство программистов), он работает хуже, чем использование кеша файлов. Вы должны использовать статический объект Memcached и повторно использовать объект. Во-вторых, современная ОС будет кэшировать файлы, которые часто используются, что делает файловые кэши более быстрыми, чем memcaches, которые являются актуальными TCP-соединениями.