2010-03-06 7 views
4

Я хочу хранить информацию (сеансы и много строк) в ОЗУ, и я не знаю, следует ли использовать tmpfs или сервер memcached. Кто-то сделал некоторый бенчмарк и знает, какой из них быстрее? Это необходимо для некоторых сценариев ajax, которые запрашивают информацию каждые 1-5 секунд для каждого пользователя, который входит в систему, например webchat в PHP. Поэтому PHP часто должен подключаться к memcache.PHP: tmpfs vs memcached

Преимущество использования tmpfs в том, что я могу создать много файлов и иметь structur (dirs), в то время как у меня есть только система key-value в memcached, но там я могу использовать массивы или объекты для хранения информации , Загрузка процессора также будет интересна, если есть какая-либо разница.

Спасибо.

ответ

2

Я не знаю, о скорости, но вот несколько вещей, чтобы рассмотреть о Memcached:

  • Memcached основан на архитектуре кластера типа: вы можете добавить столько физических серверов, как вы хотите установить на нем демон memcached, и у вас больше памяти в вашем кластере
    • , что означает, что количество данных, которое вы можете кэшировать, практически не ограничено, используя memcached: просто добавьте пару серверов, если вам нужно больше памяти
    • с другой стороны, с tmpfs, вы ограниченным объемом ОЗУ, доступным на каждом сервере
  • memcached - это кеширование меканизма; он не предназначен для хранения данных; что означает:
    • когда не хватает памяти осталась, чтобы сохранить новый элемент, старые элементы будут удалены из кэша
    • каждый элемент имеет срок службы; когда это истекли, элемент удаляется из кэша
  • Memcached поделен: вы можете иметь несколько PHP-серверов доступа к единому Memcached кластера
  • Есть много существующих библиотек на основе Memcached или создан, чтобы получить доступ к Memcached
    • включая некоторые сессии для PHP Механизм,
    • и несколько библиотек кэширования
  • ни Memcached, ни TMPFS сделаны для настойчивость - если вам нужны ваши данные для сохранения (т. все еще доступны даже после перезагрузки), вам нужно использовать что-то вроде базы данных.


В конце концов, не уверен TMPFS, но я бы, вероятно, использовать Memcached, по крайней мере, когда дело доходит до:

  • сеансов
  • кэширования

Почему? Потому что это:

  • зрелый - используется много, есть много библиотек, ...
  • и масштабируемой
+0

Спасибо за ваш ответ. Я использую базу данных MySQL для хранения информации о пользователе и нуждаюсь в memcached или tmpfs для (temp) хранения сообщений msgs, потому что я не хочу запускать db-запрос каждый запрос ajax;). Я не уверен, как я должен хранить это в memcache. В чате есть несколько комнат, и пользователи должны видеть только сообщения, которые они должны видеть. Я мог бы использовать несколько пар ключ-значение. Я думаю, что memcache лучше для моего проекта :). –

+0

Humph; не уверен, что непостоянный меканизм - лучший выбор в этой ситуации: если вы хотите сохранить историю разговора, например, использование БД было бы намного лучше ;;; о * «не попав в БД для каждого запроса Ajax» *, идеи чата и запроса Ajax: вы должны искать «комету»: в основном, это способ не отправлять клиентам частые запросы Ajax на сервер, но серверные обновления для клиентов * (было много вопросов о кометах в stackoverflow, возможно, некоторые могли бы помочь ;-)) *. –

+0

Я знаю комету, но не знаю, поможет ли она здесь. Скрипту все равно придется запрашивать db/memcache для новых сообщений, поскольку экземпляры php не могут связываться. Я также попытался написать собственный веб-сервер, чтобы решить эту проблему (http://stackoverflow.com/questions/2357596/http-stream-server-threads), но я недостаточно хорош в C#/C++ для этого. –

-1

На самом деле вы можете использовать memcacheDB за то, что вам нужно.

+0

класть подробности об этом.when link утерян смысл нет ваш ответ. – Sampath

+0

На самом деле это не плохая идея. memcachedb быстро вспыхивает. однако он намного медленнее памяти, также я не люблю использовать нестабильное программное обеспечение. (не уверен, что memcachedb стабилен на данный момент). палец вверх для того, как вы думаете – Nick

4

Просто пара очков

  1. TMPFS или виртуальный диск более зрелые, чем Memcached (вокруг больше, но оба являются стабильными
  2. TMPFS масштабируется (вы можете изменить размер или увеличение по мере необходимости без потери содержимого TMPFS
  3. memcahced отлично, если вам нужна память на другом компьютере, или если вам нужно разделить эту информацию между машинами.
  4. Производительность локального файла/сокета/трубы ВСЕГДА быстрее, чем сетевой сокет, и доступ к файлу в tmpfs одинаковый как любой o ther, поэтому он не требует каких-либо сторонних библиотек.

Если вы не ожидаете, что данные, данные для нашего роста, память на вашем сервере использует tmpfs.

Если вам необходимо предоставить общий доступ к данным между серверами или хотите хранить больше данных, которые вписываются в ОЗУ на вашем локальном сервере, используйте memcahed.

0

Оба ramdisk и memcached быстро вспыхивают.

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

Я лично предпочел бы Redis вместо memcached.

Вот плюсы/минусы:

  1. Memcached может удалить ключ, если нет барана. Redis и файлы никогда этого не сделают.

  2. некоторые программы, такие Joomla не установиться, если сеансы не в файлах (например, Memcached/Redis)

  3. как кэш памяти и Redis будет иметь возможность обслуживать несколько серверов PHP, так что вы не сможете использовать палки в кластере.

  4. memcached быстрее, то это redis, тогда это ramdisk, а затем memcachedb, а затем mysql, а затем сеансы файловой системы.

  5. ramdisk имитирует обычное поведение php сессий и не нуждается ни в чем, что нужно установить.

  6. , если виртуальный диск не удается установить, PHP будет Откат к файловой системе и будет по-прежнему работает (при условии загрузки сервера)

  7. если Memcached или Redis перестанет работать, то PHP дать неприятную ошибку и не запускается вообще.

Надеюсь, это поможет.

0

Запись доступа к данным сеанса должна быть атомарной или защищенной за сеансовой блокировкой, иначе она будет повреждена. Для сеансов, основанных на файлах, он разрешается путем блокировки файла, не знаю, как с ним связано memcached. Использование отдельного раздела ext4 не так уж плохо, как вы думаете - VFS будет кэш ваш файл ввода/вывода в RAM, так что вам может и не понадобиться ничего другого. Вы можете точно настроить ext4 (на раздел), чтобы кэшировать ваши записи, поэтому вы можете получить производительность и устойчивость в RAM, чем размер RAM. Например, вы получаете кэш обратной записи и окно 60 секунд (задержка фиксации) с этим:

mount /dev/sda4 -t ext4 -o rw,data=writeback,nobh,commit=60 

Он будет работать быстро, и это не будет работать вне оперативной памяти, он будет использовать все имеющиеся RAM, потому что кэш файловой системы является динамическим. Попробуйте с помощью файла 4MB несколько раз по второму файлу (перезаписывая его), вы получите очень быструю запись.

Смежные вопросы