<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Jaros&#322;aw Zabie&#322;&#322;o - BLOG: Sphinx i Merb - silna konkurencja dla Ferreta i Rails&#243;w</title>
    <link>http://blog.zabiello.com/articles/2007/11/30/sphinx-merb-vs-ferret-rails</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>moje notatki, linki, komentarze</description>
    <item>
      <title>Sphinx i Merb - silna konkurencja dla Ferreta i Rails&#243;w</title>
      <description>&lt;p&gt;&lt;a href="http://sphinxsearch.com/"&gt;Sphinx&lt;/a&gt; to alternatywny wobec Lucene/Ferreta silnik wyszukiwania pe&#322;notekstowego. Charakteryzuje si&#281; ogromn&#261; szybko&#347;ci&#261; dzia&#322;ania i ma&#322;ym zu&#380;yciem zasob&#243;w komputera. R&#243;&#380;nica jest tak kolosalna, &#380;e jak kto&#347; pierwszy raz s&#322;yszy &#380;e Sphinx indeksuje teksty miliony razy szybciej to nie chce wierzy&#263;. Nazywaj&#261; go odpowiednikiem &lt;a href="http://blog.zabiello.com/articles/2006/11/08/nginx-apache-killer"&gt;Nginksa&lt;/a&gt; dla wyszukiwania pe&#322;notekstowego. W obu przypadkach autorami s&#261; rosyjscy programi&#347;ci.&lt;/p&gt;


	&lt;p&gt;Troch&#281; czasu mi zaj&#281;&#322;o zanim si&#281; przekona&#322;em, &#380;e do webowego wyszukiwania tekst&#243;w, u&#380;ywanie mechanizm&#243;w opartych na relacyjnej bazie danych i skryptach Rubiego/Pythona, to raczej kiepski pomys&#322;. W artykule &lt;a href="http://blog.zmok.net/articles/2006/08/14/full-text-search-in-ruby-on-rails"&gt;Full text search in Ruby on Rails&lt;/a&gt; elegancko wypunktowano r&#243;&#380;nice mi&#281;dzy &lt;a href="http://ferret.davebalmain.com/traca"&gt;Ferretem&lt;/a&gt; MySQL. &lt;a href="http://rubyonrails.org"&gt;Ruby on Rails&lt;/a&gt; (a w&#322;a&#347;ciwie Active Record) posiada nawet gotowy plugin &lt;a href="http://projects.jkraemer.net/acts_as_ferret/"&gt;acts_as_ferret&lt;/a&gt; kt&#243;ry bardzo upraszcza integracj&#281; Ferreta z baz&#261; MySQL. W sieci mo&#380;na spotka&#263; sporo artyku&#322;&#243;w os&#243;b zachwyconych mo&#380;liwo&#347;ciami Ferreta i &#322;atwo&#347;ci&#261; u&#380;ycia plugina acts_as_ferret. Jest tylko jeden drobny problem. Czas indeksowania tekst&#243;w.&lt;/p&gt;


	&lt;p&gt;Pr&#243;bowa&#322;em zaindeksowa&#263; tabel&#281; (dla MySQL 5) sk&#322;adaj&#261;c&#261; si&#281; z ok. 2.5 mln rekord&#243;w (zebranych z ponad 100 przek&#322;ad&#243;w Biblii w 19 wersjach j&#281;zykowych). Pr&#243;b a post&#261;pienia wg wskaz&#243;wek z pliku &lt;span class="caps"&gt;README&lt;/span&gt; do tego pluginu okaza&#322;a si&#281; strza&#322;em w stop&#281;. M&#243;j dwurdzeniowy MacBook Pro 2.2GHz, 2GB &lt;span class="caps"&gt;RAM&lt;/span&gt; jak rozpocz&#261;&#322; tworzenie indeks&#243;w jednego dnia po po&#322;udniu, to nie sko&#324;czy&#322; go na drugi dzie&#324;. Przerwa&#322;em to szale&#324;stwo. Wygenerowa&#322; jakie&#347; 250 MB indeks&#243;w na 1.2GB do stworzenia. Znacznie szybciej by&#322;o napisa&#263; sobie w&#322;asny skrypt Rubiego do indeksacji. Pomieli&#322; jakie&#347; dwie godziny, ale za to nie 2-3 doby! W sumie indeksowanie wi&#281;kszych plik&#243;w do Ferreta blokuje komputer na d&#322;u&#380;szy czas. Ma&#322;o ciekawie.&lt;/p&gt;


	&lt;p&gt;I wtedy spr&#243;bowa&#322;em &lt;a href="http://sphinxsearch.com"&gt;Sphinksa&lt;/a&gt;. R&#243;&#380;nica byla tak kolosalna, &#380;e wpierw my&#347;la&#322;em, &#380;e jest jaki&#347; b&#322;&#261;d w programie. Sphinx t&#261; sam&#261; tabel&#281; poindeksowa&#322; mi w nieca&#322;a minut&#281;. Wszelkie operacje wyszukiwania r&#243;&#380;nych boolowskich kombonacji s&#322;&#243;w trwa niezmiennie 1-2 ms. Jest po prostu natychmiastowe! Algorytm Sphinksa jest niezr&#243;wnanie lepiej przemy&#347;lany. Co z tego, &#380;e teoretycznie Lucene czy Ferret maj&#261; wi&#281;cej mo&#380;liwo&#347;ci, skoro w praktyce 95% z nich posiada te&#380; Sphinx? Jak kto&#347; chce, to do Active Record jest r&#243;wnie&#380; plugin &lt;a href="http://www.datanoise.com/articles/2007/3/23/acts_as_sphinx-plugin"&gt;acts_as_sphinx&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Jestem ciekaw kiedy b&#281;d&#261; gotowe pluginy acts_as_ferret i acts_as_sphinx do &lt;a href="http://datamapper.org/"&gt;DataMapper&amp;#8217;a&lt;/a&gt;, znacznie szybszego i og&#243;lnie lepiej przemy&#347;lanego &lt;span class="caps"&gt;ORM&lt;/span&gt;&amp;#8217; ni&#380; Active Record.&lt;/p&gt;


	&lt;p&gt;Tak w og&#243;le, to  Railsom wyrasta gro&#378;na konkurencja w &#347;wiecie Rubiego. To nie &lt;a href="http://www.nitroproject.org/"&gt;Nitro&lt;/a&gt;, ale &lt;a href="http://merbivore.com/"&gt;&lt;strong&gt;Merb&lt;/strong&gt;&lt;/a&gt; mo&#380;e podci&#261;&#263; dominacj&#281; Rails&#243;w. Korzysta z railsowej filozofii, ale du&#380;o &lt;strong&gt;szybszy&lt;/strong&gt;, w pe&#322;ni &lt;strong&gt;wielow&#261;tkowy&lt;/strong&gt;, &lt;strong&gt;komponentowy&lt;/strong&gt; i w wielu punktach lepiej przemy&#347;lany (ma lepswzy resolver &lt;span class="caps"&gt;URL&lt;/span&gt;, domy&#347;lnie korzysta z &lt;a href="http://www.kuwata-lab.com/erubis/"&gt;Erubis&lt;/a&gt;, najszybszego systemu szablon&#243;w jaki jest do Rubiego). Merb przypomina mi troch&#281; filozofi&#281; le&#380;&#261;c&#261; u podstaw pythonowego &lt;a href="http://pylonshq.com"&gt;Pylons&lt;/a&gt;. Jest tak samo z definicji nastawiony na elastyczno&#347;&#263; i &#322;atwo&#347;&#263; wymiany swych komponent&#243;w oraz du&#380;y nacisk po&#322;o&#380;ono na wydajno&#347;&#263;. Czyli to, co nagminnie by&#322;o od zawsze lekcewa&#380;one przez developer&#243;w &lt;a href="http://rubyonrails.org"&gt;Rails&#243;w&lt;/a&gt; skupiaj&#261;cych si&#281; za bardzo na wymy&#347;laniu nowej funkcjonalno&#347;ci. Nie bez znaczenia jest to, &#380;e proces migracji aplikacji z Rails do Merba jest raczej prosty, bo ten drugi potrafi pracowa&#263; z Active Record. Wi&#281;c w zasadzie modele mo&#380;na przerzuca&#263; bez wi&#281;kszego problemu. Mo&#380;e Merb nie zdetronizuje Rails, bo ten tak ca&#322;kiem nie stoi w miejscu i lada dzie&#324; ma wyj&#347;&#263; wersja finalna 2.0 (w momencie pisania tekstu &lt;a href="http://weblog.rubyonrails.org/2007/11/29/rails-2-0-release-candidate-2"&gt;jest ju&#380; &lt;span class="caps"&gt;RC2&lt;/span&gt;&lt;/a&gt;). Ale mo&#380;e zmobilizuje developer&#243;w Rails&#243;w aby troch&#281; popracowali nad jako&#347;ci&#261; ju&#380; stworzonego kodu. A jak nie, to nic straconego. Dobra konkurencja dla Rails&#243;w nie zaszkodzi.&lt;/p&gt;</description>
      <pubDate>Fri, 30 Nov 2007 18:18:00 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:71f72ef5-0079-4762-97a8-05492850f304</guid>
      <author>Jaros&#322;aw Zabie&#322;&#322;o</author>
      <link>http://blog.zabiello.com/articles/2007/11/30/sphinx-merb-vs-ferret-rails</link>
      <category>sphinx</category>
      <category>lucene</category>
      <category>ferret</category>
      <category>merb</category>
      <category>datamapper</category>
    </item>
    <item>
      <title>"Sphinx i Merb - silna konkurencja dla Ferreta i Rails&#243;w" by quizk</title>
      <description>&lt;p&gt;niestety, nie :(, poki co nie znalazlem nic na ten temat&lt;/p&gt;</description>
      <pubDate>Thu, 17 Jan 2008 14:40:51 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:108760a5-2310-4480-9036-4929bb699150</guid>
      <link>http://blog.zabiello.com/articles/2007/11/30/sphinx-merb-vs-ferret-rails#comment-1375</link>
    </item>
    <item>
      <title>"Sphinx i Merb - silna konkurencja dla Ferreta i Rails&#243;w" by Krzysztof K.</title>
      <description>&lt;p&gt;Czy umiecie zmusi&#263; Sphinxa do dzia&#322;ania z j&#281;zykiem polskim? Chodzi mi na przyk&#322;ad o stemmowanie itp.?&lt;/p&gt;</description>
      <pubDate>Mon, 24 Dec 2007 00:07:43 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:15afc99d-113e-452b-824a-aab4f85b8232</guid>
      <link>http://blog.zabiello.com/articles/2007/11/30/sphinx-merb-vs-ferret-rails#comment-1314</link>
    </item>
    <item>
      <title>"Sphinx i Merb - silna konkurencja dla Ferreta i Rails&#243;w" by Jaros&#322;aw Zabie&#322;&#322;o</title>
      <description>&lt;p&gt;Konfiguracja Merb z DataMapperem jest bardzo prosta. Wystarczy w pliku config/dependencies.rb znale&#378;&#263; i odkomentowa&#263; linijk&#281;&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;### Uncomment for DataMapper ORM
# use_orm :datamapper&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Chyba jednak lepszy jest inny ORM &amp;#8211; &lt;a href="http://sequel.rubyforge.org/" rel="nofollow"&gt;Sequel&lt;/a&gt;. Troch&#281; z nim popracowa&#322;em. Wygl&#261;da nie tylko na dojrzalszy od DataMappera ale tak&#380;e wspaniale si&#281; z nim pracuje. Mo&#380;e p&#243;&#380;niej co&#347; wi&#281;cej napisz&#281;. Powiem tylko, &#380;e Sequel ma wbudowane migracje, mo&#380;na krokowo rozbudowywa&#263; warunki, wszystkie operacje s&#261; lazy, sk&#322;adni&#281; ma bardzo podobn&#261; do ORM u&#380;ywanego w pythonowym Django. Na ka&#380;dym kroku mo&#380;na sprawdzi&#263; jaki SQL by&#322;by wygenerowany (wystarczy odpali&#263; na ko&#324;cu doklei&#263; metod&#281; .sql). Odpalenie zapytania zwraca jeden obiekt ORM z wbudowanym iteratorem i dodatkowymi opcjami a nie tak jak (g&#322;upio) robi Active Record. No i Sequel ma wsparcie dla sporej ilo&#347;ci baz.&lt;/p&gt;


	&lt;p&gt;Napisa&#322;em sobie w Merb pierwsz&#261; aplikacj&#281; (u&#380;ywam tam Erubis, Sequel i Sphinksa) i musz&#281; przyzna&#263;, &#380;e to Merb ma zadatki na killer application ktora mo&#380;e zdetronizowa&#263; Rails. Nie tylko jest szybszy, wielow&#261;tkowy i bardziej elastyczny. Jest tak&#380;e &lt;strong&gt;prostszy&lt;/strong&gt;, odrzucono zasad&#281; &amp;#8220;wszystko implicite&amp;#8221; jak&#261; wida&#263; w Rails. W Merb jest &lt;strong&gt;mniej magii&lt;/strong&gt;. Tak&#380;e wyra&#378;nie &lt;strong&gt;szybciej&lt;/strong&gt; i &#322;atwiej si&#281; tworzy i debuguje kod ni&#380; w Rails. Du&#380;o lepszy projekt moim zdaniem. A&#380; odesz&#322;y mnie ci&#261;gotki aby przerzuca&#263; si&#281; do pythonowego &lt;a href="http://pylonshq.com" rel="nofollow"&gt;Pylons&lt;/a&gt;. :)&lt;/p&gt;</description>
      <pubDate>Mon, 03 Dec 2007 11:53:18 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:57af5563-cb92-4370-a61e-2523ac396f31</guid>
      <link>http://blog.zabiello.com/articles/2007/11/30/sphinx-merb-vs-ferret-rails#comment-1264</link>
    </item>
    <item>
      <title>"Sphinx i Merb - silna konkurencja dla Ferreta i Rails&#243;w" by Micha&#322; Jask&#243;lski</title>
      <description>&lt;p&gt;Od paru miesi&#281;cy korzystamy ze Sphinxa w Nokaut.pl i bardzo go sobie chwalimy.&lt;/p&gt;</description>
      <pubDate>Sat, 01 Dec 2007 13:20:25 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:1fe0044c-6ced-4b52-be12-2ba1ca7a20e8</guid>
      <link>http://blog.zabiello.com/articles/2007/11/30/sphinx-merb-vs-ferret-rails#comment-1262</link>
    </item>
    <item>
      <title>"Sphinx i Merb - silna konkurencja dla Ferreta i Rails&#243;w" by Piotr Szrajber</title>
      <description>&lt;p&gt;Jaros&#322;awie, od d&#322;u&#380;szego czasu z uznaniem czytuj&#281; Twojego bloga, ale teraz pierwszy raz pozwalam sobie na komentarz (to tytu&#322;em wst&#281;pu).&lt;/p&gt;


	&lt;p&gt;Te&#380; niedawno zainteresowa&#322;em si&#281; projektem Merb. Czy spotka&#322;e&#347; mo&#380;e jakie&#347; dok&#322;adniejsze opisy, tutoriale itd. jak u&#380;ywa&#263; Merba razem z Datamapperem?&lt;/p&gt;


	&lt;p&gt;Pytam, bo mnie si&#281; uda&#322;o znale&#378;&#263; jedynie takie, kt&#243;re nie wykraczaj&#261; zbyt daleko poza sam proces instalacji. Mam na my&#347;li jaki&#347; przepis, jak zrobi&#263; &amp;#8220;w duchu Merb+Datamapper&amp;#8221; prost&#261; aplikacj&#281; od pocz&#261;tku do ko&#324;ca &amp;#8211; &#380;eby podkre&#347;li&#263; wszystkie r&#243;&#380;nice z Railsami, pokaza&#263; ficzery itp.&lt;/p&gt;</description>
      <pubDate>Fri, 30 Nov 2007 20:45:32 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:69ee0604-a6fd-4d07-a890-410232802e96</guid>
      <link>http://blog.zabiello.com/articles/2007/11/30/sphinx-merb-vs-ferret-rails#comment-1260</link>
    </item>
  </channel>
</rss>
