Spec-Zone .ru
спецификации, руководства, описания, API

15.6.5. FAQ memcached

Вопросы

Вопросы и Ответы

16.6.5.1: memcached может быть выполнен на среде Windows?

Нет. В настоящий момент memcached доступен только на платформе Unix/Linux. Есть неофициальный доступный порт, см. http://www.codeplex.com/memcachedproviders.

16.6.5.2: Каков максимальный размер объекта, который можно хранить в memcached? Это конфигурируемо?

Размер объекта максимума значения по умолчанию составляет 1 МБ. В memcached 1.4.2 и позже, можно изменить максимальный размер объекта, используя -I параметр командной строки.

Для версий перед этим, чтобы увеличить этот размер, необходимо перекомпилировать memcached. Можно изменить значение POWER_BLOCK в пределах slabs.c файл в пределах источника.

В memcached 1.4.2 и выше, можно сконфигурировать максимальный поддерживаемый объектный размер при использовании -I параметр командной строки. Например, чтобы увеличить максимальный объектный размер до 5 МБ:

$ memcached -I 5m

Если объект больше чем максимальный объектный размер, следует вручную разделить это. memcached очень прост: Вы даете этому ключ и некоторые данные, это пытается кэшировать это в RAM. Если Вы пытаетесь сохранить больше чем размер максимума значения по умолчанию, значение является только усеченным по причинам скорости.

16.6.5.3: Это истина memcached будет намного более эффективным с чтением дб, которое интенсивные приложения чем с дб пишут интенсивным приложениям?

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

16.6.5.4: Есть ли какие-либо издержки в не использовании персистентных соединений? Если персистентный всегда рекомендуется, каковы нижние стороны (например, запираясь)?

Если Вы не используете персистентные соединения, связываясь с memcached, будет маленькое увеличение задержки открытия соединения каждый раз. Эффект сопоставим, чтобы использовать нестойкие соединения с MySQL.

Вообще, шанс блокировки или других проблем с персистентными соединениями минимален, потому что есть очень небольшая блокировка в пределах memcached. Если будет проблема, то в конечном счете Ваш запрос не будет время туда и обратно никакой результат, таким образом, Ваше приложение должно будет загрузиться от MySQL снова.

16.6.5.5: Как событие, такое как катастрофический отказ одного из memcached серверов, обработанных memcached клиентом?

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

Клиентские API все обеспечивают возможность добавить и удалить memcached экземпляры на лету. Если в пределах Вашего приложения Вы замечаете, что memcached сервер больше не отвечает, можно удалить сервер из списка серверов, и ключи будут автоматически перераспределены к другому memcached серверу в списке. Если сохранение контента кэша на всех Ваших серверах важно, удостоверьтесь, что Вы используете API, который поддерживает непротиворечивый алгоритм хеширования. Для получения дополнительной информации см. Раздел 15.6.2.4, "memcached Хеширующие/Распределения Типы" .

16.6.5.6: Какова рекомендуемая аппаратная конфигурация для memcached сервера?

у memcached есть очень низкие издержки обработки. Все, что требуется, является запасной физической емкостью RAM. memcached сервер не требует выделенной машины. Если у Вас есть сеть, приложение, или серверы баз данных, у которых есть запасная емкость RAM, то использует их с memcached.

Чтобы создать и развернуть выделенный memcached сервер, используйте относительно ЦП низкого питания, много RAM, и один или более Гигабитных интерфейсов Ethernet.

16.6.5.7: Действительно ли memcached более эффективен для видео и аудио в противоположность текстовому чтению-записям?

memcached работает одинаково хорошо на все виды данных. К memcached любое значение, которое Вы храните, является только потоком данных. Помните, тем не менее, что максимальный размер объекта, который можно хранить в memcached, составляет 1 МБ, но может быть сконфигурирован, чтобы быть больше при использовании -I опция в memcached 1.4.2 и позже, или изменяя источник в версиях прежде 1.4.2. Если Вы запланируете использование memcached с аудио и видеоконтентом, то Вы будете, вероятно, хотеть увеличить максимальный объектный размер. Также помните, что memcached является решением для того, чтобы кэшировать информацию для того, чтобы читать. Это не должно использоваться для записей, кроме тех случаев, когда, обновляя информацию в кэше.

16.6.5.8: memcached может работать с ASPX?

Есть порты и интерфейсы для многих языков и сред. ASPX полагается на базовый язык такой как C# или VisualBasic, и если Вы используете ASP.NET тогда есть C# memcached библиотека. Для получения дополнительной информации см. https://sourceforge.net/projects/memcacheddotnet/.

16.6.5.9: Как дорогой это должно установить memcache соединение? Те соединения должны быть объединены в пул?

Открытие соединение относительно недорого, потому что нет никакой безопасности, аутентификации или другого квитирования, имеющего место прежде, чем можно будет начать отправлять запросы и получать результаты. Большинство API поддерживает персистентное соединение с memcached экземпляром, чтобы уменьшить задержку. Объединение в пул соединения зависело бы от API, который Вы используете, но если бы Вы связываетесь непосредственно по TCP/IP, тогда объединение в пул соединения обеспечило бы некоторый небольшой выигрыш в производительности.

16.6.5.10: Как данные обрабатываются, когда memcached сервер снижается?

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

16.6.5.11: Как столбцы автоприращения в базе данных MySQL, скоординированной через многократные экземпляры memcached?

Они не. Нет никакого отношения между MySQL и memcached, если Ваше приложение (или, если Вы используете MySQL UDFs для memcached, Вашего определения базы данных) не создает тот.

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

16.6.5.12: Действительно ли сжатие доступно?

Да. Большинство клиентских API поддерживает своего рода сжатие, и некоторые даже позволяют Вам определять порог, в котором значение считают подходящим для сжатия во время хранения.

16.6.5.13: Мы можем реализовать различные типы memcached как различные узлы в том же самом сервере, так можем там быть детерминированы и недетерминированы в том же самом сервере?

Да. Можно выполнить многократные экземпляры memcached на единственном сервере, и в Вашей клиентской конфигурации Вы выбираете список серверов, которые Вы хотите использовать.

16.6.5.14: Каковы лучшие методы для того, чтобы протестировать реализацию, гарантировать, что она улучшает производительность, и измерять воздействие memcached изменений конфигурации? И Вы рекомендовали бы сохранить конфигурацию очень простой запустить?

Лучший способ протестировать производительность состоит в том, чтобы запустить memcached экземпляр. Во-первых, измените свое приложение так, чтобы оно хранило данные непосредственно перед тем, как данные собираются использоваться или выведенными на экран в memcached. Так как API обрабатывают сериализацию данных, это должна только быть короткая модификация к Вашему коду. Затем, измените запуск процесса, который обычно загружал бы ту информацию из MySQL с кодом, который запрашивает данные от memcached. Если данные не могут быть загружены из memcached, значения по умолчанию к процессу MySQL.

Все требуемые изменения, вероятно, составят только несколько строк кода. Чтобы извлечь лучшую пользу, удостоверьтесь Вы кэш все объекты (например, все компоненты веб-страницы, сообщения в блоге, предмета обсуждения, и так далее), вместо того, чтобы использовать memcached в качестве простого кэша отдельных строк таблиц MySQL.

Хранение конфигурации, простой в запуске, или даже за длительный срок, легко с memcached. Как только у Вас есть базовая структура и выполнение, часто единственное продолжающееся изменение должно добавить больше серверов в список серверов, используемых Вашими приложениями. Вы не должны управлять memcached серверами, и нет никакой сложной конфигурации; только добавьте больше серверов к списку и позвольте клиентскому API, и memcached серверы принимают решения.