используйте сервер MySQL в качестве "кэша"


Я знаю, что это странный вопрос, но у меня есть 2 сервера, один vps, а другой - хост mysql. Теперь моя проблема в том, что я хочу попытаться снизить нагрузку на vps, так как это стартовый 128 Мб vps.

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

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

Спасибо!

Author: user115422, 2012-11-17

1 answers

Если вы размещаете веб-сайт на VPS, который использует MySQL в качестве базы данных, типичный запрос выглядит следующим образом:

  • клиент отправляет запрос на веб-сервер, работающий на вашем VPS
  • ваш скрипт, запущенный на веб-сервере, выполняет запрос к базе данных
  • база данных возвращает результаты запроса
  • ваш скрипт форматирует и печатает результаты
  • результаты отображаются в браузере (клиенте)

Нет способа отправить запрос в базу данных не проходя сначала через веб-сервер.

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

Вот простой пример кэширования результата запроса SELECT:

$cache = new Memcached();
$cache->addServer('localhost', 11211);

$article_key = "article[$article_id]";
$article = $cache->get($article_key);

if ($article === FALSE) {
    $statement = $conn->prepare("SELECT * FROM articles WHERE id = :id");
    $statement->exec(array('id' => $article_id));
    $result = $statement->fetchAll(PDO::FETCH_ASSOC);
    if (count($result) === 0) {
        // return a 404 status
    }
    $article = $result[0]; 
    $cache->set($article_key, $article);
}

// display the article
 2
Author: Botond Balázs, 2012-11-17 03:30:23