Оптимизация работы с базой данных с помощью 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/