Производительность Redis\mySQL (ШОК :) )

Lifeline

Новичок
Вдохновленный возможностями Redis решил я использовать его, как классическое key-value хранилище.

Для сравнения взял практически базовый таск как казалось бы для такой задачи. Заюзал Rediska_Key_Hash

Создал начальную базу

for ($i =0; $i < 50000; $i++) {
$user = new Rediska_Key_Hash('user_' . $i);
$user['hits'] = 0;
}


и сделал тест на скорость (INC не использовал, тк предполагается апдейтить не только это поле, но и еще несколько)

$itr = 10000;

for ($i = 0; $i < $itr; $i++) {
$user = new Rediska_Key_Hash('user_' . rand(1, 50000));
$user['hits'] = $user['hits'] + 1;
}


и показало оно мне на моем ноуте 860 апдейтов в секунду. (В конфиге редиса save 60 10000)


решил я сравнить это с mysql innodb , создал такую же базу на 50к записей и запустил

($i = 0; $i < $itr; $i++) {
mysql_query("UPDATE users SET hits = hits + 1 WHERE user_id = '".rand(1, 50000)."' ");
}


680 апдейтов\сек сказал мне mysql.
Хм, подумал я, разница конечно если, но если убрать парсинг sql (handlersocket например) то запросто получится результат redis.

Но теста ради сделал ALTER TABLE `users` ENGINE = MYISAM
и провел тот же тест

for ($i = 0; $i < $itr; $i++) {
mysql_query("UPDATE users SET hits = hits + 1 WHERE user_id = '".rand(1, 50000)."' ");
}

1830 апдейтов\сек сказал мне mysql.


Вопрос знатокам - что я делаю не так ? Redis же должен по идее работать чуть ли не на скорости memcached, который мне выдает в кривом варианте

for ($i = 0; $i < $itr; $i++) {
$user = $memcache_obj->get('user');
$user++;
$user = $memcache_obj->set('user', $user, 0);
}

2600 апдейтов\сек


Я понимаю, что memcached не писал на диск, но и редис по идее не должен писать на диск за время теста. Да и ладно запись на диск - почему такая разница с mysql myisam ?
 

Lifeline

Новичок
fixxxer Немного пугает отсуствие доки и последние комменты за 2009 год ...



но попробовал не через лист и убрал инит объекта из цикла

$Key = new Rediska_Key('count');

for ($i = 0; $i < $itr; $i++) {
$count = $Key->getValue();
$count++;
$Key->setValue($count);
}

980 \ sec

а так же попробовал вариант

$user = new Rediska_Key_Hash('user_1');

for ($i = 0; $i < $itr; $i++) {
$user['hits'] = $user['user'] + 1;
}

грубо теже 980 ...


PS с нетерпением ожидаю релиза mysql 5.6 innodb - memcache
поставил тестово - 2900 оп\сек - и при этом остается возможность sql и тп ..
 

~WR~

Новичок
Rediska же на php написана. Думаю, поэтому тормозит.
Ребята из Геометрии что-то говорили о том, что есть планы переписать её в виде модуля.
 

fixxxer

К.О.
Партнер клуба
Lifeline
да че там дока, сорц открываешь и все ясно :)
понятное дело что нововведений новых редисов там нет, но для твоего теста покатит
для твоего теста собственно покатит даже простой fsockopen/fread/fwrite
там протокол тупой как дрова

ну и кстати про 5.6 - handlersocket уже есть давно (хоть это и дикий изврат ;))
 

Lifeline

Новичок
fixxxer да, я пробовал перконовскую сборку с ним, по скорости как и innodb-memcache , а у второго удобнее\привычнее принципы работы, хотя конечно возможностей меньше.

но для меня все равно непонятно что я мог сделать не так в простом тесте, что mysql isam чтуь не в 3 раза бысрее redis ...
 

tz-lom

Продвинутый новичок
а кто сказал что конфиги из коробки должны быть сверх быстрыми?
 

Lifeline

Новичок
tz-lom

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

DiMA

php.spb.ru
Команда форума
тест фуфло, сделай многопоточным
а про "редиску" в приличном обществе не говорят .-)
 

Alexandre

PHPПенсионер
делал нативные тесты, исключая РНР (чтение запись 100К в 8 потоков ):
слайды 43-45

Редис совсем на немного обгоняет ХандлерСокет,
Однако редис - это хранилище memory only, а HS еще успевает осуществлять работу с диском.
Хочу заметить для любителей поспорить, что memory only вовсе не означает, что редис не сохраняет свои данные, а лишь говорит о типе расположения данных в NoSQL.

Несомненно весь тормоз в Редиске

PS Сообщения: 5 000
 
Сверху