<?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>kompresja &#8211; Solr.pl</title>
	<atom:link href="https://solr.pl/tag/kompresja/feed/" rel="self" type="application/rss+xml" />
	<link>https://solr.pl</link>
	<description>All things to be found - Blog related to Apache Solr &#38; Lucene projects - https://solr.apache.org</description>
	<lastBuildDate>Wed, 11 Nov 2020 22:39:52 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>
	<item>
		<title>Solr 4.1: Kompresja pól typu stored</title>
		<link>https://solr.pl/2012/11/19/solr-4-1-kompresja-pol-typu-stored/</link>
					<comments>https://solr.pl/2012/11/19/solr-4-1-kompresja-pol-typu-stored/#respond</comments>
		
		<dc:creator><![CDATA[Rafał Kuć]]></dc:creator>
		<pubDate>Mon, 19 Nov 2012 22:39:23 +0000</pubDate>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[compression]]></category>
		<category><![CDATA[field]]></category>
		<category><![CDATA[kompresja]]></category>
		<category><![CDATA[lucene]]></category>
		<category><![CDATA[solr]]></category>
		<guid isPermaLink="false">http://sematext.solr.pl/?p=437</guid>

					<description><![CDATA[Pomimo tego, że wersja 4.0 Solr i Lucene jest jeszcze bardzo świeża stwierdziliśmy, że czas przyjrzeć się zmianom nadchodzącym w wersji 4.1. Jedną z tych zmian jest wprowadzenie kompresji dla pól typu stored, a tym samym zmniejszenie wielkości indeksu, kiedy]]></description>
										<content:encoded><![CDATA[<p>Pomimo tego, że wersja 4.0 Solr i Lucene jest jeszcze bardzo świeża stwierdziliśmy, że czas przyjrzeć się zmianom nadchodzącym w wersji 4.1. Jedną z tych zmian jest wprowadzenie kompresji dla pól typu stored, a tym samym zmniejszenie wielkości indeksu, kiedy korzystamy z przechowywania oryginalnej wartości pól. Zobaczmy więc, jak to działa.</p>
<p><span id="more-437"></span></p>
<h3>Trochę teorii</h3>
<p>W przypadku kiedy nasz indeks składa się z dużej ilości pól oznaczonych jako <em>stored</em> mogą one stanowić nawet większą część miejsca zajmowanego przez indeks. Skąd wiedzieć ile zajmują pola typu <em>stored</em> ? Wystarczy spojrzeć do katalogu z indeksem i policzyć ile zajmują pliki z rozszerzeniem&nbsp;.fdt. Pomimo tego, że duża ilość pól tego typu nie wpływa bezpośrednio na wydajność Solr, to jednak wielkość indeksu wpływa na to jak zachowuje się cache I/O, a tym samym, im większy indeks, tym bardziej prawdopodobne, że będziemy mieli dość dużo operacji odczytu, a tym samym nasze zapytania będą wykonywane wolniej. Do tego, ze względu na to, że musimy zapisać więcej danych &#8211; indeksowanie także będzie wolniejsze.</p>
<p>Wraz z Lucene 4.1 pola oznaczone jako <em>stored</em> będą kompresowane algorytmem LZ4 (<a href="http://code.google.com/p/lz4/">http://code.google.com/p/lz4/</a>), który powinien znacznie zmniejszyć wielkość indeksu, gdy korzystamy z dużej ilości tego typu pól, a jednocześnie nie powinien mocno obciążać maszyny podczas wykonywania kompresji.</p>
<h3>Dane testowe</h3>
<p>Do testów wykorzystaliśmy dane polskiej wikipedii z dnia 2012.11.10 zawierające artykuły (<a href="http://dumps.wikimedia.org/plwiki/20121110/plwiki-20121110-pages-articles.xml.bz2" target="_blank" rel="noopener noreferrer">http://dumps.wikimedia.org/plwiki/20121110/plwiki-20121110-pages-articles.xml.bz2</a>). Rozpakowany plik XML z danymi zajmował około 4.7GB.</p>
<h3>Struktura indeksu</h3>
<p>Następująca struktura indeksu została przygotowana, aby zaindeksować powyższe dane:
</p>
<pre class="brush:xml">&lt;field name="id" type="string"&nbsp; indexed="true" stored="true" required="true"/&gt;
&lt;field name="title" type="text" indexed="true" stored="true"/&gt;
&lt;field name="revision" type="int" indexed="true" stored="true"/&gt;
&lt;field name="user" type="string" indexed="true" stored="true"/&gt;
&lt;field name="userId" type="int" indexed="true" stored="true"/&gt;
&lt;field name="text" type="text" indexed="true" stored="true"/&gt;
&lt;field name="timestamp" type="date" indexed="true" stored="true"/&gt;
&lt;field name="_version_" type="long" indexed="true" stored="true"/&gt;</pre>
<h3>Konfiguracja DIH</h3>
<p>Konfiguracja DIH użyta do importu danych Wikipedii wyglądała następująco:
</p>
<pre class="brush:xml">&lt;dataConfig&gt;
 &lt;dataSource type="FileDataSource" encoding="UTF-8" /&gt;
 &lt;document&gt;
  &lt;entity name="page" processor="XPathEntityProcessor" stream="true" forEach="/mediawiki/page/" url="/home/data/wikipedia/plwiki-20121110-pages-articles.xml" transformer="RegexTransformer,DateFormatTransformer"&gt;
   &lt;field column="id" xpath="/mediawiki/page/id" /&gt;
   &lt;field column="title" xpath="/mediawiki/page/title" /&gt;
   &lt;field column="revision" xpath="/mediawiki/page/revision/id" /&gt;
   &lt;field column="user" xpath="/mediawiki/page/revision/contributor/username" /&gt;
   &lt;field column="userId" xpath="/mediawiki/page/revision/contributor/id" /&gt;
   &lt;field column="text" xpath="/mediawiki/page/revision/text" /&gt;
   &lt;field column="timestamp" xpath="/mediawiki/page/revision/timestamp" dateTimeFormat="yyyy-MM-dd'T'hh:mm:ss'Z'" /&gt;
   &lt;field column="$skipDoc" regex="^#REDIRECT .*" replaceWith="true" sourceColName="text"/&gt;
  &lt;/entity&gt;
 &lt;/document&gt;
&lt;/dataConfig&gt;</pre>
<h3>Czas indeksowania</h3>
<p>Czas indeksowania był bardzo podobny w obu przypadkach dla tej samej liczby dokumentów, dokładnie było ich 1.301.394. W przypadku <strong>Solr 4.0</strong> czas indeksowania wyniósł <strong>14 minut i 33 sekundy</strong>, w przypadku <strong>Solr 4.1</strong> wyniósł <strong>14 minut i 43 sekundy</strong>. Zatem Solr 4.1 był minimalnie wolniejszy, a ze względu na to, że test był wykonywany na moim laptopie, można przyjąć iż wydajność indeksowania będzie podobna.</p>
<h3>Wielkość wynikowego indeksu</h3>
<p>Wielkość indeksu, czyli to co nas najbardziej interesuje. W przypadku <strong>Solr 4.0</strong> indeks, który powstał w wyniku zaindeksowania danych miał około <strong>5.1GB</strong>, czyli dokładnie <strong>5.464.809.863</strong> bajtów. W przypadku Solr 4.1 rozmiar indeksu wyniósł około <strong>3.24GB</strong>, czyli dokładnie <strong>3.480.457.399</strong> bajtów. Zatem porównyjąc indeks stworzony przez Solr 4.0 do indeksu stworzonego przez Solr 4.1 zyskaliśmy około <strong>35%</strong> miejsca na dysku.</p>
<h3>Podsumowanie</h3>
<p>Widać jak na dłoni, iż zysk z kompresowania pól oznaczonych jako <em>stored</em> jest duży. Pomimo tego, iż potrzebna jest dodatkowa moc procesora na kompresję i dekompresję danych, zysk polegający na zmniejszeniu obciążenia I/O będzie większy, niż strata cykli procesora. Nie dziwię się zatem, iż kompresja pól oznaczonych jako <em>stored</em> jest włączona domyślnie w Lucene 4.1, a zatem i w Solr 4.1. Jeżeli jednak chcielibyśmy wyłączyć to zachowanie, na chwilę obecną konieczna jest własna implementacja odpowiedniego codec&#8217;a, który nie korzysta z kompresji. Jednak aby skorzystać z własnego formatu indeksu nie musimy utrzymywać własnej wersji Lucene, co znów pokazuje potęgę codec&#8217;ów wprowadzonych wraz z Lucene 4.0.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://solr.pl/2012/11/19/solr-4-1-kompresja-pol-typu-stored/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
