PHP Shared Memory vs Memcached ?

программирование php базы данных memcached Shared Memory

Вопрос для продвинутой части PHP-сообщества.

В последнее время стало популярно использовать memcached для хранения межсеансовых и межтредовых данных. Однако, почему-то использование встроенного в PHP механизма PHP Shared Memory не настолько популярно. Почему логичнее гонять данные по сети до и от memcached-сервера (это именно по сети соединение!), чем использовать встроенный с PHP4 механизм, позволяющий выделять блоки памяти в ОЗУ, которые не теряются при завершении скрипта и кроме того доступны остальным процессам ?



Примечание:
2 Andrey
а если брать в масштабах одного сервера ?
Ответы:
Потому, что не обязательно система будет состоять из одного сервера. Если у вас будет хотя-бы два сервера по которым распределена нагрузка, вы замучаетесь разделать между ними Shared memory.
Вероятно потому, что shared memory сам по себе предоставляет доступ для чтения/записи/удаления данных в блоках памяти, но не более.
Если рассматривать в пределах одного сервера, то как правило memcached более простое решение (поставил - конфиги в порядок привел и все работает), в то время как на shared memory вам не только получение данных и запись надо вызывать, но и самостоятельно отслеживать все изменения, очищать устаревшие элементы по таймауту или при достижении некого объема занятой памяти, который нельзя превышеть из каких-либо соображений. В memcached все это за вас уже сделали. Цена упрощения разработки - некоторый overhead на передачу данных через сетевые интерфейсы/лупбэки.
Во-первых, никакого встроенного механизма нет, это интерфейс к системному сервису и в этом плане shmop от memcache модуля ничем не отличается. Во-вторых, на практике подключить memcache оказывается проще. Мемкеш можно подключить, скопировав модуль в ext/ и прописав одну строчку в инишнике, а для Shared memory "To use shmop you will need to compile PHP with the --enable-shmop parameter in your configure line." В стандартных бинарных модулях с сайта это выключено, и далеко не все хотят и могут перекомпилировать PHP, только чтобы гонять кеш через системный сервис, а не TCP стек.
Выше всё уже сказано правильно. ролностью подерживаю, хочу лишь добавить что для одного сервера вполне можно использовать Unix socket для обмена данными, тем самым не нагружая стек и упрощая механизм обмена и как следствие нагрузку.


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

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

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.