<?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>Piotr Sikora (ViruS) &#187; Benchmark</title>
	<atom:link href="http://blog.piotrsikora.pl/temat/benchmark/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.piotrsikora.pl</link>
	<description>Jeszcze jeden tech blog</description>
	<lastBuildDate>Sat, 21 Apr 2012 12:30:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Sphinx benchmark v0.2</title>
		<link>http://blog.piotrsikora.pl/8/sphinx-benchmark-v02</link>
		<comments>http://blog.piotrsikora.pl/8/sphinx-benchmark-v02#comments</comments>
		<pubDate>Tue, 23 Dec 2008 18:28:37 +0000</pubDate>
		<dc:creator>virus</dc:creator>
				<category><![CDATA[Benchmark]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sphinx]]></category>

		<guid isPermaLink="false">http://virus.ipc.net.pl/blog/?p=8</guid>
		<description><![CDATA[Jednak Sphinx przy małych zastosowaniach zupełnie się nie sprawdza. Za to przy dużych jak najbardziej. tablica 40mb to nic dla MySQLa i tez nic dla Sphinxa , tutaj sprawdził się dużo lepiej MySQL. Warto tez pamiętać iż sphinx jest tylko silnikiem do szukania po indexie odwołań do danych, a wiec i tak potem trzeba będzie [...]]]></description>
			<content:encoded><![CDATA[<p>Jednak Sphinx przy małych zastosowaniach zupełnie się nie sprawdza.</p>
<p>Za to przy dużych jak najbardziej.<br />
tablica 40mb to nic dla MySQLa i tez nic dla Sphinxa , tutaj sprawdził się dużo lepiej MySQL.<br />
Warto tez pamiętać iż sphinx jest tylko silnikiem do szukania po indexie odwołań do danych, a wiec i tak potem trzeba będzie odpytać mysqla&#8230; przy niewielkiej ilości danych kolejne połączenie do kolejnego demona, kawałek API do PHPa może okazać się <strong>znacznie wolniejsze</strong>.</p>
<p>Jeśli natomiast macie tablice wielkości 2.4GB to już wygląda to zupełnie inaczej.<br />
<span id="more-8"></span><br />
MySQL robił mi FULLTEXT na jedno z dwóch pół (polowa wielkości tablicy) około 4h , należy też odliczyć fakt ze MySQL podczas przebudowywania indexów także przepisuje cala tablice , a następnie robi na nowo indexy. Sphinx po prostu odczytuje dane z MySQLa i generuje indexy. Tak wiec prędkość odczytu/zapisu dysku w moim laptopie sprawiła że trwało to 4h i nie powinno nikogo zdziwi ze pod Sphinxem pójdzie to znacznie szybciej.</p>
<p>A może jednak zaszokuje fakt ze trwało to około <strong>5min</strong> ? Bylem pod wrażeniem!</p>
<p>Czas na konkrety. Testy przeprowadziłem identycznie jak w poprzednim <a href="http://virus.ipc.net.pl/blog/7/sphinx-benchmark-v01">benchmarku v0.1</a>. Pościłem pierwszy test na sucho aby mysql zbuforował sobie indexy. Następnie  przy ilości 10k powtórzeń php sie timeoutowal, wiec zmniejszyłem ilość na tysiąc powtórzeń.  Oto wynik:<strong> 0.00472 s.</strong></p>
<p>Następnie identycznie dla Sphinxa. Oto wynik: <strong>0.0097 s.</strong></p>
<p>W tym momencie jesli macie podobne wyniki to <strong>RTFM</strong> ;)</p>
<p>Po tuningu koniuracji <em>searchd</em> mamy wynik: <strong>0.00079 s. </strong>czyli około <strong>6 razy szybciej niż MySQL!</strong></p>
<p>Warto pamiętać ze Sphinx nie jest alternatywa dla MySQL, jest aplikacja zastępująca pewną funkcjonalność MySQL-a lecz bez bazy danych jest zupełnie nie przydatny.</p>
<p>Dodam też że prócz samego szybszego wyszukiwania znacznie odciąża budowanie indexów w MySQL (wywoływanie z cron) można go clustrować lub wydzielać na osobne maszyny.</p>
<p>Polecam wszystkim gdzie są przeszukiwane duże tablice FULLTEXT.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.piotrsikora.pl/8/sphinx-benchmark-v02/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sphinx benchmark v0.1</title>
		<link>http://blog.piotrsikora.pl/7/sphinx-benchmark-v01</link>
		<comments>http://blog.piotrsikora.pl/7/sphinx-benchmark-v01#comments</comments>
		<pubDate>Sat, 06 Dec 2008 07:46:17 +0000</pubDate>
		<dc:creator>virus</dc:creator>
				<category><![CDATA[Benchmark]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sphinx]]></category>

		<guid isPermaLink="false">http://virus.ipc.net.pl/blog/?p=7</guid>
		<description><![CDATA[Postanowiłem przeprowadzić parę podstawowych testów Sphinxa w porównaniu z FULLTEXT w MySQL.]]></description>
			<content:encoded><![CDATA[<p>Jeden z pierwszych testów jakie spróbuje przybliżyć czy warto inwestować w serwer pod <a title="Sphinx" href="http://virus.ipc.net.pl/blog/tag/sphinx" target="_self">Sphinx</a>.</p>
<p>Edit: Jutro pojawi sie drugi benchmark, który jednak pokaże moc Sphinxa.</p>
<p><span id="more-7"></span></p>
<p>Pierwsze test mysql.php:</p>
<pre class="brush: php">
&amp;lt;?
$start=getmicrotime();
for($i=0;$i&amp;amp;amp;lt;10000;$i++)
$q = mysql_query(&quot;SELECT mailText,COUNT(*) FROM gl_members_mail WHERE MATCH(mailText) AGAINST(&#039;test&#039;) GROUP BY mailOwner ORDER BY COUNT(*) DESC LIMIT 0,10&quot;);

$end=getmicrotime();
$diff = ($end-$start)/10000;
echo $diff.&quot;&amp;amp;amp;lt;br&amp;amp;amp;gt;\n&quot;;

?&amp;gt;
</pre>
<p>Drugi test sphinx.php:</p>
<pre class="brush: php">

&lt;?

include(&#039;sphinxapi.php&#039;);

$cl = new SphinxClient();
$cl-&gt;SetServer( &quot;localhost&quot;, 3312 );
$cl-&gt;SetMatchMode( SPH_MATCH_ANY  );
$cl-&gt;setGroupBy(&quot;mailOwner&quot;,SPH_GROUPBY_ATTR,&quot;@count desc&quot;);
$cl-&gt;setLimits(0,10);
$start=getmicrotime();
for($i=0;$i&lt;10000;$i++)
$result = $cl-&gt;Query( &#039;test&#039; );
$end=getmicrotime();
$diff = ($end-$start)/10000;
echo $diff.&quot;&lt;br&gt;\n&quot;;
?&gt;
</pre>
<blockquote><p><a title="MySQL" href="http://virus.ipc.net.pl/blog/tag/mysql">Mysql</a> : <strong>0.00036 s.<br />
</strong></p>
<p><a title="Sphinx" href="http://virus.ipc.net.pl/blog/tag/sphinx">Sphinx</a>:<strong> 0.00147 s.<br />
</strong></p></blockquote>
<p>Sprawa by była rozstrzygnięta, ale <a title="Sphinx" href="http://virus.ipc.net.pl/blog/tag/sphinx">Sphinx</a> zwraca nam ilość trafień, wiec trzeba by było zmienić zapytanie i dodać drugie:</p>
<pre class="brush: sql">

SELECT SQL_CALC_FOUND_ROWS mailText,COUNT(*) FROM members_mail WHERE MATCH(mailText)
AGAINST(&#039;test&#039;) GROUP BY mailOwner ORDER BY COUNT(*) DESC LIMIT 0,10;

SELECT FOUND_ROWS()
</pre>
<p>Dorzucenie drugiego zapytania i przeliczanie ilości wyników da nam efekt : <strong>0.00042 s.<br />
</strong></p>
<p>Jednak jedna rzecz nie pasuje mi podczas tych testów.</p>
<p>Benchmark sphinx.php zjada prawie 100% jednego rdzenia dla procesu PHP, a w mysql.php zjada <a title="MySQL" href="http://virus.ipc.net.pl/blog/tag/mysql">MySQLa</a> (czyli dobrze). Doszedłem do wniosku że obsługa mysqla jest wkompilowana , a <a title="Sphinx" href="http://virus.ipc.net.pl/blog/tag/sphinx">sphinx</a> ma swoje API napisane w PHP, ale ma tez dodatek PECL który udało mi się prawie zmusić do działania. Prawie ponieważ PECL nie wspiera chyba wszystkich możliwości.</p>
<p>Z niewiadomych przyczyn ustawianie limitu nie dziala <em>setLimits(0,10);</em> Całe szczęście w default wyświetla 20 wyników, więc pominę ten parametr.</p>
<p>Drugi problem to segfaulty&#8230; cały projekt widać jest dość niestabilny. Dopiero przy probie 10 pętli <a href="http://virus.ipc.net.pl/blog/tag/php">PHP</a> się nie wywrócił i dal wynik: <strong>0.00142 s. </strong>czyli trochę lepiej. Obciążenie PHP znacznie spadło, searchd miał średnie obciążenie na 10-20 %.</p>
<p>Jak na razie benchmark pokazuje ze <a href="http://virus.ipc.net.pl/blog/tag/sphinx">Sphinx</a> może kiedyś się będzie nadawał&#8230; Jednak na razie go jeszcze nie skreślę.</p>
<p>Kolejny benchmark przedstawię w nadchodzącym tygodniu przy większej ilości danych , oraz na dedykowanych maszynach tak by <a href="http://virus.ipc.net.pl/blog/tag/php">PHP</a> nie kolidowało z demonami.</p>
<p>P.S.</p>
<p>Polecam zapoznać się z tą publikacją : <a href="http://blog.zabiello.com/articles/2007/11/30/sphinx-merb-vs-ferret-rails">sphinx merb vs ferret rails</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.piotrsikora.pl/7/sphinx-benchmark-v01/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

