750 000 Mysql queries per second is real
Азиатов не остановить :) Пост в блоге японского разработчика, рассказывающий о том как получить 750 000 mysql запросов в секунду. Теперь NoSQL кажется не таким перспективным :)
http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html
Колхозники и apache make_sock :)
Starting httpd: (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80 no listening sockets available, shutting down
Unable to open logs!
при возникновении такой ошибки на боевом сервере, обычно после apachectl stop, меня охватывала паника, и все на что хватало воспаленного мозга - reboot в консоли. Учитывая что процессов апача запущено не было, а на 80м порту висела пара FIN_WAIT’ов, выбора казалось бы нет ))) И так было не раз.
Стоило чуть задуматься немного погуглить, и нашелся простейший ответ:
netstat -lnp | grep ':80'
в моем случае подсказало мне, что 80й порт каким-то чудом умудряется занять memcached, за что он моментально наказывается killall -9 memcached :))
Вот такие дела. Воистину, reboot - крайняя мера в линухах ))
memcached
Сегодня впервые опробовал memcached ("мемкешди" в русской транскрипции). Эффект офигенный.
Я разрабатывал онлайн просмотрщик биржевых торгов, который просто обновлял HTML страницу с выбранными инструментами с определенной периодичностью. Основная засада была в том что минимальный период - 3 секунды, а таких пользователей сейчас может быть до сотни. Таким образом получаем 300 запросов в три секунды, т.е. где-то 100 запросов к базе в секунду. А запрос довольно немаленький на самом деле.
Решилось все очень просто - кешированием запросов которые выполняются с периодичностью в 15 секунд и более. Изменения в коде - минимальные. Пришлось запросы к базе делать через маленький метод такого рода:
function getCachedQuery($query, $ttl=30) {
global $_memcache, $db; //$db здесь - объект PEAR::MDB2
if(!isset($_memcache)) {
$_memcache = new Memcache;
$_memcache->connect('localhost', 11211) or die ('Could not connect');
}
$md5_q_txt = md5($query);
if($_memcache->get($md5_q_txt)) {
$q = $_memcache->get($md5_q_txt);
} else {
$q = $db->queryAll($query, '', MDB2_FETCHMODE_ASSOC);
$_memcache->add($md5_q_txt, $q, false, $ttl);
}
return $q;
}
Вот такой вот несложный код заставит ваше интернет приложение задышать поновому :))
![["Energizer"] ["Energizer"]](http://farm3.staticflickr.com/2505/4440139761_e9cb46ffa5_s.jpg)
![["Sin"] ["Sin"]](http://farm5.staticflickr.com/4056/4440915036_4b02f62401_s.jpg)
![["***"] ["***"]](http://farm5.staticflickr.com/4060/4440140489_478c213119_s.jpg)
![["***"] ["***"]](http://farm3.staticflickr.com/2699/4440139367_5a1785a1ba_s.jpg)