<?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; mysql</title>
	<atom:link href="http://blog.piotrsikora.pl/tag/mysql/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>Plagiaty wpisów na bash-ach</title>
		<link>http://blog.piotrsikora.pl/15/plagiaty-wpisow-na-bash-ach</link>
		<comments>http://blog.piotrsikora.pl/15/plagiaty-wpisow-na-bash-ach#comments</comments>
		<pubDate>Tue, 16 Jun 2009 13:26:08 +0000</pubDate>
		<dc:creator>virus</dc:creator>
				<category><![CDATA[Bez kategorii]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[cytaty]]></category>
		<category><![CDATA[kretyny]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://virus.ipc.net.pl/blog/?p=15</guid>
		<description><![CDATA[Ostatnio napisałem agregat wpisów z bash.org.pl , kretyn.com i pr0n.pl z racji tego że często pokolei na nie wchodziłem. Napotkałem jednak ciekawy problem którego nie przewidziałem ;) Problem polegał na tym że nagle znikąd zaczęły pojawiać mi się identyczne wpisy lub prawie identyczne na różnych serwisach. Problem trochę rozwiązałem dając funkcje mysql-a SOUNDEX. Zachęcam do [...]]]></description>
			<content:encoded><![CDATA[<p>Ostatnio napisałem agregat wpisów z bash.org.pl , kretyn.com i pr0n.pl z racji tego że często pokolei na nie wchodziłem. Napotkałem jednak ciekawy problem którego nie przewidziałem ;)<br />
<span id="more-15"></span><br />
Problem polegał na tym że nagle znikąd zaczęły pojawiać mi się identyczne wpisy lub prawie identyczne na różnych serwisach.<br />
Problem trochę rozwiązałem dając funkcje mysql-a SOUNDEX.<br />
Zachęcam do zerkania ;)<br />
<a title="Plagiaty wpisów" href="http://kretyny.pl/plagiat">Lista Plagiatów</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.piotrsikora.pl/15/plagiaty-wpisow-na-bash-ach/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>
		<item>
		<title>Sphinx Search</title>
		<link>http://blog.piotrsikora.pl/4/sphinx-search</link>
		<comments>http://blog.piotrsikora.pl/4/sphinx-search#comments</comments>
		<pubDate>Sat, 06 Dec 2008 04:39:53 +0000</pubDate>
		<dc:creator>virus</dc:creator>
				<category><![CDATA[Ogólna]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sphinx]]></category>

		<guid isPermaLink="false">http://virus.ipc.net.pl/blog/?p=4</guid>
		<description><![CDATA[Szukając najbardziej wydajnych rzeczy natknąłem się na Sphinx W najbliższym czasie przeprowadzę testy wydajnościowe, jak na razie poinformuje ze czas który podaje result z query sphinxa nie uwzględnia przesłania danych do skryptu. Sprawia to ze jak narazie podczas testów na moim laptopie czas nie jest aż taki świetny. Jednak niestety nowe laptopy są na tyle [...]]]></description>
			<content:encoded><![CDATA[<p>Szukając najbardziej wydajnych rzeczy natknąłem się na <a title="Sphinx Search" href="http://www.sphinxsearch.com/" target="_blank">Sphinx </a></p>
<p>W najbliższym czasie przeprowadzę testy wydajnościowe, jak na razie poinformuje ze czas który podaje result z query sphinxa nie uwzględnia przesłania danych do skryptu. Sprawia to ze jak narazie podczas testów na moim laptopie czas nie jest aż taki świetny. Jednak niestety nowe laptopy są na tyle szybkie ze 400k rekordów to za mało na porównanie z <a title="MySQL Docs" href="http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html">MySQL Fulltext-search (FTS)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.piotrsikora.pl/4/sphinx-search/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

