<?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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Просто про веб технологии &#187; Performance</title>
	<atom:link href="http://pro100pro.com/category/complete_code/performance/feed" rel="self" type="application/rss+xml" />
	<link>http://pro100pro.com</link>
	<description>Про PHP, MySQL, Sphinx и Zend Framework, про архитектуру и производителность, про высокие нагрузки и масштабирование</description>
	<lastBuildDate>Thu, 13 Oct 2011 12:58:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Увеличиваем производительность Sphinx BuildExcerpts</title>
		<link>http://pro100pro.com/uvelichivaem-proizvoditelnost-sphinx-buildexcerpts</link>
		<comments>http://pro100pro.com/uvelichivaem-proizvoditelnost-sphinx-buildexcerpts#comments</comments>
		<pubDate>Sun, 07 Aug 2011 09:41:04 +0000</pubDate>
		<dc:creator>Yaroslav Vorozhko</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Sphinx Search]]></category>
		<category><![CDATA[Tips And Tricks]]></category>
		<category><![CDATA[Search excerpts]]></category>

		<guid isPermaLink="false">http://pro100pro.com/?p=568</guid>
		<description><![CDATA[English version of this post. Начиная с версии 2.0.1 в Sphinx появилась возможность параллельного построения поисковых сниппетов. Под параллельным построением имеется ввиду, что процесс обработки массива текста предназначенного для построения сниппетов будет распределен по нескольким CPU. Приведенная ниже реализация лучше всего подойдет системам в которых требуется генерировать сниппеты для сотен мегабайт текста. Для распараллеливания процессов [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ivinco.com/blog/high-performance-buildexcerpts-with-sphinx-search/" title="High performance BuildExcerpts() with Sphinx Search" target="_blank">English version</a> of this post. </p>
<p>Начиная с версии 2.0.1 в Sphinx появилась возможность параллельного построения поисковых сниппетов. Под параллельным построением имеется ввиду, что процесс обработки массива текста предназначенного для построения сниппетов будет распределен по нескольким CPU.  Приведенная ниже реализация лучше всего подойдет системам в которых требуется генерировать сниппеты для сотен мегабайт текста.</p>
<p>Для распараллеливания процессов в Sphinx предусмотрена опция dist_threads, которая указывает searchd на сколько CPUs разбивать задачу.  dist_threads используется как для обработки поисковых запросов в распределенных индексах, так и для обработки сниппетов, которые мы рассмотрим ниже.</p>
<p>Рассмотрим функцию SphinxAPI BuildExcerpt. По умолчанию функция BuildExcerpt в качестве первого параметра принимает массив текста для обработки,<br />
но к сожалению такой вызов функции не использует параллельную обработку. </p>
<p>Но, начиная с версии 2.0.1, для BuildExcerpt был разработана новая опция load_files. load_files указывает Sphinx, что первый параметр функции BuildExcerpt должен содержать имена файлов, в которых должен находиться текст для обработки. Опция load_files совместно с опцией dist_threads позволяет Sphinx распаралеливать процесс построения сниппетов.</p>
<p>К сожалению у данной реализации есть узкое место - это необходимость использовать файловую систему.  Так как, прежде чем генерировать сниппеты на основе файлов, надо эти файлы создать, а для жестких дисков это достаточно медленная операция.  Поэтому, правильное решение, это создавать файлы в памяти, т.к. запись в память происходит в тысячи раз быстрее, чем на жесткий диск.</p>
<p>Для создания файлов в оперативной памяти в ядро Linux начиная с версии 2.4. включена файловой системой tmpfs, который мы и воспользуемся. </p>
<h3>Файловая система</h3>
<p>Для этого создадим директорию будущей системы и смонтируем ее.</p>
<div class="igBar"><span id="lcode-4"><a href="#" onclick="javascript:showPlainTxt('code-4'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-4">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mkdir /space</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">mount -t tmpfs -o size=1G,nr_inodes=10k,mode=<span style="color:#800000;color:#800000;">0700</span> tmpfs /space </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>В данном примере права на запись будут только у владельца директории /space, а максимальный размер файловой системы будет установлен в 1Gb.</p>
<h3>Модифицируем BuildExcerpts</h3>
<div class="igBar"><span id="lcode-5"><a href="#" onclick="javascript:showPlainTxt('code-5'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-5">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">function buildExcerptFile<span style="color:#006600; font-weight:bold;">&#40;</span>$documents, $options = array<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; foreach<span style="color:#006600; font-weight:bold;">&#40;</span>$documents as $doc<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $file = <span style="color:#CC0000;">"/space/"</span>.<span style="color:#CC0000;">'snip_'</span>.<span style="">md5</span><span style="color:#006600; font-weight:bold;">&#40;</span>$doc<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#CC0000;">'_'</span>.<span style="">time</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file_put_contents<span style="color:#006600; font-weight:bold;">&#40;</span>$file, $doc<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $files<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span> = $file;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; $client = new SphinxClient<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; $client-&gt;<span style="">setServer</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">'localhost'</span>, <span style="color:#800000;color:#800000;">9312</span><span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; $res = $client-&gt;<span style="">BuildExcerpts</span><span style="color:#006600; font-weight:bold;">&#40;</span> $files, <span style="color:#CC0000;">'index'</span>, $keywords,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; array<span style="color:#006600; font-weight:bold;">&#40;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#CC0000;">'around'</span>=&gt;<span style="color:#800000;color:#800000;">10</span>,</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#CC0000;">'limit'</span> =&gt; <span style="color:#800000;color:#800000;">300</span>,</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#CC0000;">'load_files'</span> =&gt; <span style="color:#800000;color:#800000;">1</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; foreach<span style="color:#006600; font-weight:bold;">&#40;</span>$files as $file<span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; unlink<span style="color:#006600; font-weight:bold;">&#40;</span>$file<span style="color:#006600; font-weight:bold;">&#41;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; return $res;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>Функция работает в три этапа: </p>
<ul>
<li>Первый. Записываем все документы в файлы, причем имена файлов выбираются так, чтоб не получилось коллизий.</li>
<li>Второе. Вызываем функцию Sphinx BuildExcerpt, первым параметром передаем массив файлов вместо массива текста.  А в третьем параметре указываем опцию load_files = 1</li>
<li>Третий. Удаляем созданные файлы для очистки памяти.</li>
</ul>
<h3>Sphinx.conf</h3>
<p>В разделе searchd добавляем следующую строку:</p>
<div class="igBar"><span id="lcode-6"><a href="#" onclick="javascript:showPlainTxt('code-6'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">CODE:</span>
<div id="code-6">
<div class="code">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">dist_threads = <span style="color:#800000;color:#800000;">2</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
dist_thread лучше делать равным количеству CPU в системе.</p>
<p>На моих тестовых данных, данная реализация работает в два раза быстрее «стандартного» вызова BuildExcerpts на системе с двумя CPU. Средний размер документа 1-3 Mb, количество документов для одной было равным 100, т.е. один вызов обрабатывал в среднем 200 Mb текста.</p>
<hr />
<p><small>© Yaroslav Vorozhko  for <a href="http://pro100pro.com">Просто про веб технологии</a>, 2011. |
<a href="http://pro100pro.com/uvelichivaem-proizvoditelnost-sphinx-buildexcerpts">Permalink</a> |
<a href="http://pro100pro.com/uvelichivaem-proizvoditelnost-sphinx-buildexcerpts#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://pro100pro.com/uvelichivaem-proizvoditelnost-sphinx-buildexcerpts&title=Увеличиваем производительность Sphinx BuildExcerpts">del.icio.us</a>
<br/>
Post tags: <a href="http://pro100pro.com/tag/performance" rel="tag">Performance</a>, <a href="http://pro100pro.com/tag/search-excerpts" rel="tag">Search excerpts</a>, <a href="http://pro100pro.com/tag/sphinx-search" rel="tag">Sphinx Search</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://pro100pro.com/uvelichivaem-proizvoditelnost-sphinx-buildexcerpts/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Как увеличить производительность Sphinx Real Time индексов в 5-10 раз?</title>
		<link>http://pro100pro.com/kak-uvelichit-proizvoditelnost-sphinx-real-time-indeksov-v-5-10-raz</link>
		<comments>http://pro100pro.com/kak-uvelichit-proizvoditelnost-sphinx-real-time-indeksov-v-5-10-raz#comments</comments>
		<pubDate>Fri, 25 Mar 2011 14:05:05 +0000</pubDate>
		<dc:creator>Yaroslav Vorozhko</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Sphinx Search]]></category>

		<guid isPermaLink="false">http://pro100pro.com/?p=556</guid>
		<description><![CDATA[На презентации доклада о Sphinx Real Time индексах на HighLoad++  я показал RT индексы не с лучшей стороны. По сути в докладе я показал, что RT индексы уступают обычным индексам минимум в 5 раз по производительности.

Соответсвенно обсуждение этой проблемы подтолкнуло меня провести эксперименты в поисках оптимальной настройки Sphinx для RT индексов. Задача была обойти или хотя бы достичь производительности обычных индексов.]]></description>
			<content:encoded><![CDATA[<p>На презентации доклада о Sphinx Real Time индексах на HighLoad++  я показал RT индексы не с лучшей стороны. По сути в докладе я показал, что RT индексы уступают обычным индексам минимум в 5 раз по производительности.</p>
<p>Соответсвенно обсуждение этой проблемы подтолкнуло меня провести эксперименты в поисках оптимальной настройки Sphinx для RT индексов. Задача была обойти или хотя бы достичь производительности обычных индексов.</p>
<p>Результаты и подробности исследования читайте на <a title="How to speed up Sphinx Real Time indexes up to 5-10 times" href="http://www.ivinco.com/blog/how-to-speed-up-sphinx-real-time-indexes-up-to-5-10-times/">блоге компании Ivinco целиком посвященному Sphinx Search</a>.</p>
<hr />
<p><small>© Yaroslav Vorozhko  for <a href="http://pro100pro.com">Просто про веб технологии</a>, 2011. |
<a href="http://pro100pro.com/kak-uvelichit-proizvoditelnost-sphinx-real-time-indeksov-v-5-10-raz">Permalink</a> |
<a href="http://pro100pro.com/kak-uvelichit-proizvoditelnost-sphinx-real-time-indeksov-v-5-10-raz#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://pro100pro.com/kak-uvelichit-proizvoditelnost-sphinx-real-time-indeksov-v-5-10-raz&title=Как увеличить производительность Sphinx Real Time индексов в 5-10 раз?">del.icio.us</a>
<br/>
Post tags: <br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://pro100pro.com/kak-uvelichit-proizvoditelnost-sphinx-real-time-indeksov-v-5-10-raz/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ускоряем PHP с HipHop</title>
		<link>http://pro100pro.com/uskoryaem-php-s-hiphop</link>
		<comments>http://pro100pro.com/uskoryaem-php-s-hiphop#comments</comments>
		<pubDate>Thu, 04 Feb 2010 10:09:01 +0000</pubDate>
		<dc:creator>Yaroslav Vorozhko</dc:creator>
				<category><![CDATA[HipHop]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[C plus plus]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Zend Engine]]></category>

		<guid isPermaLink="false">http://pro100pro.com/?p=417</guid>
		<description><![CDATA[Сегодня Facebook анонсировал релиз HipHop. Коротко, что такое HipHop для PHP: HipHop - это компилятор кода PHP в C++. Т.е. он преобразует PHP код в C++ код для дальнейшей компиляции. Это не другой язык. И это не компилятор времени исполнения (JIT). HipHop будет выпущен Facebook под opensource лицензией, под такой же как и основной код [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://developers.facebook.com/news.php?blog=1&amp;story=358">Сегодня Facebook анонсировал релиз HipHop</a>.</p>
<p>Коротко, что такое HipHop для PHP:</p>
<ul>
<li>HipHop - это компилятор кода PHP в C++. Т.е. он преобразует PHP код в C++ код для дальнейшей компиляции. Это не другой язык. И это не компилятор времени исполнения (JIT).</li>
<li>HipHop будет выпущен Facebook под opensource лицензией, под такой же как и основной код PHP. Facebook возлагает надежды, что разработчики улучшать HipHop и расширят его функциональность, таким образом HipHop сможет заменить больший набор функций PHP.</li>
<li>HipHop был одним из проектов в Facebook по улучшению его производительности. Все таки Facebook, второй сайт по объему траффика в интерент и в основном построенный на PHP. HipHop запущен на большинстве LAMP PHP серверах Facebook и в среднем улучшил производительность этих серверов в два раза.</li>
<li>HipHop достигает этого, путем исследования вашего PHP приложения и на его основе строить C++ проект. C++ проект потом компилируется и запускается на собственном веб серврере. Это дает возможность исключить PHP Zend engine и Apache из цепочки.</li>
<li>Учитывая что, некоторые возможности PHP не поддерживаются. Также, дополнения к PHP написанные на C, должны быть переписаны в HipHop C++ дополнения.</li>
<li>Преимущества в скороости HipHop достигаются благодаря статическому анализу, который парсит ваш PHP код ищя пути преобразования динамических частей в статические.<br />
Учитывая это, ваше улучшение производительности, может сильно варьроваться - более структурированный код получить наибольший прирост в производительности.</li>
</ul>
<p>Что значит HipHop для вас:</p>
<ul>
<li>Если ваш проект использует sharing хостинг - то <strong>ничего</strong>.</li>
<li>Если ваш проект использует 2 или менее серверов - то <strong>ничего</strong>.</li>
<li>Если у вас нет выделенного development и deployment окружения и у вас нет разработчика знающего C++ - то <strong>ничего</strong>.</li>
<li>Если вы разработчик open source приложения - то <strong>немного</strong>.</li>
<li>Если вы shared хостинг компания - то <strong>немного</strong>.</li>
<li>Если PHP не bottleneck вашего приложения - то <strong>пока еще ничего</strong>.</li>
<li>Если ваше приложения использует много серверов, и в основном на них работает PHP, а также у вас есть все исходники PHP кода, у вас есть немного знаний C/C++, тогджа ответ <strong>возможно</strong>.</li>
<li>Если вы разрабатываете php framework, то ответ <strong>иногда</strong>.</li>
<li>Если у вас есть сильно-связанные части архитектуры, которые удовлетворяют требованиям выше и эти части слабо связаны (через API) с остальной системой, то ответ <strong>много</strong> <strong>что</strong>.</li>
<li>Если вы обдумываете какой язык выбрать для реализации вашей системы, то ответ <strong>очень много</strong>.</li>
<li>Если вы обдумываете аргумент, переписать весь сайт на другой язык, то <strong>вы потеряли свой аргумент</strong>.</li>
</ul>
<p>Есть очень много языковы возможностей, хороших или плохих, которые PHP должен поддерживать, а HipHop нет. Потому как HipHop уникальное решение, он <strong>никгода</strong> не заменит Zend Engine.</p>
<p>Статья является частичным переводом статьи Terry Chay <a href="http://terrychay.com/article/hiphop-for-faster-php.shtml">Faster PHP fo shizzle—HipHop for PHP</a></p>
<hr />
<p><small>© Yaroslav Vorozhko  for <a href="http://pro100pro.com">Просто про веб технологии</a>, 2010. |
<a href="http://pro100pro.com/uskoryaem-php-s-hiphop">Permalink</a> |
<a href="http://pro100pro.com/uskoryaem-php-s-hiphop#comments">One comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://pro100pro.com/uskoryaem-php-s-hiphop&title=Ускоряем PHP с HipHop">del.icio.us</a>
<br/>
Post tags: <a href="http://pro100pro.com/tag/c-plus-plus" rel="tag">C plus plus</a>, <a href="http://pro100pro.com/tag/facebook" rel="tag">Facebook</a>, <a href="http://pro100pro.com/tag/hiphop" rel="tag">HipHop</a>, <a href="http://pro100pro.com/tag/performance" rel="tag">Performance</a>, <a href="http://pro100pro.com/tag/php" rel="tag">PHP</a>, <a href="http://pro100pro.com/tag/zend-engine" rel="tag">Zend Engine</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://pro100pro.com/uskoryaem-php-s-hiphop/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Мифы PHP оптимизации</title>
		<link>http://pro100pro.com/mifi-php-optimizacii</link>
		<comments>http://pro100pro.com/mifi-php-optimizacii#comments</comments>
		<pubDate>Tue, 11 Aug 2009 08:55:48 +0000</pubDate>
		<dc:creator>Yaroslav Vorozhko</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[myths]]></category>
		<category><![CDATA[optimization]]></category>
		<category><![CDATA[php4]]></category>
		<category><![CDATA[PHP5]]></category>

		<guid isPermaLink="false">http://pro100pro.com/?p=224</guid>
		<description><![CDATA[Одни оптимизации полезны, другие просто пустая трата времени. Вот пример наиболее частых заблуждений: а. echo быстрее чем print Echo может быть быстрее, так как оно не возвращает значение. Но, в моем бенчмарке преимущество было очень мало. А, в некоторых ситуациях print будет быстрее echo, например когда ob_start включен. б. меньше комментариев ускоряет код Если вы [...]]]></description>
			<content:encoded><![CDATA[<p>Одни оптимизации полезны, другие просто пустая трата времени.<br />
Вот пример наиболее частых заблуждений:</p>
<p><strong>а. echo быстрее чем print</strong><br />
Echo может быть быстрее, так как оно не возвращает значение. Но, в моем бенчмарке преимущество было очень мало. А, в некоторых ситуациях print будет быстрее echo, например когда ob_start включен.</p>
<p><strong>б. меньше комментариев ускоряет код</strong><br />
Если вы используете кеширование opcodes, то комментарии уже игнорируются. Этот миф идет от PHP3, когда каждая строка PHP интерпретировалась во время исполнения.</p>
<p><strong>в. 'var='.$var быстрее чем, "var=$var"</strong><br />
Так было до версии 4.2 и было исправлено в версии 4.3.</p>
<p><strong>Ускоряет ли код использование ссылок?</strong><br />
Ссылки не дают преимущества строковым, целым и другим базовым типам данных.<br />
Например:</p>
<div class="igBar"><span id="lphp-11"><a href="#" onclick="javascript:showPlainTxt('php-11'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-11">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">function</span> TestRef<span style="color:#006600; font-weight:bold;">&#40;</span>&amp;<span style="color:#0000FF;">$a</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$b</span> = <span style="color:#0000FF;">$a</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$c</span> = <span style="color:#0000FF;">$a</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$one</span> = <span style="color:#CC66CC;color:#800000;">1</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ProcessArrayRef<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$one</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
И тот же самый код без ссылки.</p>
<div class="igBar"><span id="lphp-12"><a href="#" onclick="javascript:showPlainTxt('php-12'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-12">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">function</span> TestNoRef<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$a</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$b</span> = <span style="color:#0000FF;">$a</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$c</span> = <span style="color:#0000FF;">$a</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$one</span> = <span style="color:#CC66CC;color:#800000;">1</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">ProcessArrayNoRef<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$one</span><span style="color:#006600; font-weight:bold;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
PHP не создает дубликат переменной "отправленной по значению", вместо этого он использует внутренних высокоскоростной подсчет ссылок. Поэтому в TestRef(), $b и $c будут дольше устанавливаться, так как надо вести "трэкинг" ссылок, в то время как в TestNoRef(), $b и $c сразу будут ссылаться на исходное значение $a, а значение счетчика ссылок будет инкрементировано.<br />
В сравнении, функции которые принимают массивы и объекты, работают быстрее тех, которых принимают ссылки. Потому что, массивы и объекты не используют подсчет ссылок, а используется оригинальное значение переданное в параметре.<br />
Например:</p>
<div class="igBar"><span id="lphp-13"><a href="#" onclick="javascript:showPlainTxt('php-13'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-13">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">function</span> ObjRef<span style="color:#006600; font-weight:bold;">&#40;</span>&amp;<span style="color:#0000FF;">$o</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$a</span> =<span style="color:#0000FF;">$o</span>-&gt;<span style="color:#006600;">name</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
медленнее чем:</p>
<div class="igBar"><span id="lphp-14"><a href="#" onclick="javascript:showPlainTxt('php-14'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">PHP:</span>
<div id="php-14">
<div class="php">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#000000; font-weight:bold;">function</span> ObjRef<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF;">$o</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#0000FF;">$a</span> = <span style="color:#0000FF;">$o</span>-&gt;<span style="color:#006600;">name</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#006600; font-weight:bold;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p>
Примечание: в PHP5 все объекты передаются по ссылке, и нет необходимости устанавливать знак '&#038;' в списке параметров. Производительность работы с объектами в PHP5 значительно выше, чем в php4.</p>
<hr />
<p><small>© Yaroslav Vorozhko  for <a href="http://pro100pro.com">Просто про веб технологии</a>, 2009. |
<a href="http://pro100pro.com/mifi-php-optimizacii">Permalink</a> |
<a href="http://pro100pro.com/mifi-php-optimizacii#comments">No comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://pro100pro.com/mifi-php-optimizacii&title=Мифы PHP оптимизации">del.icio.us</a>
<br/>
Post tags: <a href="http://pro100pro.com/tag/myths" rel="tag">myths</a>, <a href="http://pro100pro.com/tag/optimization" rel="tag">optimization</a>, <a href="http://pro100pro.com/tag/php" rel="tag">PHP</a>, <a href="http://pro100pro.com/tag/php4" rel="tag">php4</a>, <a href="http://pro100pro.com/tag/php5" rel="tag">PHP5</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://pro100pro.com/mifi-php-optimizacii/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XtraDB новый Storage Engine от Percona</title>
		<link>http://pro100pro.com/xtradb-novyi-storage-engine-percona</link>
		<comments>http://pro100pro.com/xtradb-novyi-storage-engine-percona#comments</comments>
		<pubDate>Tue, 23 Dec 2008 12:17:02 +0000</pubDate>
		<dc:creator>Yaroslav Vorozhko</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[Percona]]></category>
		<category><![CDATA[XtraDB]]></category>

		<guid isPermaLink="false">http://pro100pro.com/?p=136</guid>
		<description><![CDATA[Новый движок XtraDB был выпущен Percona как замена стандартного InnoDB.
Percona XtraDB включает всю InnoDB ACID-совместимую архитектуру и расширенную MVCC архитектуру, добавлены новые возможности, более тюнингована, более информативна, более масштабируема на мульти-процессорных системах, и с улучшенной системой использования оперативной памяти.]]></description>
			<content:encoded><![CDATA[<p>Новый движок <strong>XtraDB </strong>был выпущен Percona как замена стандартного InnoDB.</p>
<p>XtraDB на 100% совместим с InnoDB, поэтому вы можете использовать его как полную замену InnoDB. XtraDB разрабатывался для улучшения масштабируемости на современном железе, а также включает в себя множество других возможностей и патчей оптимизированных для высоко нагруженных систем.</p>
<p><strong>Percona XtraDB</strong> включает всю InnoDB ACID-совместимую архитектуру и расширенную MVCC архитектуру, добавлены новые возможности, более тюнингована, более информативна, более масштабируема на мульти-процессорных системах, и с улучшенной системой использования оперативной памяти.</p>
<p>Что нового в этом движке? Вот список улучшений:</p>
<ul>
<li><strong>INFORMATION_SCHEMA.XTRADB_ENHANCEMENTS</strong>. Эта таблица содержит информацию про различия XtraDb и той же версии InnoDb.</li>
<li><strong>Улучшения в SHOW INNODB STATUS</strong>.</li>
<li><strong>Улучшения в </strong><strong>InnoDB IO.</strong></li>
<li><strong>InnoDB RW-lock fixes.</strong> Улучшена масштабируемость для систем с 8+ ядер.</li>
<li><strong>Buffer pool fixes</strong></li>
<li><strong>innodb_buffer_pool_pages</strong></li>
</ul>
<p>В общем это сейчас тунингованый InnoDB, только OpenSource. Для комьюнити публичный OpenSource считаю большим плюсом.</p>
<p>Percona сделала и продолжает делать отличную работу по развитию и поддержке MySQL.</p>
<p>Думаю Percona это новая MySQL и уже в скором будущем мы не раз в этом убедимся. :)</p>
<p><a title="Оффициальный анонс XtraDb" href="http://www.mysqlperformanceblog.com/2008/12/16/announcing-percona-xtradb-storage-engine-a-drop-in-replacement-for-standard-innodb/">Оффициальный анонс XtraDB</a></p>
<p><a title="Тесты производительность ввода вывода XtraDB" href="http://www.mysqlperformanceblog.com/2008/12/18/xtradb-benchmarks-15x-gain/">Тесты производительность ввода вывода XtraDB</a></p>
<p><a title="Тесты производительность и нагрузки CPU XtraDB" href="http://www.mysqlperformanceblog.com/2008/12/18/xtradb-in-cpu-bound-benchmark/">Тесты производительности и нагрузки CPU XtraDb</a></p>
<p>Документация по XtraDB <a title="XtraDB документация" href="http://www.percona.com/docs/wiki/percona-xtradb:start">http://www.percona.com/docs/wiki/percona-xtradb:start</a></p>
<p>Исходные коды на XtraDB <a title="XtraDB исходные коды" href="https://launchpad.net/percona-xtradb">https://launchpad.net/percona-xtradb</a></p>
<p>Обсуждения XtraDB и остальных разработок Perocona <a title="Percona Dev groups" href="http://groups.google.com/group/percona-dev">http://groups.google.com/group/percona-dev</a></p>
<hr />
<p><small>© Yaroslav Vorozhko  for <a href="http://pro100pro.com">Просто про веб технологии</a>, 2008. |
<a href="http://pro100pro.com/xtradb-novyi-storage-engine-percona">Permalink</a> |
<a href="http://pro100pro.com/xtradb-novyi-storage-engine-percona#comments">One comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://pro100pro.com/xtradb-novyi-storage-engine-percona&title=XtraDB новый Storage Engine от Percona">del.icio.us</a>
<br/>
Post tags: <a href="http://pro100pro.com/tag/mysql" rel="tag">MySQL</a>, <a href="http://pro100pro.com/tag/opensource" rel="tag">OpenSource</a>, <a href="http://pro100pro.com/tag/percona" rel="tag">Percona</a>, <a href="http://pro100pro.com/tag/performance" rel="tag">Performance</a>, <a href="http://pro100pro.com/tag/xtradb" rel="tag">XtraDB</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://pro100pro.com/xtradb-novyi-storage-engine-percona/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MySQL Row Format Tuning</title>
		<link>http://pro100pro.com/mysql-row-format-tuning</link>
		<comments>http://pro100pro.com/mysql-row-format-tuning#comments</comments>
		<pubDate>Tue, 18 Mar 2008 09:15:21 +0000</pubDate>
		<dc:creator>Yaroslav Vorozhko</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[blob]]></category>
		<category><![CDATA[char]]></category>
		<category><![CDATA[row format]]></category>
		<category><![CDATA[text]]></category>
		<category><![CDATA[tuning]]></category>
		<category><![CDATA[varchar]]></category>
		<category><![CDATA[динамический формат]]></category>
		<category><![CDATA[кеширование]]></category>
		<category><![CDATA[обновление]]></category>
		<category><![CDATA[производительность]]></category>
		<category><![CDATA[скорость]]></category>

		<guid isPermaLink="false">http://pro100pro.com/mysql-row-format-tuning</guid>
		<description><![CDATA[При создании или модифицировании таблиц используя MyISAM, вы можете запросить MySQL хранить строки в фиксированном или динамическом формате. Если таблица не содержит BLOB и TEXT полей, то фиксированный формат выбирается по умолчанию, который автоматически конвертирует VARCHAR в CHAR. Иначе если выбрать динамический формат, то MySQL конвертирует все колонки из типа CHAR в VARCHAR. 

Для MySQL, фиксированный формат легче в доступе, кешировании и обновлении информации. Также этот формат менее подвержен порче данных. Если дисковое пространство не является критическим, то фиксированный формат будет лучшим выбором.]]></description>
			<content:encoded><![CDATA[<p>При создании или модифицировании таблиц используя MyISAM, вы можете запросить MySQL хранить строки в фиксированном или динамическом формате. Если таблица не содержит BLOB и TEXT полей, то фиксированный формат выбирается по умолчанию, который автоматически конвертирует VARCHAR в CHAR. Иначе, если выбрать динамический формат, то MySQL конвертирует все колонки из типа CHAR в VARCHAR. </p>
<p>Для MySQL, фиксированный формат легче в доступе, кешировании и обновлении информации. Также этот формат менее подвержен порче данных. Если дисковое пространство не является критическим, то фиксированный формат будет хорошим выбором.</p>
<p>Динамический формат использует меньше дискового пространства, но более подвержен риску фрагментации и/или порче данных. </p>
<p>Но давайте сначала посмотрим, на тесты и потом сделаем окончательное заключение.</p>
<p>(...)<br/>Read the rest of <a href="http://pro100pro.com/mysql-row-format-tuning">MySQL Row Format Tuning</a> (291 words)</p>
<hr />
<p><small>© Yaroslav Vorozhko  for <a href="http://pro100pro.com">Просто про веб технологии</a>, 2008. |
<a href="http://pro100pro.com/mysql-row-format-tuning">Permalink</a> |
<a href="http://pro100pro.com/mysql-row-format-tuning#comments">One comment</a> |
Add to
<a href="http://del.icio.us/post?url=http://pro100pro.com/mysql-row-format-tuning&title=MySQL Row Format Tuning">del.icio.us</a>
<br/>
Post tags: <a href="http://pro100pro.com/tag/blob" rel="tag">blob</a>, <a href="http://pro100pro.com/tag/char" rel="tag">char</a>, <a href="http://pro100pro.com/tag/mysql" rel="tag">MySQL</a>, <a href="http://pro100pro.com/tag/row-format" rel="tag">row format</a>, <a href="http://pro100pro.com/tag/text" rel="tag">text</a>, <a href="http://pro100pro.com/tag/tuning" rel="tag">tuning</a>, <a href="http://pro100pro.com/tag/varchar" rel="tag">varchar</a>, <a href="http://pro100pro.com/tag/dinamicheskiy-format" rel="tag">динамический формат</a>, <a href="http://pro100pro.com/tag/keshirovanie" rel="tag">кеширование</a>, <a href="http://pro100pro.com/tag/obnovlenie" rel="tag">обновление</a>, <a href="http://pro100pro.com/tag/proizvoditelnost" rel="tag">производительность</a>, <a href="http://pro100pro.com/tag/skorost" rel="tag">скорость</a><br/>
</small></p>]]></content:encoded>
			<wfw:commentRss>http://pro100pro.com/mysql-row-format-tuning/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

