Что быстрее / лучше для кеширования, файловой системы или Memcached? - PullRequest
27 голосов
/ 30 июня 2010

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

Ответы [ 7 ]

29 голосов
/ 30 июня 2010

Memcached быстрее, но память ограничена. HDD огромен, но ввод / вывод медленный по сравнению с памятью. Вы должны поместить самые горячие вещи в 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

14 голосов
/ 02 июля 2010

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

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

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

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

5 голосов
/ 18 мая 2016

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

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

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

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

1 голос
/ 17 мая 2016

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

1 голос
/ 30 июня 2010

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

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

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

0 голосов
/ 05 сентября 2018

Тип кэша |Кэш Получает / сек
Кэш массива |365000
Кэш APC |98000
Файловый кэш |27000 Memcached Cache (TCP / IP) |12200
MySQL Query Cache (TCP / IP) |9900
MySQL Query Cache (Unix Socket) |13500
Выбор из таблицы (TCP / IP) |5100
Выбор из таблицы (Unix Socket) |7400

Источник:
https://surniaulula.com/os/unix/memcached-vs-disk-cache/

Источник моего источника:)
https://www.percona.com/blog/2006/08/09/cache-performance-comparison/

0 голосов
/ 07 марта 2015

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

...