<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>Highload Web</title>
	<atom:link href="http://highload.com.ua/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://highload.com.ua</link>
	<description>Масштабирование и производительность Web систем, высокие нагрузки, архитектурные решения</description>
	<pubDate>Fri, 18 Mar 2011 12:37:49 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Percona MySQL Server</title>
		<link>http://highload.com.ua/index.php/2011/03/18/percona-mysql-server/</link>
		<comments>http://highload.com.ua/index.php/2011/03/18/percona-mysql-server/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 11:53:38 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Технологии]]></category>

		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=1247</guid>
		<description><![CDATA[
Как Вы знаете, движок таблиц InnoDB в MySQL стал платным. Теперь пакетные бесплатные версии этой СУБД поставляются только с MyISAM, Memory и несколькими другими движками. InnoDB по-умолчанию теперь не установлен.
Движок InnoDB в MySQL остается бесплатным (опять включен в 5.5), но судя по всему поддержка и развитие community версии будет идти с большим опозданием.

Парни из компании [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://highload.com.ua/wp-content/uploads/2011/03/percona-server-logo.jpg" alt="percona-server-logo" title="percona-server-logo" width="250" height="108" class="alignleft size-full wp-image-1246" /></p>
<p><del datetime="2011-03-18T12:35:02+00:00">Как Вы знаете, движок таблиц InnoDB в MySQL стал платным. Теперь пакетные бесплатные версии этой СУБД поставляются только с MyISAM, Memory и несколькими другими движками. InnoDB по-умолчанию теперь не установлен.</del><br />
Движок InnoDB в MySQL остается бесплатным (опять включен в 5.5), но судя по всему поддержка и развитие community версии будет идти с большим опозданием.<br />
</p>
<p>Парни из компании Percona уже давно делают свою собственную сборку сервера, в которой установлен продвинутый движок XtraDB (на базе InnoDB). Посмотрим поближе на этот продукт.<br />
<span id="more-1247"></span></p>
<h2>XtraDB</h2>
<p>XtraDB - это усовершенствованный движок InnoDB с большим количеством улучшений. Среди особенностей следует отметить:</p>
<ul>
<li> Больше параметров для более тонкой настройки
<li> Больше параметров и возможностей для сбора статистики (например, лог медленных запросов менее секунды)
<li> Более эффективное управление памятью
<li> Более эффективная работа на большом количестве ядер
</ul>
<p>Самое главное, что разработчики делали изменения на основе реальных запросов от клиентов, которые испытывали трудности в практических условиях. Этот движок поставляется бесплатно в рамках сборки Percona Server.</p>
<h2>Особенности сервера</h2>
<p>Эта сборка MySQL сервера включает большое количество полезных дополнений и изменений.</p>
<h4>XtraDB</h4>
<p>В сборку входит продвинутый движок XtraDB.</p>
<h4>NoSQL интерфейс</h4>
<p>В версии 5.5.8 ребята планируют добавить сокет-интерфейс для прямой работы с данным в обход протокола SQL. Очень круто!</p>
<h4>Большое число параметров диагностики</h4>
<p>Сбор статистики <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a> в разрезе на клиента, таблицу, индекс, пользователя. Очень полезная информация для решения проблем с быстродействием.</p>
<h4>Улучшения в проиводительности</h4>
<p>Большое число оптимизаций для более эффективной работы сервера. Например, быстрое выключение, предзагрузка буферного пула, быстрые алгоритмы контрольных сум, неблокирующие алгоритмы и множество других изменений.</p>
<h2>Практический опыт</h2>
<p>Недавно установили этот сервер на один из быстро растущих проектов. Была необходимость перехода на InnoDB, т.к. с удивлением обнаружили, что мы работали на MyISAM, и начались проблемы из-за постоянных блокировок. Удивительно, что MySQL при поднятии из дампа не ругался на то, что не знает движка InnoDB, а просто присвоил всем таблицам MyISAM.</p>
<p>Установка очень простая, т.к. для популярных сборок линукса на сервере есть пакеты. База стала без проблем. Поднялись с дампа (порядка 100 таблиц), все заработало с первого раза. Сейчас нагрузка небольшая - 300 запросов в секунду (500 в пики). Мощный сервер на 32Гб и 8 ядер отдыхает.</p>
<p><a href="http://www.percona.com/software/percona-server/feature-comparison/" rel="nofollow">Официальный сайт</a>.</p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2011/03/18/percona-mysql-server/&title=Percona+MySQL+Server+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2011/03/18/percona-mysql-server/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2011/03/18/percona-mysql-server/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2011/03/18/percona-mysql-server/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2011/03/18/percona-mysql-server/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2011/03/18/percona-mysql-server/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2011/03/18/percona-mysql-server/&title=Percona+MySQL+Server+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2011/03/18/percona-mysql-server/&title=Percona+MySQL+Server+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2011/03/18/percona-mysql-server/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2011/03/18/percona-mysql-server/&t=Percona+MySQL+Server+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2011/03/18/percona-mysql-server/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2011/03/18/percona-mysql-server/&title=Percona+MySQL+Server+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2011/03/18/percona-mysql-server/&u_data[name]=Percona+MySQL+Server+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2011/03/18/percona-mysql-server/&title=Percona+MySQL+Server+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>Related posts:<ol><li><a href='http://highload.com.ua/index.php/2009/06/22/percona-%d0%b7%d0%b0%d0%bf%d1%83%d1%81%d0%ba%d0%b0%d0%b5%d1%82-%d1%81%d0%ba%d1%80%d0%b8%d0%bd%d0%ba%d0%b0%d1%81%d1%82%d1%8b/' rel='bookmark' title='Permanent Link: Percona запускает скринкасты'>Percona запускает скринкасты</a></li><li><a href='http://highload.com.ua/index.php/2009/11/26/check-unused-keys-proverka-neispolzuemyh-indeksov-mysql/' rel='bookmark' title='Permanent Link: check-unused-keys - проверка неиспользуемых индексов в MySQL'>check-unused-keys - проверка неиспользуемых индексов в MySQL</a></li><li><a href='http://highload.com.ua/index.php/2009/04/23/%d0%be%d0%bf%d1%82%d0%b8%d0%bc%d0%b0%d0%bb%d1%8c%d0%bd%d0%b0%d1%8f-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-mysql-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80%d0%b0/' rel='bookmark' title='Permanent Link: Оптимальная настройка Mysql сервера'>Оптимальная настройка Mysql сервера</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2011/03/18/percona-mysql-server/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Используем Nginx, как кеширующий сервер</title>
		<link>http://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/</link>
		<comments>http://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/#comments</comments>
		<pubDate>Fri, 03 Dec 2010 17:55:07 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Теория и практика]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=1234</guid>
		<description><![CDATA[
В этой статье рассмотрим применениt Nginx&#8217;a в качестве кеширующего сервера. Подробно о HTTP кеширования написано в статьях о продвинутом кеширующем сервере Varnish. Сразу следует отметить, что Nginx полностью не заменяет Varnish по функционалу и возможностям, но тем не менее продставляет очень хорошое решение. Учитывая великолепную работу этого Web-сервера, наличие функциональности кеширования делает возможным подключить ее [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://highload.com.ua/wp-content/uploads/2010/12/776px-nginx-battleshipsvg.png" alt="nginx" title="nginx" width="300" height="217"  class="alignleft size-full wp-image-901" /></p>
<p>В этой статье рассмотрим применениt <a href="http://highload.com.ua/index.php/2009/04/23/nginx/" >Nginx</a>&#8217;a в качестве кеширующего сервера. Подробно о HTTP кеширования написано в статьях о <a href="http://highload.com.ua/index.php/tag/varnish/">продвинутом кеширующем сервере Varnish</a>. Сразу следует отметить, что <a href="http://highload.com.ua/index.php/2009/04/23/nginx/" >Nginx</a> полностью не заменяет <a href="http://highload.com.ua/index.php/2009/04/21/varnish/" >Varnish</a> по функционалу и возможностям, но тем не менее продставляет очень хорошое решение. Учитывая великолепную работу этого Web-сервера, наличие функциональности кеширования делает возможным подключить ее к своему сайту буквально за 2 минуты.<br />
<span id="more-1234"></span></p>
<h2>Что кешировать?</h2>
<p>В <a href="http://highload.com.ua/index.php/tag/varnish/">предыдущих статьях</a> уже неоднократно упоминалось про суть HTTP кеширования. Если не учитывать более сложных случаев, когда нужно учитывать персонализацию страниц, почти на всех сайтах можно кешировать странички для неавторизованных пользователей. Этот метод хорошо подойдет для информационных ресурсов (например, для этого блога).</p>
<p>Самый простой случай - кешировать страницы для неавторизованных пользователей. Время кеширования обычно выбирают небольшое - 5&#8230;10 минут. Тем не менее, при большой нагрузке, это может сэкономить огромное количество ресурсов.</p>
<h2>Как кешировать с помощью Nginx?</h2>
<p>Давайте вместе настроим кеширование для нашего блога. Для начала необходимо определить зоны кеширования. Зоны помагают категоризировать Ваши объекты в кеше для лучшей управляемости. Зона имеет имя и размер (<a href="http://highload.com.ua/index.php/2009/04/23/nginx/" >nginx</a>.conf):</p>
<pre>
#...
proxy_cache_path /var/cache/<a href="http://highload.com.ua/index.php/2009/04/23/nginx/" >nginx</a> levels=1:2 keys_zone=all:32m;
# include virtual hosts...
</pre>
<p>Так мы определили, что хотим создать зону &#8220;all&#8221; размером 32Мб, данные которой будут храниться в папке &#8220;/var/cache/<a href="http://highload.com.ua/index.php/2009/04/23/nginx/" >nginx</a>&#8221;. Параметр <strong>levels</strong> задает уровень вложенности файлов. В нашем случае файлы будут храниться в друхуровневой структуре папок. Подробнее про параметры можно почитать в <a href="http://sysoev.ru/nginx/docs/http/ngx_http_proxy_module.html#proxy_cache_path" rel="nofollow" target="_blank">официальной документации</a>.</p>
<p>Не забываем создать папку, где будут храниться данные кеша:</p>
<pre>mkdir /var/cache/<a href="http://highload.com.ua/index.php/2009/04/23/nginx/" >nginx</a></pre>
<p>Теперь необходимо выделить принимающий сервер и настроить на нем правила кеширования:</p>
<pre>
server {
        listen 80;
        server_name .highload.com.ua;

        location / {
                if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
                        set $do_not_cache 1;
                }
                proxy_cache_bypass $do_not_cache;
                proxy_pass http://highload.com.ua:81/;
                proxy_cache all;
                proxy_cache_valid 404 502 503 1m;
                proxy_cache_valid any 1h;
        }
}
</pre>
<p>Обслуживающий хост уедет на 81 порт. Нам необходимо, чтобы кеширование работало только для неавторизованных пользователей. Некоторые пояснения к настройкам:</p>
<p>В условие &#8220;if&#8221; сделана проверка на куки, которые Wordpress ставит при авторизации</p>
<p><b>proxy_cache_bypass $do_not_cache</b> - не кешировать ответ, если пользователь авторизован</p>
<p><b>proxy_cache all</b> - этот параметр включает кеширование, в качестве аргумента принимает зону (у нас это &#8220;all&#8221;)</p>
<p><b>proxy_cache_valid 404 502 503 1m</b> - кешируем 404, 502 и 503 ответы на 1 минуту</p>
<p><b>proxy_cache_valid any 1h</b> - кешируем все остальные ответы на 1 час</p>
<h2>Другие форматы</h2>
<p>Следует отметить, что кешировать можно не только страницы HTML, но и любые другие типы данных. На одном из наших проектов мы успешно кешируем уменьшенные версии картинок с помощью <a href="http://highload.com.ua/index.php/2009/04/23/nginx/" >Nginx</a>&#8217;a.</p>
<p>Будет интересно увидеть отзывы читателей, которым уже приходилось на практике применять это решение.</p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/&title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC+Nginx%2C+%D0%BA%D0%B0%D0%BA+%D0%BA%D0%B5%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/&title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC+Nginx%2C+%D0%BA%D0%B0%D0%BA+%D0%BA%D0%B5%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/&title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC+Nginx%2C+%D0%BA%D0%B0%D0%BA+%D0%BA%D0%B5%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/&t=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC+Nginx%2C+%D0%BA%D0%B0%D0%BA+%D0%BA%D0%B5%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/&title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC+Nginx%2C+%D0%BA%D0%B0%D0%BA+%D0%BA%D0%B5%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/&u_data[name]=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC+Nginx%2C+%D0%BA%D0%B0%D0%BA+%D0%BA%D0%B5%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/&title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC+Nginx%2C+%D0%BA%D0%B0%D0%BA+%D0%BA%D0%B5%D1%88%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B9+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>Related posts:<ol><li><a href='http://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/' rel='bookmark' title='Permanent Link: Используем Nginx как &#8220;long polling&#8221; (Comet) сервер'>Используем Nginx как &#8220;long polling&#8221; (Comet) сервер</a></li><li><a href='http://highload.com.ua/index.php/2010/04/06/nginx-memcached-ssi-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d0%b8-%d0%b1%d0%bb%d0%be%d0%ba%d0%be%d0%b2-partials/' rel='bookmark' title='Permanent Link: Nginx + Memcached + SSI - кеширование страниц и блоков (partials)'>Nginx + Memcached + SSI - кеширование страниц и блоков (partials)</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Конференция Highload++ 25 и 26 октября</title>
		<link>http://highload.com.ua/index.php/2010/10/11/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-highload-25-%d0%b8-26-%d0%be%d0%ba%d1%82%d1%8f%d0%b1%d1%80%d1%8f/</link>
		<comments>http://highload.com.ua/index.php/2010/10/11/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-highload-25-%d0%b8-26-%d0%be%d0%ba%d1%82%d1%8f%d0%b1%d1%80%d1%8f/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 14:03:21 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Прочее]]></category>

		<category><![CDATA[highload++]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=1226</guid>
		<description><![CDATA[
25 и 26 октября в Москве пройдет крупнейшая профессиональная техническая конференция Рунета - конференция разработчиков высоконагруженных систем HighLoad++. Мероприятие проходит уже четвертый год, собирая более 700 участников. В этом году основная направленность конференции - оригинальные исследования, новые архитектуры, новые концепкции и подходы в построении крупных Интернет-проектов.

HighLoad++ - знаковое событие по обмену опытом - мы ожидаем [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://highload.com.ua/wp-content/uploads/2010/10/hl.png" alt="highload++" title="highload++" width="300" height="62" class="alignleft size-full wp-image-1227" /></p>
<p>25 и 26 октября в Москве пройдет крупнейшая профессиональная техническая конференция Рунета - конференция разработчиков высоконагруженных систем <a href="http://www.highload.ru/?partner=highloadcomua" target="_blank">HighLoad++</a>. Мероприятие проходит уже четвертый год, собирая более 700 участников. В этом году основная направленность конференции - оригинальные исследования, новые архитектуры, новые концепкции и подходы в построении крупных Интернет-проектов.</p>
<p><span id="more-1226"></span></p>
<p>HighLoad++ - знаковое событие по обмену опытом - мы ожидаем Stoyan Stefanov (Yahoo), Eugene Chigirinskiy (Microsoft), Patrice Pelland (Microsoft), James Golick, Robert Johnson (Facebook), Joe Damato, Петр Зайцев (Percona), Simon Riggs (PostgreSQL) и Bruce Momjian (PostgreSQL).</p>
<p>Joe Damato, &#8220;хакер&#8221;, специализирующийся на низком уровне, известный специалист в мире Ruby прочитает доклад &#8220;Настройка и инструментарий для Linux / Performance tweaks and tools for Linux&#8221;. Доклад разделен на две части. В первой части Джо рассмотрит особенности различных настроек <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a> ядра Linux (и стандартные драйвера). Разговор пойдет о некоторых малоизвестных настройках ядра, подстройка которых поможет наиболее эффективно использовать аппаратные средства железа.</p>
<p>Во второй части доклада разговор пойдет о полезных инструментах для изучения и диагностики ошибок в процессах. Автор пробежится по различным инструментам для Linux (strace, ltrace, oprofile, gdb, и другие) и разберет, как их можно использовать, чтобы получить представление о том, на что тратятся ресурсы и время обработки запросов.</p>
<p>Другой отличный доклад - про архитектуру крупнейшего интернет-сайта в мире - Facebook.com от Robert Johnson, руководитель отдела разработки в Facebook, где он разрабатывает технологии по экономически эфективному <a href="http://highload.com.ua/index.php/tag/%D0%BC%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/" >масштабированию</a> инфраструктуры и <a href="http://highload.com.ua/index.php/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/" >оптимизации</a> <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a> для миллионов пользователей Facebook. </p>
<p>Роберт расскажет о технологии, необходимой для запуска сайта таких масштабов (100 млрд. просмотров в день, 50 млрд. хранящихся фотографий), включая конкретные технологии созданные компанией Фейсбук, некоторые принципы, применяемые в работе с масштабированием, и уроки, полученные во время этих разработок. Также Роберт расскажет о наших новейших разработках в области <a href="http://highload.com.ua/index.php/tag/%D0%BC%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/" >масштабирования</a> - пропуска социального контекста из сети через платформу Facebook.</p>
<p>Организаторы собрали в эти два дня крупнейшую встречу разработчиков баз данных - мы узнаем о новшествах в PostgreSQL и MySQL от тех, кто разрабатывал эти новшества: Саймон Ригс, Брюс Момжан, Петр Зайцев, разработчики Сфинкса, Константин Осипов и другие.</p>
<h4>Целый блок докладов о Ruby и Python</h4>
<ul>
<li>Frontik. Сервер сборщик на python / Сергей Никулин (HeadHunter);
<li>Оптимизация одного из топовых приложений для социальной сети ВКонтакте: 1000 запросов в секунду на Rails / Максим Лапшин;
<li>Приемы разработки высоконагруженных приложений на Twisted / Андрей Смирнов;
<li>Erlyvideo: 2000 одновременных видеоподключений / Максим Лапшин;
</ul>
<h4>Облачные вычисления</h4>
<ul>
<li>Cloud APIs: обзор API западных провайдеров и API Scalaxy;
<li>Extreme Cloud Storage on FreeBSD / Андрей Пантюхин;
<li>Scaling to Hundreds of Millions of Requests: What Worked and What Didn&#8217;t / James Golick;
</ul>
<h4>DDOS и защита от него</h4>
<ul>
<li>Тандемные DDoS-атаки / Проблематика уязвимостей в спецификации TCP/IP (фундаментальные уязвимости) / Артем Гавриченков;
<li>Отчет за год по DDOS (атаки на ДНС, &#8220;не жадные&#8221; ботнеты, атаки на индекс Yandex (черный seo), высокоскоростные атаки, позиция государства и МВД на эту тему) / Александр Лямин;
</ul>
<h4>Пара круглых столов</h4>
<ul>
<li>Квадратный стол про использование many-core CPU с участием Google, Intel, Yandex и Badoo / (Google, Яндекс, Mail.ru, Intel);
<li>Круглый стол с представителями ВКонтакте;
</ul>
<p>Все доклады конференции построены как профессиональные - даже если докладчик рассказывает о своей услуге, он рассказывает о том, как она устроена, а не рекламирует ее. Например - &#8220;Как мы строим CDN в России&#8221;. Классификация CDN по спобу расположения серверов: расстановка серверов по сетям интернет-провайдеров или подключение к провайдерам в точках обмена трафиком. Классификация CDN по способу распределения нагрузки: DNS, HTTP Redirect. Классификация CDN по способу нахождения кратчайшего пути до пользователя.</p>
<p>И многое, многое другое - более 60 докладов из которых <a href="http://www.highload.ru/news/13214.html?partner=highloadcomua" target="_blank">Программный комитет конференции</a>, в который входят технические директора и ведущие специалисты крупнейших компаний Рунета (Яндекс, Mail.ru, Рамблер, Badoo и другие), выберет самые лучшие.</p>
<p>Подробности Вы можете найти на сайте конференции <a href="http://www.highload.ru/?partner=highloadcomua" target="_blank">HighLoad++</a>.</p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2010/10/11/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-highload-25-%d0%b8-26-%d0%be%d0%ba%d1%82%d1%8f%d0%b1%d1%80%d1%8f/&title=%D0%9A%D0%BE%D0%BD%D1%84%D0%B5%D1%80%D0%B5%D0%BD%D1%86%D0%B8%D1%8F+Highload%2B%2B+25+%D0%B8+26+%D0%BE%D0%BA%D1%82%D1%8F%D0%B1%D1%80%D1%8F+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2010/10/11/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-highload-25-%d0%b8-26-%d0%be%d0%ba%d1%82%d1%8f%d0%b1%d1%80%d1%8f/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2010/10/11/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-highload-25-%d0%b8-26-%d0%be%d0%ba%d1%82%d1%8f%d0%b1%d1%80%d1%8f/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2010/10/11/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-highload-25-%d0%b8-26-%d0%be%d0%ba%d1%82%d1%8f%d0%b1%d1%80%d1%8f/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2010/10/11/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-highload-25-%d0%b8-26-%d0%be%d0%ba%d1%82%d1%8f%d0%b1%d1%80%d1%8f/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2010/10/11/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-highload-25-%d0%b8-26-%d0%be%d0%ba%d1%82%d1%8f%d0%b1%d1%80%d1%8f/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2010/10/11/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-highload-25-%d0%b8-26-%d0%be%d0%ba%d1%82%d1%8f%d0%b1%d1%80%d1%8f/&title=%D0%9A%D0%BE%D0%BD%D1%84%D0%B5%D1%80%D0%B5%D0%BD%D1%86%D0%B8%D1%8F+Highload%2B%2B+25+%D0%B8+26+%D0%BE%D0%BA%D1%82%D1%8F%D0%B1%D1%80%D1%8F+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2010/10/11/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-highload-25-%d0%b8-26-%d0%be%d0%ba%d1%82%d1%8f%d0%b1%d1%80%d1%8f/&title=%D0%9A%D0%BE%D0%BD%D1%84%D0%B5%D1%80%D0%B5%D0%BD%D1%86%D0%B8%D1%8F+Highload%2B%2B+25+%D0%B8+26+%D0%BE%D0%BA%D1%82%D1%8F%D0%B1%D1%80%D1%8F+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2010/10/11/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-highload-25-%d0%b8-26-%d0%be%d0%ba%d1%82%d1%8f%d0%b1%d1%80%d1%8f/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2010/10/11/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-highload-25-%d0%b8-26-%d0%be%d0%ba%d1%82%d1%8f%d0%b1%d1%80%d1%8f/&t=%D0%9A%D0%BE%D0%BD%D1%84%D0%B5%D1%80%D0%B5%D0%BD%D1%86%D0%B8%D1%8F+Highload%2B%2B+25+%D0%B8+26+%D0%BE%D0%BA%D1%82%D1%8F%D0%B1%D1%80%D1%8F+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2010/10/11/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-highload-25-%d0%b8-26-%d0%be%d0%ba%d1%82%d1%8f%d0%b1%d1%80%d1%8f/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2010/10/11/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-highload-25-%d0%b8-26-%d0%be%d0%ba%d1%82%d1%8f%d0%b1%d1%80%d1%8f/&title=%D0%9A%D0%BE%D0%BD%D1%84%D0%B5%D1%80%D0%B5%D0%BD%D1%86%D0%B8%D1%8F+Highload%2B%2B+25+%D0%B8+26+%D0%BE%D0%BA%D1%82%D1%8F%D0%B1%D1%80%D1%8F+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2010/10/11/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-highload-25-%d0%b8-26-%d0%be%d0%ba%d1%82%d1%8f%d0%b1%d1%80%d1%8f/&u_data[name]=%D0%9A%D0%BE%D0%BD%D1%84%D0%B5%D1%80%D0%B5%D0%BD%D1%86%D0%B8%D1%8F+Highload%2B%2B+25+%D0%B8+26+%D0%BE%D0%BA%D1%82%D1%8F%D0%B1%D1%80%D1%8F+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2010/10/11/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-highload-25-%d0%b8-26-%d0%be%d0%ba%d1%82%d1%8f%d0%b1%d1%80%d1%8f/&title=%D0%9A%D0%BE%D0%BD%D1%84%D0%B5%D1%80%D0%B5%D0%BD%D1%86%D0%B8%D1%8F+Highload%2B%2B+25+%D0%B8+26+%D0%BE%D0%BA%D1%82%D1%8F%D0%B1%D1%80%D1%8F+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2010/10/11/%d0%ba%d0%be%d0%bd%d1%84%d0%b5%d1%80%d0%b5%d0%bd%d1%86%d0%b8%d1%8f-highload-25-%d0%b8-26-%d0%be%d0%ba%d1%82%d1%8f%d0%b1%d1%80%d1%8f/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sphinx RT (real-time) индексы</title>
		<link>http://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/</link>
		<comments>http://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 10:35:08 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Технологии]]></category>

		<category><![CDATA[sphinx]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=1210</guid>
		<description><![CDATA[
Sphinx 1.10 поддерживает индексы реального времени (Reat-time или RT). Это самая важная функция в новой версии этого отличного полнотекстового поисковика. Индексы реального времени позволяют синхронно добавлять документы для поиска в индекс. Это позволяет избежать задержки появления новых документов в результатах поиска. Пробуем RT индексы на практике.

Обзор
Как уже было сказано, RT индексы позволяют добавлять документы в [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://highload.com.ua/wp-content/uploads/2010/05/sphinx.jpg" alt="spinx" class="alignleft size-full wp-image-1104" /><br />
<strong>Sphinx 1.10</strong> поддерживает индексы реального времени (Reat-time или RT). Это самая важная функция в новой версии этого отличного полнотекстового поисковика. Индексы реального времени позволяют синхронно добавлять документы для поиска в индекс. Это позволяет избежать задержки появления новых документов в результатах поиска. Пробуем RT индексы на практике.</p>
<p><span id="more-1210"></span></p>
<h2>Обзор</h2>
<p>Как уже было сказано, RT индексы позволяют добавлять документы в поисковый индекс на лету (не только добавлять, но и обновлять/удалять). RT индексы поддерживают не все дополнительные возможности (сейчас нет поддержки MVA атрибутов, префиксов, процесс <a href="http://highload.com.ua/index.php/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/" >оптимизации</a> индекса еще не реализован), но большинство уже доступно. &#8220;Живые&#8221; индексы находятся в активной разработке, поэтому все недостающие функции будут доступны в скором времени.</p>
<h2>Использование RT индексов</h2>
<p>Объявление RT индекса выглядит следующим образом:</p>
<pre>
index rt_test
{
	type = rt
	path = /usr/local/sphinx/data/rt_test
	rt_field = title
	rt_field = content
}
</pre>
<p>Мы объявили RT индекс с двумя полями для индексации. Каждый RT индекс содержит целочисленную колонку ID документа (ее не нужно объявлять).</p>
<p>После перезагрузки демона поиска &#8220;searchd&#8221; на 9306 порту (по умолчанию) будет доступен сервер RT индексов. Работа с RT индексами пока реализована только на основе протокола MySQL. Для управления индексами доступны следующие команды:</p>
<ul>
<li><b>INSERT</b> INTO rt_test(id, title, content) VALUES ( 1, &#8216;hello&#8217;, &#8216;world&#8217;)</li>
<li><b>REPLACE</b> INTO rt_test(id, title, content) VALUES ( 1, &#8216;hello&#8217;, &#8216;world&#8217;)</li>
<li><b>DELETE</b> FROM rt_test WHERE id = id</li>
</ul>
<p>Также поддерживается множественная вставка, что предпочтительнее для вставки большого количества данных.</p>
<pre>
mysql -h 127.0.0.1 -P 9306
mysql> INSERT INTO rt_test ( id, title, content )
VALUES ( 2, 'second', 'world' ), ( 3, 'third', 'earth' );
Query OK, 2 rows affected (0.01 sec)

mysql> REPLACE INTO rt_test ( id, title, content ) VALUES ( 1, 'new text', 'for first row' );
Query OK, 1 row affected (0.01 sec)

mysql> DELETE FROM rt_test WHERE id=2;
Query OK, 0 rows affected (0.00 sec)
</pre>
<p>На клиентской стороне поиск ни чем не отличается от обычного индекса, поэтому там все стандартно.</p>
<h2>Внутренности и особенности RT индексов в Sphinx&#8217;e</h2>
<p>RT индексы внутри состоят из фрагментов. Один фрагмент хранится в оперативной памяти, который хранит последние обновления. Когда размер фрагмента в RAM превышает лимит, он сбрасывается на диск, а оперативная память очищается. Большое количество дисковых фрагментов может привести к высокой фрагментации и снижению <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a> поиска (пока дефрагментация не поддерживается), поэтому параметр <b>rt_mem_limit</b> а настройках лучше ставить побольше.</p>
<p>Фрагменты на диске представляют из себя обычные полнотекстовые индексы. Поскольку дисковые фрагменты не могут быть изменены, то изменения в индексе (удаление или обновление документов) переопределяют предыдущую версию документа. При большом объеме операций обновленния/удаления это может привести к снижению <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a> поиска (из-за наличия &#8220;мусорных&#8221; документов). Уже запланирована работа по реализации процедуры <a href="http://highload.com.ua/index.php/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/" >оптимизации</a> RT индексов.</p>
<p>В данный момент мы используем Sphinx 1.10 в продуктивной среде на одном крупном проекте. Работает очень стабильно. Планируем постепенно мигрировать на RT индексы.</p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/&title=Sphinx+RT+%28real-time%29+%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/&title=Sphinx+RT+%28real-time%29+%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/&title=Sphinx+RT+%28real-time%29+%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/&t=Sphinx+RT+%28real-time%29+%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/&title=Sphinx+RT+%28real-time%29+%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/&u_data[name]=Sphinx+RT+%28real-time%29+%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/&title=Sphinx+RT+%28real-time%29+%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%8B+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>Related posts:<ol><li><a href='http://highload.com.ua/index.php/2009/06/25/%d0%b4%d0%b5%d0%bb%d1%8c%d1%82%d0%b0-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81-%d0%b2-sphinx/' rel='bookmark' title='Permanent Link: Дельта индекс в Sphinx'>Дельта индекс в Sphinx</a></li><li><a href='http://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/' rel='bookmark' title='Permanent Link: Полнотекстовый поиск в MongoDB используя Sphinx'>Полнотекстовый поиск в MongoDB используя Sphinx</a></li><li><a href='http://highload.com.ua/index.php/2009/11/30/sphinxsearch-index-merging/' rel='bookmark' title='Permanent Link: Sphinxsearch - объединение индексов (index merging)'>Sphinxsearch - объединение индексов (index merging)</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Используем Nginx как &#8220;long polling&#8221; (Comet) сервер</title>
		<link>http://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/</link>
		<comments>http://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 15:14:38 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Теория и практика]]></category>

		<category><![CDATA[long polling]]></category>

		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=1191</guid>
		<description><![CDATA[
Принцип &#8220;Long Polling&#8221; (или &#8220;Comet&#8220;) позволяет сделать возможным установление постоянного соединения клиента с Web приложением и также периодичной отправки данных клиенту в рамках этого соединения (без необходимости клиента постоянно делать HTTP запросы для проверки новых данных). Другими словами, эта модель позволяет реализовать постоянные HTTP соединения для получения данных порциями. Наиболее популярное применение - чаты, твиттеры [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://highload.com.ua/wp-content/uploads/2010/07/comet.jpg" alt="comet" title="comet" width="85" height="200" class="alignleft size-full wp-image-1192" /></p>
<p>Принцип &#8220;<strong>Long Polling</strong>&#8221; (или &#8220;<strong>Comet</strong>&#8220;) позволяет сделать возможным установление постоянного соединения клиента с Web приложением и также периодичной отправки данных клиенту в рамках этого соединения (без необходимости клиента постоянно делать HTTP запросы для проверки новых данных). Другими словами, эта модель позволяет реализовать постоянные HTTP соединения для получения данных порциями. Наиболее популярное применение - чаты, твиттеры и другие live-updated потоки - клиент постоянно &#8220;слушает&#8221; сервер на предмет появления новых сообщений, и как только новые сообщения появляются - они мгновенно доставляются ему.</p>
<p>Сам принцип не несет в себе инноваций в HTTP протоколе, т.к. этот подход реализуем обычными средствами. Проблема заключается в том, что стандартное решение - установка постоянного соединения с обычным Web сервером (а значит и с обслуживающей платформой, например php-бекендом) - крайне ресурсоемкое и не применимо на практике. Другой подход - постоянно опрашивать приложение на предмет появления новых данных является еще более ресурсоемким.</p>
<p>Решением этой проблеммы стали т.н. HTTP-PUSH (или comet) сервера, позволяющие облуживать огромное количество постоянных соединений эффективно расходуя ресурсы. Как они устроены и как применяются на практике?<br />
<span id="more-1191"></span></p>
<h2>Принцип работы Comet-сервера</h2>
<p>Необходимо отметить, что Comet сервер решает задачу отправки клиенту определенных данных порциями. Comet сервера реализуют т.н. HTTP Push Relay протокол (например, <a href="http://pushmodule.slact.net/protocol.html">Basic HTTP Push Relay Protocol</a>). Принцип работы такого протокола заключается в следующем:</p>
<ul>
<li>На Web сервере создается т.н. &#8220;канал&#8221; с уникальным ключем. Это делается на стороне приложения путем посылки запроса к Comet-серверу</li>
<li>Клиент устанавливает обычное HTTP соединение с Comet-сервером, передавая в параметры ключ канала, из которого он будет получать данные. Сервер удерживает такое соединение, пока не отправит очередную порцию данных</li>
<li>Основное приложение, по определенному событию (например, кто-то написал сообщение клиенту), шлет в канал Comet сервера с нужным ключем это сообщение</li>
<li>Как только в канале появляется сообщение, Comet сервер отправляет его соответствующему клиенту и закрывает HTTP соединение (иногда соединения не закрываются, а продолжают быть активными)</li>
</ul>
<p>Таким образом, сервер реализует &#8220;стэки&#8221; сообещений, а их раздача происходит без участия тяжелых бекендов. Бекенды вступают в силу только тогда, когда необходимо отправить сообщение.</p>
<h2>Nginx и модуль HTTP Push</h2>
<p>Модуль <strong>nginx_http_push_module</strong> позволяет превратить <a href="http://highload.com.ua/index.php/2009/04/23/nginx/" >Nginx</a> в Comet сервер, реализуя протокол Basic HTTP Push Relay Protocol. Преимущества этого модуля и протокола - в его простоте по сравнению с альтернативными решениями (например, протоколом <a href="http://svn.cometd.com/trunk/bayeux/bayeux.html">Bayeux</a> и сервером CometD).</p>
<h4>Установка</h4>
<p>Для установки модуля необходимо скачать его исходники и перекомпилировать <a href="http://highload.com.ua/index.php/2009/04/23/nginx/" >Nginx</a>, т.к. модуль является внешней разработкой:</p>
<pre>
wget http://pushmodule.slact.net/downloads/nginx_http_push_module-0.692.tar.gz
tar -xvf nginx_http_push_module-0.692.tar.gz
...
cd /where/<a href="http://highload.com.ua/index.php/2009/04/23/nginx/" >nginx</a>/sources/are
./configure \
  --add-module=/path/to/<a href="http://highload.com.ua/index.php/2009/04/23/nginx/" >nginx</a>/modules/sources/nginx_http_push_module-0.692/
make; make install
</pre>
<h4>Конфигурация</h4>
<p>Для базовой конфигурации нам необходимо объявить две рабочих точки в <a href="http://highload.com.ua/index.php/2009/04/23/nginx/" >Nginx</a>&#8217;e: точка публикации сообщений (приватная - доступна только для самого приложения) и точка раздачи сообщений (публичная - к которой будут подключаться клиенты):</p>
<pre>
	location /publish {
		# Название переменной с идентификатором канала
		# в нашем примере "cid", т.е. запрос будет таким:
		# http://example.com/publish?cid=s42378fwe
		set $push_channel_id $arg_cid;
		push_publisher;

		# Отключаем хранение очереди (сообщение удаляется после доставки)
		push_store_messages off;
	}

	location /listen {
		push_subscriber;

		# Обслуживать только первого "слушателя"
		# Остальным отправляем 403
		push_subscriber_concurrency first;

		# Идентификатор канала
		set $push_channel_id $arg_cid;

		# Тип ответа
		default_type text/plain;
	}
</pre>
<p>После этого при отправке сообщения нужно будет посылать его в соотв. канал, делая POST запрос на &#8220;/publish&#8221;. Клиент же отправляет GET запрос на &#8220;/listen&#8221; и ждет ответа. Когда приходит ответ, клиент делает повторный запрос на &#8220;/listen&#8221; и т.д.</p>
<p>Все параметры конфигурации с подробным описанием смотрите на <a href="http://pushmodule.slact.net/#configure">официальном сайте</a>.</p>
<h2>Пример</h2>
<p>В качестве примера ниже приведен код на PHP, который используется для отправки сообщения в канал:</p>
<pre>

# Определяем ID канала
$channel_id = 12345;

# Сообщение
$message = 'Привет тебе!';

# Отправляем сообщение в канал
$c = curl_init( 'http://localhost/publish?cid=' . $channel_id );
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, json_encode($message));
$r = curl_exec($c);
</pre>
<p>Для получения сообщения код на Javascript будет выглядеть где-то так (на основе <a href="http://jquery.com">Jquery</a>):</p>
<pre>
var channelId = 12345;
function check_messages() {
	$.get('/listen?cid=' + channelId, {}, function(r) {
		// Считаем, что у нас есть div c id=messages,
		// куда мы дописываем сообщения
		$('#messages').append(r);
		setTimeout(check_messages, 500);
	}, 'json');
}

check_messages();
</pre>
<p>В каких случаях Вам приходилось пользоваться comet-серверами?</p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/&title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC+Nginx+%D0%BA%D0%B0%D0%BA+%22long+polling%22+%28Comet%29+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/&title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC+Nginx+%D0%BA%D0%B0%D0%BA+%22long+polling%22+%28Comet%29+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/&title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC+Nginx+%D0%BA%D0%B0%D0%BA+%22long+polling%22+%28Comet%29+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/&t=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC+Nginx+%D0%BA%D0%B0%D0%BA+%22long+polling%22+%28Comet%29+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/&title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC+Nginx+%D0%BA%D0%B0%D0%BA+%22long+polling%22+%28Comet%29+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/&u_data[name]=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC+Nginx+%D0%BA%D0%B0%D0%BA+%22long+polling%22+%28Comet%29+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/&title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D0%BC+Nginx+%D0%BA%D0%B0%D0%BA+%22long+polling%22+%28Comet%29+%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>Related posts:<ol><li><a href='http://highload.com.ua/index.php/2010/12/03/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d1%83%d1%8e%d1%89%d0%b8%d0%b9-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/' rel='bookmark' title='Permanent Link: Используем Nginx, как кеширующий сервер'>Используем Nginx, как кеширующий сервер</a></li><li><a href='http://highload.com.ua/index.php/2009/04/24/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-nginx/' rel='bookmark' title='Permanent Link: Настройка nginx'>Настройка nginx</a></li><li><a href='http://highload.com.ua/index.php/2009/10/31/nginx-dlya-otdaci-failov/' rel='bookmark' title='Permanent Link: Настройка nginx для отдачи файлов'>Настройка nginx для отдачи файлов</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2010/07/21/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-nginx-%d0%ba%d0%b0%d0%ba-long-polling-comet-%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Gearman и PHP - асинхронные задачи</title>
		<link>http://highload.com.ua/index.php/2010/07/09/gearman-%d0%b8-php-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b8/</link>
		<comments>http://highload.com.ua/index.php/2010/07/09/gearman-%d0%b8-php-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b8/#comments</comments>
		<pubDate>Fri, 09 Jul 2010 16:38:54 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Технологии]]></category>

		<category><![CDATA[gearman]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[очереди сообщений]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=1178</guid>
		<description><![CDATA[
Gearman - это сервер организации и распределения задач, или проще говоря сервер очереди сообщений. Gearman включает множество функциональных особенностей - балансировка, асинхронное/синхронное выполнение, приоритеты и т.п. В этой статье, на примере с PHP, реализуем простой механизм отложенной отправки почты.

Суть
Зачем вообще нужны такие решения, как Gearman, читайте в статье &#8220;Очередь сообщений - что это и зачем?&#8220;. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://highload.com.ua/wp-content/uploads/2010/07/gearman.gif" alt="gearman" title="gearman" width="300" height="50" class="alignleft size-full wp-image-1179" /></p>
<p><b>Gearman</b> - это сервер организации и распределения задач, или проще говоря сервер очереди сообщений. Gearman включает множество функциональных особенностей - балансировка, асинхронное/синхронное выполнение, приоритеты и т.п. В этой статье, на примере с PHP, реализуем простой механизм отложенной отправки почты.<br />
<span id="more-1178"></span></p>
<h2>Суть</h2>
<p>Зачем вообще нужны такие решения, как Gearman, читайте в статье &#8220;<a href="highload.com.ua/index.php/2009/05/15/очередь-сообщений-что-это-и-зачем/">Очередь сообщений - что это и зачем?</a>&#8220;. Наша задача реализовать отложенную отправку почты, т.к. это довольно ресурсоемкая операция и может сильно влиять на скорость ответа приложения клиенту.</p>
<h2>Установка</h2>
<p>Установка происходит в два этапа. Сначала ставим сам сервер (исходники качаем <a href="http://gearman.org/index.php?id=download">тут</a>):</p>
<pre>
tar -xvzf  gearmand-version.tar.gz
cd gearmand
./configure
make; make install
</pre>
<p>Теперь устанавливаем php расширение:</p>
<pre>
pecl download gearman-0.7.0
tar -xvf gearman-0.7.0.tgz
cd gearman-0.7.0
phpize
./configure
make
make install
</pre>
<p>Не забываем добавить &#8220;extension=gearman.so&#8221; в php.ini. Если все хорошо, то phpinfo() покажет нам:<br />
<img src="http://highload.com.ua/wp-content/uploads/2010/07/php-info-gearman.png" alt="php-info-gearman" title="php-info-gearman" width="662" height="179" class="aligncenter size-full wp-image-1182" /></p>
<h2>Клиент</h2>
<p>В нашем клиенте (основное приложение) отправка email сообщений будет осуществляться путем регистрации новых задач на сервере Gearman:</p>
<pre>

...
$mail = array(
  'to' => 'test@gmail.com',
  'subject' => 'Привет',
  'body' => 'Это тестовое сообщение',
);
...

# Подключаемся к серверу
$client= new GearmanClient();
$client->addServer();

# Регистрируем задачу для фонового выполнения
# "sendmail" - это тип задачи
# $mail - это данные письма
$result = $client->doBackground("sendmail", serialize($mail));
</pre>
<p>Обратите внимание, что PHP клиент принимает только строку в качестве данных о задаче, поэтому необходимо любой другой тип объектов сериализовать. Мы использовали асинхронное выполнение задач (метод <strong>doBackground</strong>), поэтому реальное время отправки почты не повлияет на скорость выполнения нашего приложения.</p>
<h2>Обработчик задачи</h2>
<p>Обработчик - это отдельное приложение (скрипт), который &#8220;слушает&#8221; сервер на предмет появления новых задач. Как только задача приходит - он выполняет связанную с ней логику (в нашем случае это будет отправка письма с помощью почтового сервера).</p>
<pre>

# Создаем "воркера" и подключаемся к серверу задач
$worker= new GearmanWorker();
$worker->addServer();

# Регистрируем обработчик события "sendmail"
# "send_mail" - это имя функции, объявленной ниже
$worker->addFunction("sendmail", "send_mail");

while (1)
{
  echo "Ждем работы...\n";

  $ret= $worker->work();
  if ($worker->returnCode() != GEARMAN_SUCCESS) break;
}

# Функция реальной отправки почты
# В аргумент ей передается объект задачи
function send_mail($job)
{
  $workload= $job->workload();
  $data = unserialize($workload);

  mail($data['to'], $data['subject'], $data['body']);
}
</pre>
<h2>Полезные ссылки</h2>
<ul>
<li><a href="http://gearman.org/">Официальный сайт</a>
<li><a href="http://php.net/gearman">PHP клиент</a>
</ul>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2010/07/09/gearman-%d0%b8-php-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b8/&title=Gearman+%D0%B8+PHP+-+%D0%B0%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5+%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2010/07/09/gearman-%d0%b8-php-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b8/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2010/07/09/gearman-%d0%b8-php-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b8/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2010/07/09/gearman-%d0%b8-php-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b8/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2010/07/09/gearman-%d0%b8-php-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b8/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2010/07/09/gearman-%d0%b8-php-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b8/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2010/07/09/gearman-%d0%b8-php-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b8/&title=Gearman+%D0%B8+PHP+-+%D0%B0%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5+%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2010/07/09/gearman-%d0%b8-php-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b8/&title=Gearman+%D0%B8+PHP+-+%D0%B0%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5+%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2010/07/09/gearman-%d0%b8-php-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b8/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2010/07/09/gearman-%d0%b8-php-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b8/&t=Gearman+%D0%B8+PHP+-+%D0%B0%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5+%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2010/07/09/gearman-%d0%b8-php-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b8/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2010/07/09/gearman-%d0%b8-php-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b8/&title=Gearman+%D0%B8+PHP+-+%D0%B0%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5+%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2010/07/09/gearman-%d0%b8-php-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b8/&u_data[name]=Gearman+%D0%B8+PHP+-+%D0%B0%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5+%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2010/07/09/gearman-%d0%b8-php-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b8/&title=Gearman+%D0%B8+PHP+-+%D0%B0%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B5+%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>Related posts:<ol><li><a href='http://highload.com.ua/index.php/2009/05/21/%d0%be%d1%87%d0%b5%d1%80%d0%b5%d0%b4%d1%8c-%d1%81%d0%be%d0%be%d0%b1%d1%89%d0%b5%d0%bd%d0%b8%d0%b9-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-php-%d0%b8-memcacheq/' rel='bookmark' title='Permanent Link: Очередь сообщений на основе PHP и MemcacheQ'>Очередь сообщений на основе PHP и MemcacheQ</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2010/07/09/gearman-%d0%b8-php-%d0%b0%d1%81%d0%b8%d0%bd%d1%85%d1%80%d0%be%d0%bd%d0%bd%d1%8b%d0%b5-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87%d0%b8/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Оптимизация картинок в Web</title>
		<link>http://highload.com.ua/index.php/2010/07/02/optimizaciya-kartinok/</link>
		<comments>http://highload.com.ua/index.php/2010/07/02/optimizaciya-kartinok/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 15:02:01 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Tips and tricks]]></category>

		<category><![CDATA[оптимизация]]></category>

		<category><![CDATA[статика]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=1161</guid>
		<description><![CDATA[
Когда речь идет об оптимизации Web приложений, большое внимание следует уделять оптимизации клиентской части. Размер статических данных обычно в разы превосходит размер динамически генерируемых. Большинство этих данных - это медиа данные. Чаще всего это изображения (картинки для верстки и фотографии), кроме того есть flash, видео, аудио и т.п. 
В этой статье рассмотрим основные инструменты оптимизации [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://highload.com.ua/wp-content/uploads/2010/07/jpeg-icon.png" alt="jpeg icon" title="jpeg icon" width="128" height="128" class="alignleft size-full wp-image-1162" /></p>
<p>Когда речь идет об <a href="http://highload.com.ua/index.php/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/" >оптимизации</a> Web приложений, большое внимание следует уделять <a href="http://highload.com.ua/index.php/2009/06/07/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D1%81%D0%BA%D0%BE%D0%B9-%D1%87%D0%B0%D1%81%D1%82%D0%B8/">оптимизации клиентской части</a>. Размер статических данных обычно в разы превосходит размер динамически генерируемых. Большинство этих данных - это медиа данные. Чаще всего это изображения (картинки для верстки и фотографии), кроме того есть flash, видео, аудио и т.п. </p>
<p>В этой статье рассмотрим основные инструменты <a href="http://highload.com.ua/index.php/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/" >оптимизации</a> картинок для Web приложений.<br />
<span id="more-1161"></span></p>
<h3>Суть оптимизации картинок</h3>
<p>Зачастую файлы изображений хранят множество дополнительной информации, например детали о съемке фото, комментарии, текстовое описание, географические данные и т.п. При использовании в Web практически всегда эти данные не нужны. Существуют инструменты, которые позволяют вырезать всю ненужные мета данные, а также делать определенную <a href="http://highload.com.ua/index.php/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/" >оптимизацию</a> изображения без потери качества. В некоторых случаях это может привести к 90% уменьшению размеров изображений.</p>
<p>Кроме этого, важно выбирать подходящий формат для каждой конкретной картинки, что позволит использовать максимально эффективное сжатие.</p>
<h3>Форматы</h3>
<p>В Web можно использовать три формата изображений:</p>
<ul>
<li><b>PNG</b> - сегодня это основной формат, ввиду эффективности сжатия и функциональных особенностей. Поддерживается всеми современными браузерами. Этот формат следует всегда выбирать по умолчанию для графики</li>
<li><b>GIF</b> - этот формат следует использовать, когда необходима анимация. Также в некоторых случаях (очень маленькие файлы - менее 10х10 пикселей) этот формат обеспечивает лучшее сжатие, чем PNG</li>
<li><b>JPEG</b> - выбирайте всегда для фотографий. Этот выбор лучше, чем PNG, т.к. JPEG позволяет выбрать более эффективную стратегию сжатия благодаря размытию (экономия за счет небольшой потери качества)</li>
</ul>
<h3>Инструменты для оптимизации</h3>
<h4>imagemagick</h4>
<p>Если Вы используете imagemagick для генерации превью (thumbnails), то включайте опцию &#8220;-strip&#8221; для вырезания всех ненужных метаданных из изображений:</p>
<pre>convert test.jpg -resize 100x100 <b>-strip</b> test_100.jpg</pre>
<p>Особенно хороший эффект дает для фотографий (в которых размер метаданных может достигать десятков килобайтов)</p>
<h4>Оптимизация JPEG с помощью jpegoptim</h4>
<p>В Debian системах эта утилита доступна в пакетах:</p>
<pre>apt-get install jpegoptim</pre>
<p>Для <a href="http://highload.com.ua/index.php/tag/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F/" >оптимизации</a> файлов нужно указать их в параметрах с опцией &#8220;&#8211;strip-all&#8221;:</p>
<pre>jpegoptim --strip-all test.jpg</pre>
<h4>Оптимизация PNG с помощью pngnq</h4>
<p>В Debian системах эта утилита также доступна в пакетах:</p>
<pre>apt-get install pngnq</pre>
<p>Работает так (в результате создает новый файл - старый <B>не</b> перезаписывает):</p>
<pre>pngnq test.png</pre>
<h3>Опыт</h3>
<p>На одном из наших проектов простой обработкой картинок (не фотографий) вышеперечисленными инструментами удалось уменьшить общий их размер более чем на 15%. И это при том, что почти все картинки создавались с помощью специальных инструментов с оптимальными настройками. Таким образом процедура оказалась очень полезной, к тому же крайне простой.</p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2010/07/02/optimizaciya-kartinok/&title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BE%D0%BA+%D0%B2+Web+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2010/07/02/optimizaciya-kartinok/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2010/07/02/optimizaciya-kartinok/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2010/07/02/optimizaciya-kartinok/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2010/07/02/optimizaciya-kartinok/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2010/07/02/optimizaciya-kartinok/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2010/07/02/optimizaciya-kartinok/&title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BE%D0%BA+%D0%B2+Web+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2010/07/02/optimizaciya-kartinok/&title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BE%D0%BA+%D0%B2+Web+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2010/07/02/optimizaciya-kartinok/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2010/07/02/optimizaciya-kartinok/&t=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BE%D0%BA+%D0%B2+Web+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2010/07/02/optimizaciya-kartinok/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2010/07/02/optimizaciya-kartinok/&title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BE%D0%BA+%D0%B2+Web+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2010/07/02/optimizaciya-kartinok/&u_data[name]=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BE%D0%BA+%D0%B2+Web+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2010/07/02/optimizaciya-kartinok/&title=%D0%9E%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+%D0%BA%D0%B0%D1%80%D1%82%D0%B8%D0%BD%D0%BE%D0%BA+%D0%B2+Web+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>Related posts:<ol><li><a href='http://highload.com.ua/index.php/2009/07/03/%d0%be%d0%bf%d1%82%d0%b8%d0%bc%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f-%d0%ba%d0%b0%d1%80%d1%82%d0%b8%d0%bd%d0%be%d0%ba-%d0%b4%d0%bb%d1%8f-web/' rel='bookmark' title='Permanent Link: Оптимизация картинок для Web'>Оптимизация картинок для Web</a></li><li><a href='http://highload.com.ua/index.php/2009/06/07/%d0%be%d0%bf%d1%82%d0%b8%d0%bc%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%8f-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%81%d0%ba%d0%be%d0%b9-%d1%87%d0%b0%d1%81%d1%82%d0%b8/' rel='bookmark' title='Permanent Link: Оптимизация клиентской части'>Оптимизация клиентской части</a></li><li><a href='http://highload.com.ua/index.php/2009/05/09/%d1%80%d0%b5%d1%81%d0%b0%d0%b9%d0%b7%d0%b8%d0%bd%d0%b3-%d0%ba%d0%b0%d1%80%d1%82%d0%b8%d0%bd%d0%be%d0%ba-%d0%b2-nginx/' rel='bookmark' title='Permanent Link: Ресайзинг картинок в nginx'>Ресайзинг картинок в nginx</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2010/07/02/optimizaciya-kartinok/feed/</wfw:commentRss>
		</item>
		<item>
		<title>NoSQL - подходы к решению типичных задач</title>
		<link>http://highload.com.ua/index.php/2010/06/03/nosql-%d0%bf%d0%be%d0%b4%d1%85%d0%be%d0%b4%d1%8b-%d0%ba-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8e-%d1%82%d0%b8%d0%bf%d0%b8%d1%87%d0%bd%d1%8b%d1%85-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87/</link>
		<comments>http://highload.com.ua/index.php/2010/06/03/nosql-%d0%bf%d0%be%d0%b4%d1%85%d0%be%d0%b4%d1%8b-%d0%ba-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8e-%d1%82%d0%b8%d0%bf%d0%b8%d1%87%d0%bd%d1%8b%d1%85-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 16:30:54 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Теория и практика]]></category>

		<category><![CDATA[key-value]]></category>

		<category><![CDATA[memcachedb]]></category>

		<category><![CDATA[nosql]]></category>

		<category><![CDATA[redis]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=876</guid>
		<description><![CDATA[
Врядли сегодня найдется тот, кто еще не слышал про key-value базы данных, или, как их называют в народе, NoSQL. Те, кто успел попробовать продукты вроде Redis, MemcacheDB и других, обнаружили некторые сложности при решении привычных задач - выборка списков и поиск.
В этой статье мы рассмотрим принципы решения типичных задач в key-value базах данных.

Основная сложность
Восновном, все [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://highload.com.ua/wp-content/uploads/2010/06/nosql.jpg" alt="nosql" title="nosql" width="150" height="132" class="alignleft size-full wp-image-1138" /></p>
<p>Врядли сегодня найдется тот, кто еще не слышал про <a href="http://highload.com.ua/index.php/tag/key-value/">key-value базы данных</a>, или, как их называют в народе, <b>NoSQL</b>. Те, кто успел попробовать продукты вроде <a href="http://highload.com.ua/index.php/2009/05/01/redis/" >Redis</a>, <a href="http://highload.com.ua/index.php/2009/04/27/memcachedb/" >MemcacheDB</a> и других, обнаружили некторые сложности при решении привычных задач - выборка списков и поиск.</p>
<p>В этой статье мы рассмотрим принципы решения типичных задач в key-value базах данных.</p>
<p><span id="more-876"></span></p>
<h2>Основная сложность</h2>
<p>Восновном, все key-value базы данных представляют из себя распределенные хеш-таблицы. Это самая сильная их сторона, т.к. предоставляет высокую <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительность</a> и крайне упрощает <a href="http://highload.com.ua/index.php/tag/%D0%BC%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/" >масштабирование</a>. Тем не менее, это свойство всплывает на поверхность, когда Вам необходимо работать со списками. В MySQL следующие задачи решаются в два счета:</p>
<ul>
<li>Выбрать 10 последних пользователей</li>
<li>Выбрать Самые популярные посты в блоге</li>
<li>Найти продукты, для которых оставлено более 3х комментариев</li>
<li>Полнотекстовый поиск</li>
<li>Поиск по любому свойству (найти пользователя, email которого такой-то)</li>
</ul>
<p>Но в key-value подобные задачи вызывают удивление и большие трудности. В двух словах, key-value базы данных совсем не предназначены для таких задач. Но это только на первый взгляд, ведь формулировать задачи можно по-разному. Стратегия решения будет зависеть от конкретной ситуации.</p>
<p>И так, по порядку:</p>
<h4>Поиск по ключу</h4>
<p>Существует класс задач, когда Вам необходимо делать выборку одного объекта не по первичному, а вторичному ключу (например, поиск пользователя по email&#8217;у, поиск автора по никнейму т.п.). Принцип решения этой задачи следующий: после создания нового объекта, Вам необходимо создать ссылки на его первичный ключ для всех его свойств, по которым придется делать выборку. Например мы создаем пользователя:</p>
<pre>
user_134: {
  name: Den,
  email: golotyuk@gmail.com
}
</pre>
<p>И дублируем ключ email:</p>
<pre>
user_email_golotyuk@gmail.com: {
  id: 134
}
</pre>
<p>Теперь, Вы сможете сделать выборку данных пользователя по его почтовому адресу в два этапа.</p>
<h4>Использование РСУБД</h4>
<p>Если Вам нужен MySQL - используйте его!</p>
<p>Существует класс задач, для которых можно и нужно использовать РСУБД, такие как MySQL и Postgres. Если Вам необходимо делать выборки списков с фильтрами и сортировками, то Вам следует использовать более подходящую для этого РСУБД. Хороший пример - это посты в блоге. (выборки, которые скорее всего нужно будет делать - самые новые, самые популярные, самые комментируемые записи и т.п.).</p>
<p>Подход довольно простой, но на практике очень часто задачи сильно переплетены, и в итоге Вы можете прийти к тому, что РСУБД возьмет все задачи обратно на себя. В этом случае следует подумать о гибридном решении:</p>
<h4>Гибридное решение - дополнительная РСУБД</h4>
<p>Это решение представляет из себя смесь key-value и РСУБД. Все данные Вы храните в key-value, но те свойства, по которым понадобиться делать агрегатные выборки дублируете в РСУБД (с указателем на ключ). Т.о. Вы сохраните <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительность</a> key-value базы данных и сможете решить свою задачу. Сложность тут заключается в том, что Вам придется следить за синхронизацией данных в обоих базах данных, что может сильно усложнить логику приложения.</p>
<h4>Полнотекстовый поиск и выборки с задержками</h4>
<p>Одна из частых задач - полнотекстовый поиск. Существуют отличные решения - Sphinxsearch, Solr и другие. К сожалению, ни одно из них еще не поддерживает индексацию key-value баз данных, но зато все предоставляют интерфейсы для ручной индексации. Вам нужно будет только описать реализацию для конкретного набора данных (например, с помощью XmlPipe в Sphinx&#8217;e).</p>
<p>Наряду с полнотекстовым поиском часто стоят и задачи, связанные с агрегатными выборками, которые не критичны к текущему состоянию данных. Например, когда Вы строите рейтинг пользователей (или постов в блоге, или продуктов в магазине или &#8230;), Вы можете спокойно использовать данные по состоянию на прошлый час(день/неделю/&#8230;). В качестве решения Вы можете использовать полнотекстовые серверы по их непрямому назначению. Многие из них поддерживают разнообразные фильтры и сортировки, которых достаточно для решения 90% задач подобного рода.</p>
<h4>Распределенные выборки</h4>
<p>Некоторые key-value базы данных позволяют делать выборки списков встроенными средствами. Масштабирование этого решения будет выглядеть как запросы ко всем узлам сети и агрегирование результатов на бекенде. В крупных масштабах это может быть очень затратная операция, поэтому это решени слеудет оптимизировать. Во многих случаях Вы можете обойтись без запросов ко всем узлам, а сделать выборку только на одном из них (например - выбрать случайное фото).</p>
<p>Что еще сюда можно добавить?</p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2010/06/03/nosql-%d0%bf%d0%be%d0%b4%d1%85%d0%be%d0%b4%d1%8b-%d0%ba-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8e-%d1%82%d0%b8%d0%bf%d0%b8%d1%87%d0%bd%d1%8b%d1%85-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87/&title=NoSQL+-+%D0%BF%D0%BE%D0%B4%D1%85%D0%BE%D0%B4%D1%8B+%D0%BA+%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8E+%D1%82%D0%B8%D0%BF%D0%B8%D1%87%D0%BD%D1%8B%D1%85+%D0%B7%D0%B0%D0%B4%D0%B0%D1%87+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2010/06/03/nosql-%d0%bf%d0%be%d0%b4%d1%85%d0%be%d0%b4%d1%8b-%d0%ba-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8e-%d1%82%d0%b8%d0%bf%d0%b8%d1%87%d0%bd%d1%8b%d1%85-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2010/06/03/nosql-%d0%bf%d0%be%d0%b4%d1%85%d0%be%d0%b4%d1%8b-%d0%ba-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8e-%d1%82%d0%b8%d0%bf%d0%b8%d1%87%d0%bd%d1%8b%d1%85-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2010/06/03/nosql-%d0%bf%d0%be%d0%b4%d1%85%d0%be%d0%b4%d1%8b-%d0%ba-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8e-%d1%82%d0%b8%d0%bf%d0%b8%d1%87%d0%bd%d1%8b%d1%85-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2010/06/03/nosql-%d0%bf%d0%be%d0%b4%d1%85%d0%be%d0%b4%d1%8b-%d0%ba-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8e-%d1%82%d0%b8%d0%bf%d0%b8%d1%87%d0%bd%d1%8b%d1%85-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2010/06/03/nosql-%d0%bf%d0%be%d0%b4%d1%85%d0%be%d0%b4%d1%8b-%d0%ba-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8e-%d1%82%d0%b8%d0%bf%d0%b8%d1%87%d0%bd%d1%8b%d1%85-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2010/06/03/nosql-%d0%bf%d0%be%d0%b4%d1%85%d0%be%d0%b4%d1%8b-%d0%ba-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8e-%d1%82%d0%b8%d0%bf%d0%b8%d1%87%d0%bd%d1%8b%d1%85-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87/&title=NoSQL+-+%D0%BF%D0%BE%D0%B4%D1%85%D0%BE%D0%B4%D1%8B+%D0%BA+%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8E+%D1%82%D0%B8%D0%BF%D0%B8%D1%87%D0%BD%D1%8B%D1%85+%D0%B7%D0%B0%D0%B4%D0%B0%D1%87+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2010/06/03/nosql-%d0%bf%d0%be%d0%b4%d1%85%d0%be%d0%b4%d1%8b-%d0%ba-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8e-%d1%82%d0%b8%d0%bf%d0%b8%d1%87%d0%bd%d1%8b%d1%85-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87/&title=NoSQL+-+%D0%BF%D0%BE%D0%B4%D1%85%D0%BE%D0%B4%D1%8B+%D0%BA+%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8E+%D1%82%D0%B8%D0%BF%D0%B8%D1%87%D0%BD%D1%8B%D1%85+%D0%B7%D0%B0%D0%B4%D0%B0%D1%87+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2010/06/03/nosql-%d0%bf%d0%be%d0%b4%d1%85%d0%be%d0%b4%d1%8b-%d0%ba-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8e-%d1%82%d0%b8%d0%bf%d0%b8%d1%87%d0%bd%d1%8b%d1%85-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2010/06/03/nosql-%d0%bf%d0%be%d0%b4%d1%85%d0%be%d0%b4%d1%8b-%d0%ba-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8e-%d1%82%d0%b8%d0%bf%d0%b8%d1%87%d0%bd%d1%8b%d1%85-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87/&t=NoSQL+-+%D0%BF%D0%BE%D0%B4%D1%85%D0%BE%D0%B4%D1%8B+%D0%BA+%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8E+%D1%82%D0%B8%D0%BF%D0%B8%D1%87%D0%BD%D1%8B%D1%85+%D0%B7%D0%B0%D0%B4%D0%B0%D1%87+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2010/06/03/nosql-%d0%bf%d0%be%d0%b4%d1%85%d0%be%d0%b4%d1%8b-%d0%ba-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8e-%d1%82%d0%b8%d0%bf%d0%b8%d1%87%d0%bd%d1%8b%d1%85-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2010/06/03/nosql-%d0%bf%d0%be%d0%b4%d1%85%d0%be%d0%b4%d1%8b-%d0%ba-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8e-%d1%82%d0%b8%d0%bf%d0%b8%d1%87%d0%bd%d1%8b%d1%85-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87/&title=NoSQL+-+%D0%BF%D0%BE%D0%B4%D1%85%D0%BE%D0%B4%D1%8B+%D0%BA+%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8E+%D1%82%D0%B8%D0%BF%D0%B8%D1%87%D0%BD%D1%8B%D1%85+%D0%B7%D0%B0%D0%B4%D0%B0%D1%87+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2010/06/03/nosql-%d0%bf%d0%be%d0%b4%d1%85%d0%be%d0%b4%d1%8b-%d0%ba-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8e-%d1%82%d0%b8%d0%bf%d0%b8%d1%87%d0%bd%d1%8b%d1%85-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87/&u_data[name]=NoSQL+-+%D0%BF%D0%BE%D0%B4%D1%85%D0%BE%D0%B4%D1%8B+%D0%BA+%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8E+%D1%82%D0%B8%D0%BF%D0%B8%D1%87%D0%BD%D1%8B%D1%85+%D0%B7%D0%B0%D0%B4%D0%B0%D1%87+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2010/06/03/nosql-%d0%bf%d0%be%d0%b4%d1%85%d0%be%d0%b4%d1%8b-%d0%ba-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8e-%d1%82%d0%b8%d0%bf%d0%b8%d1%87%d0%bd%d1%8b%d1%85-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87/&title=NoSQL+-+%D0%BF%D0%BE%D0%B4%D1%85%D0%BE%D0%B4%D1%8B+%D0%BA+%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8E+%D1%82%D0%B8%D0%BF%D0%B8%D1%87%D0%BD%D1%8B%D1%85+%D0%B7%D0%B0%D0%B4%D0%B0%D1%87+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>Related posts:<ol><li><a href='http://highload.com.ua/index.php/2009/04/27/keyvalue-%d0%ba%d0%bb%d1%8e%d1%87%d0%b7%d0%bd%d0%b0%d1%87%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b1%d0%b0%d0%b7%d1%8b-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85/' rel='bookmark' title='Permanent Link: Key=value (ключ=значение) базы данных'>Key=value (ключ=значение) базы данных</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2010/06/03/nosql-%d0%bf%d0%be%d0%b4%d1%85%d0%be%d0%b4%d1%8b-%d0%ba-%d1%80%d0%b5%d1%88%d0%b5%d0%bd%d0%b8%d1%8e-%d1%82%d0%b8%d0%bf%d0%b8%d1%87%d0%bd%d1%8b%d1%85-%d0%b7%d0%b0%d0%b4%d0%b0%d1%87/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Полнотекстовый поиск в MongoDB используя Sphinx</title>
		<link>http://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/</link>
		<comments>http://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/#comments</comments>
		<pubDate>Thu, 27 May 2010 11:07:28 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Tips and tricks]]></category>

		<category><![CDATA[mongo]]></category>

		<category><![CDATA[sphinx]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=1103</guid>
		<description><![CDATA[ Многие из тех, кто успел попробовать MongoDB в действии, столкнулись с трудностями с полнотекстовым поиском. Встроенный механизм полнотекстового поиска в MongoDB (его так можно назвать с большой натяжкой) не пригоден для реальных потребностей.
Основная проблема заключается в том, что sphinx не позволяет использовать буквенно-цифровые значения в качестве ID документов. Есть несколько вариантов решения этой проблемы.


Строим [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://highload.com.ua/wp-content/uploads/2010/05/sphinx.jpg" alt="sphinx" title="sphinx" width="200" height="51" class="alignleft size-full wp-image-1104" /> Многие из тех, кто успел попробовать <a href="http://highload.com.ua/index.php/tag/mongo/" >MongoDB</a> в действии, столкнулись с трудностями с полнотекстовым поиском. Встроенный механизм полнотекстового поиска в <a href="http://highload.com.ua/index.php/tag/mongo/" >MongoDB</a> (его так можно назвать с большой натяжкой) не пригоден для реальных потребностей.</p>
<p>Основная проблема заключается в том, что sphinx не позволяет использовать буквенно-цифровые значения в качестве ID документов. Есть несколько вариантов решения этой проблемы.<br />
<!--CCXK9FK4MEZY--><br />
<span id="more-1103"></span></p>
<h2>Строим индекс с помощью xmlpipe</h2>
<p>Поскольку в Sphinx пока нет реализации источника данных для mongo, то придется использовать XMLpipe для индексации:</p>
<pre>
source src_test {
    type = xmlpipe
    xmlpipe_command = php /home/golotyuk/www/mongosphinx/index.php
}

index test {
        morphology              = stem_enru
        charset_type            = utf-8
        source                  = src_test
        path                    = /var/lib/sphinxsearch/data/test
}
</pre>
<p>Реализация XML генератора может быть приблизительно такая:</p>
<pre>
&lt;?='&lt;?xml version="1.0" encoding="utf-8"?>&lt;sphinx:docset>'?>

&lt;sphinx:schema>
&lt;sphinx:field name="content"/>
&lt;/sphinx:schema>

&lt;?

$m = new Mongo();
$c = $m->test->documents;
$list = $c->find();

?>

&lt;? foreach ( $list as $document ) { ?>
&lt;sphinx:document id="&lt;?=$document['numeric_id']?>">
&lt;content>&lt;![CDATA[[&lt;?=$document['text']?>]]&gt;&lt;/content>
&lt;/sphinx:document>
&lt;? } ?>

&lt;/sphinx:docset>
</pre>
<p>Все предельно просто кроме одной проблемы - ID mongo документа представлен в буквенно-цифровом виде, чего не понимает сфинкс. Есть несколько подходов:</p>
<h2>Решение проблемы с ID документа</h2>
<h4>Пользовательский ID</h4>
<p>Первый вариант - хранить в каждом mongo-документе пользовательский (сгенерированный руками) цифровой ID отдельным свойством:</p>
<pre>
{
	"_id" : ObjectId("4bf2c7f38ead0e0d05070000"),
	"sid" : 7,
	"text" : "Много текста"
}
</pre>
<p>В этом случае свойство sid будет использоваться для индексации в качестве ID документа (в примере выше атрибут называется &#8220;numeric_id&#8221;).</p>
<p>Неудобство этого решения заключается в ручной реализации всех примитивных функций касательно идентификатора - проверка на уникальность, инкремент, выборка по новому идентификатору. Поэтому данное решение лучше подойдет для статичных данных (справочная документация), но несколько усложнит динамику (форумы и т.п.).</p>
<p>В качестве альтернативного решения можно использовать таблицы соответствий ID документа Mongo и ID документа Sphinx (например в MySQL). В этом случае не нужно будет руками реализовывать механизм автоинкремента, но придется использовать дополнительную СУБД.</p>
<h4>Выборка ID, как атрибута</h4>
<p>ID mongo-документа можно выбирать как атрибут при индексации. Это наиболее верное решение, но учитывая, что атрибут строчный, понадобится обновиться до версии <b>0.9.10</b> (на этот момент эта версия еще не в релизе).</p>
<p>В этом случае Вам просто придется генерировать уникальные ID для сфинкса (которые будут фактически бесполезными для Вас - их можно генерировать на этапе индексации), а mongo ID доставать как свойство. Схема индекса будет следующая:</p>
<pre>
&lt;sphinx:schema>
&lt;sphinx:field name="content"/>
&lt;sphinx:attr name="_id" type="string"/>
&lt;/sphinx:schema>
</pre>
<p>Как видно, id mongo-документа описан как строчный атрибут. Для генерации id документа sphinx можно использовать простой инкремент, например:</p>
<pre>
&lt;? $i = 0; foreach ( $list as $document ) { ?>
&lt;sphinx:document <b>id="&lt;?=$i + 1?>"</b>>
&lt;content>&lt;![CDATA[[&lt;?=$document['text']?>]]&gt;&lt;/content>
&lt;_id>&lt;?=$document['_id']?>&lt;/_id>
&lt;/sphinx:document>
&lt;? } ?>
</pre>
<p>В результате sphinx будет возвращать атрибут &#8220;_id&#8221;, в котором будет находится идентификатор документа Mongo.</p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/&title=%D0%9F%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+MongoDB+%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D1%8F+Sphinx+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/&title=%D0%9F%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+MongoDB+%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D1%8F+Sphinx+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/&title=%D0%9F%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+MongoDB+%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D1%8F+Sphinx+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/&t=%D0%9F%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+MongoDB+%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D1%8F+Sphinx+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/&title=%D0%9F%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+MongoDB+%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D1%8F+Sphinx+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/&u_data[name]=%D0%9F%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+MongoDB+%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D1%8F+Sphinx+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/&title=%D0%9F%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D0%B9+%D0%BF%D0%BE%D0%B8%D1%81%D0%BA+%D0%B2+MongoDB+%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D1%8F+Sphinx+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>Related posts:<ol><li><a href='http://highload.com.ua/index.php/2010/08/18/sphinx-rt-real-time-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d1%8b/' rel='bookmark' title='Permanent Link: Sphinx RT (real-time) индексы'>Sphinx RT (real-time) индексы</a></li><li><a href='http://highload.com.ua/index.php/2010/01/13/solr-%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%be%d1%82-apache-%d0%bd%d0%b0-%d0%be%d1%81%d0%bd%d0%be%d0%b2%d0%b5-lucene/' rel='bookmark' title='Permanent Link: Solr - полнотекстовый поиск от Apache (на основе Lucene)'>Solr - полнотекстовый поиск от Apache (на основе Lucene)</a></li><li><a href='http://highload.com.ua/index.php/2009/06/25/%d0%b4%d0%b5%d0%bb%d1%8c%d1%82%d0%b0-%d0%b8%d0%bd%d0%b4%d0%b5%d0%ba%d1%81-%d0%b2-sphinx/' rel='bookmark' title='Permanent Link: Дельта индекс в Sphinx'>Дельта индекс в Sphinx</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2010/05/27/%d0%bf%d0%be%d0%bb%d0%bd%d0%be%d1%82%d0%b5%d0%ba%d1%81%d1%82%d0%be%d0%b2%d1%8b%d0%b9-%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%b2-mongodb-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d1%8f-sphinx/feed/</wfw:commentRss>
		</item>
		<item>
		<title>memcache vs memcached - сравниваем клиенты для PHP</title>
		<link>http://highload.com.ua/index.php/2010/05/07/memcache-vs-memached-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%8b-%d0%b4%d0%bb%d1%8f-php/</link>
		<comments>http://highload.com.ua/index.php/2010/05/07/memcache-vs-memached-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%8b-%d0%b4%d0%bb%d1%8f-php/#comments</comments>
		<pubDate>Fri, 07 May 2010 14:46:49 +0000</pubDate>
		<dc:creator>Den Golotyuk</dc:creator>
		
		<category><![CDATA[Теория и практика]]></category>

		<category><![CDATA[memcached]]></category>

		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://highload.com.ua/?p=1074</guid>
		<description><![CDATA[
Какой клиент лучше использовать при разработке на PHP - php-memcached или php-memcache? Все зависит от того, какие особенности Вам нужны (неужели?). Давайте сравним в двух аспектах - функциональность и производительность.

Функциональность
Клиентская библиотека php-memcache была разработана еще в 2004 году и сегодня существует уже довольно стабильная версия, которая используется в 99.9% проектах (использующих сервер Memcache). Большим недостатком [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://highload.com.ua/wp-content/uploads/2010/05/performance.png" alt="performance" title="performance" width="126" height="75" class="alignleft size-full wp-image-1092" /></p>
<p>Какой клиент лучше использовать при разработке на PHP - php-memcache<strong style="color:red">d</strong> или php-memcache? Все зависит от того, какие особенности Вам нужны (неужели?). Давайте сравним в двух аспектах - функциональность и <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительность</a>.<br clear="all" /><br />
<span id="more-1074"></span></p>
<h2>Функциональность</h2>
<p>Клиентская библиотека <a href="http://pecl.php.net/package/memcache"><strong>php-memcache</strong></a> была разработана еще в 2004 году и сегодня существует уже довольно стабильная версия, которая используется в 99.9% проектах (использующих сервер Memcache). Большим недостатком этой библиотеки является ее ограниченные способности - она реализует только часть протокола мемкеша, и не позволяет использовать его дополнительные возможности (какие именно - чуть ниже).</p>
<p>Библиотека <a href="http://pecl.php.net/package/memcached"><strong>php-memcached</strong></a> была разработана сравнительно недавно, но уже успешно используется на некоторых крупных проектах (например, digg.com - из которого и вышла эта разработка). Самое главное ее преимущество - это полная реализация протокола, в том числе:</p>
<ul>
<li><a href="http://www.php.net/manual/en/memcached.cas.php">CAS</a> токены для версионирования ключей</li>
<li>Обратные вызовы (callbacks)</li>
<li>Метод getDelayed() позволяющий уменьшить время ожидания откладывая фактическое чтение ключей</li>
<li>Поддержка бинарного протокола</li>
<li>Возможность избежать сериализации используя <a href="http://github.com/phadej/igbinary">igbinary</a></li>
</ul>
<h2>Производительность</h2>
<p>Теперь давайте сравним <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительность</a> на практике.<br />
Для этого напишем небольшой скрипт, который делает одинаковые операции с обоими клиентами:</p>
<pre>
&lt;?

$ops = 10000;

$m = new Memcache();
$m->addServer('localhost');

$md = new Memcached();
$md->addServer('localhost', 11211);

echo "Test operations: {$ops}";
echo "&lt;h3>get test&lt;/h3>";

$s = microtime(true);
for ( $i = 0; $i &lt; $ops; $i++ ) $m->get( md5(rand(1000, 99999)) );
echo "Memcache: " . ($res['memcache']['set'] = microtime(true) - $s ) . "&lt;br />";

$s = microtime(true);
for ( $i = 0; $i &lt; $ops; $i++ ) $md->get( md5(rand(1000, 99999)) );
echo "Memcached: " . ($res['memcached']['set'] = microtime(true) - $s );

echo "&lt;h3>set test&lt;/h3>";

$s = microtime(true);
for ( $i = 0; $i &lt; $ops; $i++ ) $m->set(md5(rand(1000, 99999)), 2);
echo "Memcache: " . ($res['memcache']['get'] = microtime(true) - $s ) . "&lt;br />";

$s = microtime(true);
for ( $i = 0; $i &lt; $ops; $i++ ) $md->set(md5(rand(1000, 99999)), 2);
echo "Memcached: " . ($res['memcached']['get'] = microtime(true) - $s );

echo "&lt;h3>delete test&lt;/h3>";

$s = microtime(true);
for ( $i = 0; $i &lt; $ops; $i++ ) $m->delete(md5(rand(1000, 99999)));
echo "Memcache: " . ($res['memcache']['delete'] = microtime(true) - $s ) . "&lt;br />";

$s = microtime(true);
for ( $i = 0; $i &lt; $ops; $i++ ) $md->delete(md5(rand(1000, 99999)));
echo "Memcached: " . ($res['memcached']['delete'] = microtime(true) - $s );

echo "&lt;h3>combined test&lt;/h3>";

$s = microtime(true);
for ( $i = 0; $i &lt; $ops; $i++ )
{
	$key = md5(rand(1000, 99999));
	$m->set($key, 2);
	$m->get($key);
	$m->delete($key);
}
echo "Memcache: " . ($res['memcache']['combined'] = microtime(true) - $s ) . "&lt;br />";

$s = microtime(true);
for ( $i = 0; $i &lt; $ops; $i++ )
{
	$key = md5(rand(1000, 99999));
	$md->set($key, 2);
	$md->get($key);
	$md->delete($key);
}
echo "Memcached: " . ($res['memcached']['combined'] = microtime(true) - $s );
</pre>
<p>Как видно, скрипт просто выполняет основные операции сохранения, чтения и удаления ключей 10 тыс. раз и замерает их время для каждого клиента.</p>
<h4>Результаты работы теста</h4>
<p><img src="http://chart.apis.google.com/chart?cht=bvg&#038;chs=590x250&#038;chd=t:0.40687584877014,0.4399950504303,0.39915299415588,1.1763441562653|1.1071889400482,1.1130468845367,1.0788090229034,3.1984331607819&#038;chds=0,120&#038;chco=4d89f9,c6d9fd&#038;chbh=5&#038;chds=0,5&#038;chbh=48,5,48&#038;chxs=0,000000,0,0,_&#038;chxt=x,x&#038;chm=N,000000,0,,10|N,000000,1,,10&#038;chxl=1:|set|get|delete|combined&#038;chdl=memcache|memcached&#038;chdlp=bv" /></p>
<p>Как видно из графика, <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительность</a> клиента <strong>php-memcache</strong> почти втрое выше, чем <strong>php-memcached</strong>. Следует учесть, что показатели при работе с бинарным протоколом почти не отличалась по времени от ASCII протокола.</p>
<h3 style="color: red">Обновление</h3>
<p>Благодаря внимательному читателю этого блога удалось выяснить, что сильные отличия в показателях тестов связаны с конкретными версиями и настройками библиотек. Проверка на других платформах дает отличие в <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a> не более 10%.</p>
<p>В качестве вывода следует сказать, что клиент <strong>php-memcache</strong> лучше использовать, если функционала приложению полностью хватает (лучше, т.к. он быстрее). Если нужны расширенные возможности, то нужно использовать <strong>php-memcached</strong>. Но в этом случае нужно учесть понижение <a href="http://highload.com.ua/index.php/tag/%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D1%8C/" >производительности</a>.</p>
<p><em>Хотя важно заметить</em>: даже не смотря на трехкратное различие в скорости работы, операции общения с сервером Memcache обычно занимают доли процента от времени исполнения приложения. Различие в скорости работ библиотек может быть заметно только при массовой работе с кешом, или же на огромных объемах данных.</p>

<div class="zakladka"><noindex><a href="http://www.google.com/bookmarks/mark?op=add&bkmk=http://highload.com.ua/index.php/2010/05/07/memcache-vs-memached-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%8b-%d0%b4%d0%bb%d1%8f-php/&title=memcache+vs+memcached+-+%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC+%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D1%8B+%D0%B4%D0%BB%D1%8F+PHP+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/google.png" border="0" width="16" height="16" alt="Google Bookmarks" title="Google Bookmarks"></a></noindex> <noindex><a href="http://digg.com/submit?url=http://highload.com.ua/index.php/2010/05/07/memcache-vs-memached-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%8b-%d0%b4%d0%bb%d1%8f-php/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/digg.png" border="0" width="16" height="16" alt="Digg" title="Digg"></a></noindex> <noindex><a href="http://links.i.ua/add/?_rand=149669598http://highload.com.ua/index.php/2010/05/07/memcache-vs-memached-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%8b-%d0%b4%d0%bb%d1%8f-php/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ua.png" border="0" width="16" height="16" alt="I.ua" title="I.ua"></a></noindex> <noindex><a href="http://www.ru-marks.net/bookmarks.php/?action=addhttp://highload.com.ua/index.php/2010/05/07/memcache-vs-memached-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%8b-%d0%b4%d0%bb%d1%8f-php/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ru-marks.png" border="0" width="16" height="16" alt="Ru-marks" title="Ru-marks"></a></noindex> <noindex><a href="http://www.ruspace.ru/index.php?link=bookmark&action=bookmarkNewhttp://highload.com.ua/index.php/2010/05/07/memcache-vs-memached-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%8b-%d0%b4%d0%bb%d1%8f-php/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/ruspace.png" border="0" width="16" height="16" alt="Ruspace" title="Ruspace"></a></noindex> <noindex><a href="http://www.zakladok.net/add_link.php?folder_id=0http://highload.com.ua/index.php/2010/05/07/memcache-vs-memached-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%8b-%d0%b4%d0%bb%d1%8f-php/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/zakladok.png" border="0" width="16" height="16" alt="Zakladok.net" title="Zakladok.net"></a></noindex> <noindex><a href="http://reddit.com/submit?url=http://highload.com.ua/index.php/2010/05/07/memcache-vs-memached-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%8b-%d0%b4%d0%bb%d1%8f-php/&title=memcache+vs+memcached+-+%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC+%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D1%8B+%D0%B4%D0%BB%D1%8F+PHP+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/reddit.png" border="0" width="16" height="16" alt="Reddit" title="Reddit"></a></noindex> <noindex><a href="http://delicious.com/post?url=http://highload.com.ua/index.php/2010/05/07/memcache-vs-memached-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%8b-%d0%b4%d0%bb%d1%8f-php/&title=memcache+vs+memcached+-+%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC+%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D1%8B+%D0%B4%D0%BB%D1%8F+PHP+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/delicious.png" border="0" width="16" height="16" alt="delicious" title="delicious"></a></noindex> <noindex><a href="http://www.technorati.com/faves?add=http://highload.com.ua/index.php/2010/05/07/memcache-vs-memached-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%8b-%d0%b4%d0%bb%d1%8f-php/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/technorati.png" border="0" width="16" height="16" alt="Technorati" title="Technorati"></a></noindex> <noindex><a href="http://myweb2.search.yahoo.com/myresults/bookmarklet?u=http://highload.com.ua/index.php/2010/05/07/memcache-vs-memached-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%8b-%d0%b4%d0%bb%d1%8f-php/&t=memcache+vs+memcached+-+%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC+%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D1%8B+%D0%B4%D0%BB%D1%8F+PHP+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/yahoo.png" border="0" width="16" height="16" alt="Yahoo My Web" title="Yahoo My Web"></a></noindex> <noindex><a href="http://news2.ru/add_story.php?url=http://highload.com.ua/index.php/2010/05/07/memcache-vs-memached-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%8b-%d0%b4%d0%bb%d1%8f-php/" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/news2ru.png" border="0" width="16" height="16" alt="News2.ru" title="News2.ru"></a></noindex> <noindex><a href="http://www.bobrdobr.ru/addext.html?url=http://highload.com.ua/index.php/2010/05/07/memcache-vs-memached-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%8b-%d0%b4%d0%bb%d1%8f-php/&title=memcache+vs+memcached+-+%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC+%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D1%8B+%D0%B4%D0%BB%D1%8F+PHP+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/bobrdobr.png" border="0" width="16" height="16" alt="БобрДобр.ru" title="БобрДобр.ru"></a></noindex> <noindex><a href="http://memori.ru/link/?sm=1&u_data[url]=http://highload.com.ua/index.php/2010/05/07/memcache-vs-memached-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%8b-%d0%b4%d0%bb%d1%8f-php/&u_data[name]=memcache+vs+memcached+-+%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC+%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D1%8B+%D0%B4%D0%BB%D1%8F+PHP+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/memori.png" border="0" width="16" height="16" alt="Memori.ru" title="Memori.ru"></a></noindex> <noindex><a href="http://www.rucity.com/bookmarks.php?action=add&address=http://highload.com.ua/index.php/2010/05/07/memcache-vs-memached-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%8b-%d0%b4%d0%bb%d1%8f-php/&title=memcache+vs+memcached+-+%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC+%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D1%8B+%D0%B4%D0%BB%D1%8F+PHP+-+Highload+Web" rel="nofollow" target="_blank"><img src="http://highload.com.ua/wp-content/plugins/zakladka/images/rucity.png" border="0" width="16" height="16" alt="rucity.com" title="rucity.com"></a></noindex> </div>


<p>Related posts:<ol><li><a href='http://highload.com.ua/index.php/2009/08/05/memcache-multi-get-%d0%b7%d0%b0%d1%87%d0%b5%d0%bc/' rel='bookmark' title='Permanent Link: Memcached Multi-Get, зачем?'>Memcached Multi-Get, зачем?</a></li><li><a href='http://highload.com.ua/index.php/2009/11/18/memcached-nastroika-pod-malye-objecti/' rel='bookmark' title='Permanent Link: Memcached - настройка под малые объекты'>Memcached - настройка под малые объекты</a></li><li><a href='http://highload.com.ua/index.php/2010/04/06/nginx-memcached-ssi-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1%86-%d0%b8-%d0%b1%d0%bb%d0%be%d0%ba%d0%be%d0%b2-partials/' rel='bookmark' title='Permanent Link: Nginx + Memcached + SSI - кеширование страниц и блоков (partials)'>Nginx + Memcached + SSI - кеширование страниц и блоков (partials)</a></li></ol></p>]]></content:encoded>
			<wfw:commentRss>http://highload.com.ua/index.php/2010/05/07/memcache-vs-memached-%d1%81%d1%80%d0%b0%d0%b2%d0%bd%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d0%ba%d0%bb%d0%b8%d0%b5%d0%bd%d1%82%d1%8b-%d0%b4%d0%bb%d1%8f-php/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 3.000 seconds -->
<!-- Cached page served by WP-Cache -->

