Бортовой журнал
Бортовой журнал

Оптимизация работы с базой данных с помощью Memcached

Установка и настройка расширения PHP Memcached

Что такое Memcached?

Memcached – это хранилище данных в памяти с открытым исходным кодом и возможностью масштабирования, используемое в качестве кэша или хранилища сессий и обеспечивающее время отклика на уровне долей миллисекунды.

Список поддерживаемых языков программирования: Python, Java, PHP, C/C#/C++, Perl, Go, Ruby, JavaScript, Node.js.

Список поддерживаемых протоколов: ASCII, Протокол передачи двоичных данных, TCP и UDP.

Как работает Memcached?

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

Оптимизация работы с базой данных с помощью Memcached

Предположим, нам необходимо сохранять некоторые временные данные, сохранность которых для нас не критична. Объем данных небольшой, но при этом мы вынуждены использовать большое количество запросов. Memcached-server для данной задачи подойдет как нельзя лучше. Для сравнения попробуем записать и прочесть 10000 строк в memcache и mysql:


<?php
$start = microtime(true);
$memcache_obj = memcache_connect('unix:///home/u/
user/.memcached.sock', 0);
for ($i=0;$i<10000;$i++) {
  memcache_set($memcache_obj, 'var_key'.$i, 'variable'.$i);
  memcache_get($memcache_obj, 'var_key'.$i)."\n";
}
$finish = microtime(true);
$delta_memcache = $finish - $start;

$start = microtime(true);
$link = mysqli_connect('localhost', 'user', '***','
user');

for ($i=0;$i<10000;$i++) {
  mysqli_query($link,"INSERT INTO test (var_key,variable) values ('var_key.$i','variable.$i')");
  $result = mysqli_query($link,"SELECT variable FROM test WHERE var_key = 'var_key.$i' limit 1");
  $row = mysqli_fetch_row($result);
}
$finish = microtime(true);
$delta_mysql = $finish - $start;

printf ("\n\n\tMemcached:\t %s\n\tMySQL:\t\t %s\n\n", $delta_memcache,$delta_mysql);

?>

Замеряем время записи и чтения в секундах.
Memcached: 0.36154913902283 (sec)

MySQL: 20.56244802475 (sec)

Да, для mysql можно оптимизировать запрос, использовать иные движки для хранения и т.п., но все равно, Memcached-server, как сервис хранящий данные в оперативной памяти на основе хеш-таблицы будет выигрывать по скорости у реляционных баз данных всегда.

Memcached доступен на тарифах линейки "Реактивный" и "Power".
Инструкция включения Memcached на различных
CMS доступна по ссылке: https://help.sweb.ru/entry/860/