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 ?
Для сравнения взял практически базовый таск как казалось бы для такой задачи. Заюзал 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 ?