PHP, MySQL БД памяти и memcached - PullRequest
       6

PHP, MySQL БД памяти и memcached

4 голосов
/ 29 августа 2009

У меня есть сайт, который работает на общем хосте без memcached. Итак, как насчет сделать БД памяти MySQL как кеш объекта, как memcached?

Ответы [ 2 ]

14 голосов
/ 29 августа 2009

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

Это мой легкомысленный ответ. Вот реальный ответ:

Memcached имеет некоторые хорошие преимущества перед механизмом хранения MEMORY.

  • Хранилище распределено по нескольким серверам. Механизм хранения MEMORY ограничен одним хостом и ограничен процессором и памятью этого хоста.
  • Быстрый доступ к отдельным записям. Механизм хранения MEMORY имеет только блокировку на уровне таблицы, поэтому страдает параллелизм.
  • Нереляционное хранилище ключей / значений. Механизм хранения MEMORY более структурирован, что не так полезно для использования типа кэша. Также MEMORY расширяет varchar до полной длины, что делает его менее эффективным хранилищем.

В качестве решения для кэширования я бы не выбрал механизм хранения MySQL MEMORY. Поскольку вы используете PHP, вы должны использовать APC или Xcache или что-то еще. У них есть функции кэширования данных, которые лучше подходят для обычного использования в PHP.

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

1 голос
/ 29 августа 2009

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

Гипотетически:

Убедитесь, что на вашем хосте включен механизм хранения памяти.

SHOW ENGINES;

Это покажет вам список и состояние всех механизмов хранения, установленных в вашем экземпляре mysql.

Memcache позволяет хранить данные любой длины. Внутренне, он проверяет ваши данные, чтобы увидеть, как долго они находятся, и помещает их в заранее выделенную область памяти, которая ближе всего к размеру элемента, который вы храните. Эту часть логики вам нужно реализовать самостоятельно. Механизм хранения памяти MySQL принимает только строки фиксированной длины. Чтобы получить аналогичный эффект в MySQL, вам нужно создать несколько таблиц в памяти с разной длиной полей символов для хранения данных. http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

Выбор таблиц с объединением всех ваших «сегментов» даст правильное значение независимо от того, в какой таблице был фактически сохранен ключ.

Одна ошибка с mysql: если вы храните данные в поле, которое длиннее поля (например, 18 символов в поле из 16 символов), mysql обрезает их без каких-либо ошибок.

Вот лучшая идея: используйте Zend_Cache с бэкэндом 'file'. Это будет хранить вещи, такие как memcache на локальном диске веб-сервера. Подключение к БД на виртуальном хостинге обычно стоит дорого. (От 1 до 2 секунд для первого подключения на моих учетных записях.) Даже медленный диск быстрее, чем этот. http://framework.zend.com/manual/en/zend.cache.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...