<?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; пример</title>
	<atom:link href="http://www.job-blog.bullgare.ru/tag/%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%80/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.job-blog.bullgare.ru</link>
	<description>о программировании и работе</description>
	<lastBuildDate>Fri, 03 Feb 2012 09:42:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>nginx + apache. Кеширование</title>
		<link>http://www.job-blog.bullgare.ru/2010/01/nginx-apache-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/</link>
		<comments>http://www.job-blog.bullgare.ru/2010/01/nginx-apache-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 10:26:48 +0000</pubDate>
		<dc:creator>bullgare</dc:creator>
				<category><![CDATA[администрирование]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[конфиг]]></category>
		<category><![CDATA[пример]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=617</guid>
		<description><![CDATA[Полезный пример конфига nginx для кеширования ответов. Минус &#8211; в том, что работа в примере ведётся с апачем. Но если всё переписать на ngin+php-fpm, будет гуд. http://ilyasite.net.ru/?p=80]]></description>
			<content:encoded><![CDATA[<p>Полезный пример конфига nginx для кеширования ответов.<br />
Минус &#8211; в том, что работа в примере ведётся с апачем.<br />
Но если всё переписать на ngin+php-fpm, будет гуд.<br />
<a href="http://ilyasite.net.ru/?p=80">http://ilyasite.net.ru/?p=80</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2010/01/nginx-apache-%d0%ba%d0%b5%d1%88%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Работа с ревизиями в CouchDB</title>
		<link>http://www.job-blog.bullgare.ru/2009/08/%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d1%81-%d1%80%d0%b5%d0%b2%d0%b8%d0%b7%d0%b8%d1%8f%d0%bc%d0%b8-%d0%b2-couchdb/</link>
		<comments>http://www.job-blog.bullgare.ru/2009/08/%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d1%81-%d1%80%d0%b5%d0%b2%d0%b8%d0%b7%d0%b8%d1%8f%d0%bc%d0%b8-%d0%b2-couchdb/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 07:59:49 +0000</pubDate>
		<dc:creator>bullgare</dc:creator>
				<category><![CDATA[Базы данных]]></category>
		<category><![CDATA[CouchDb]]></category>
		<category><![CDATA[база данных]]></category>
		<category><![CDATA[бд]]></category>
		<category><![CDATA[пример]]></category>
		<category><![CDATA[ревизия]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=113</guid>
		<description><![CDATA[Здесь пишут, что не надо полагаться на ревизии, т.к. они стираются при репликации и при сжатии (compaction) базы. Тем не менее посмотрим пример (работаем с данными, приведёнными в предыдущем посте): Ревизии документа доступны только при обращении по _id документа, так что из view они недоступны. Посмотрим все ревизии, к примеру, документа с _id=compas1_mod0: http://localhost:5984/modules/compas1_mod0?revs=true &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://wiki.apache.org/couchdb/DocumentRevisions">Здесь</a> пишут, что не надо полагаться на ревизии, т.к. они стираются при репликации и при сжатии (compaction) базы.</p>
<p>Тем не менее посмотрим пример (работаем с данными, приведёнными в <a href="http://www.job-blog.bullgare.ru/2009/08/пример-работы-с-view-для-couchdb/">предыдущем посте</a>):<br />
<span id="more-113"></span><br />
Ревизии документа доступны только при обращении по _id документа, так что из view они недоступны.<br />
Посмотрим все ревизии, к примеру, документа с _id=compas1_mod0:<br />
http://localhost:5984/modules/compas1_mod0?revs=true &#8211; получим:</p>
<pre class="code">
{"_id":"compas1_mod0","_rev":"2-4271250713","cid":"compas1","pos":0,"data":"ser_1_0","_revisions":{"start":2,"ids":["4271250713","4209376694"]}}
</pre>
<p>В &laquo;_revisions&raquo; хранятся ревизии документа, при этом к конкретной ревизии можно обратиться так (start=2, id=4271250713):<br />
http://localhost:5984/modules/compas1_mod0?rev=2-4271250713 &#8211; получим:</p>
<pre class="code">
{"_id":"compas1_mod0","_rev":"2-4271250713","cid":"compas1","pos":0,"data":"ser_1_0"}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2009/08/%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b0-%d1%81-%d1%80%d0%b5%d0%b2%d0%b8%d0%b7%d0%b8%d1%8f%d0%bc%d0%b8-%d0%b2-couchdb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Пример работы с view в CouchDB</title>
		<link>http://www.job-blog.bullgare.ru/2009/08/%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%80-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b-%d1%81-view-%d0%b4%d0%bb%d1%8f-couchdb/</link>
		<comments>http://www.job-blog.bullgare.ru/2009/08/%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%80-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b-%d1%81-view-%d0%b4%d0%bb%d1%8f-couchdb/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 12:53:19 +0000</pubDate>
		<dc:creator>bullgare</dc:creator>
				<category><![CDATA[Базы данных]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[CouchDb]]></category>
		<category><![CDATA[map-функция]]></category>
		<category><![CDATA[база данных]]></category>
		<category><![CDATA[бд]]></category>
		<category><![CDATA[пример]]></category>

		<guid isPermaLink="false">http://www.job-blog.bullgare.ru/?p=100</guid>
		<description><![CDATA[Вместо индексов в CouchDB используется map/reduce. Часто хватает создания одной только map-функции вида function(doc) { emit(key, value); } После чего в индексный файл помещаются все пары ключ-значение (из базы данных, к которой привязана map-функция), упорядоченные по ключу. Пример использования map-функций. Для начала надо создать базу данных с документами. На главной странице Futon&#8217;а нажимаем на &#171;create [...]]]></description>
			<content:encoded><![CDATA[<p>Вместо индексов в CouchDB используется map/reduce.<br />
Часто хватает создания одной только map-функции вида<br />
<span id="more-100"></span></p>
<pre class="code">
function(doc) {
  emit(key, value);
}
</pre>
<p>После чего в индексный файл помещаются все пары ключ-значение (из базы данных, к которой привязана map-функция), упорядоченные по ключу.</p>
<p><strong>Пример использования map-функций</strong>.<br />
Для начала надо создать базу данных с документами.<br />
<a href="http://localhost:5984/_utils/index.html">На главной странице Futon&#8217;а</a> нажимаем на &laquo;create database&raquo; &#8211; создаём базу &laquo;modules&raquo;. Дальше в этой базе &laquo;create document&raquo; &#8211; создаём документы:</p>
<pre class="code">
{_id: "compas1_mod0", _rev: "2-4271250713", cid: "compas1", pos: 0, data: "ser_1_0"},
{_id: "compas1_mod1", _rev: "2-2506425121", cid: "compas1", pos: 1, data: "ser_1_1"},
{_id: "compas1_mod2", _rev: "2-2782315297", cid: "compas1", pos: 2, data: "ser_1_2"} и
{_id: "compas2_mod0", _rev: "2-3025733035", cid: "compas2", pos: 0, data: "ser_2_0"}.
</pre>
<p>*при внесении текстового поля его надо брать в кавычки</p>
<p>Затем в селекте справа выбираем &laquo;temporary view&raquo;.<br />
<strong>Создаём первый view</strong>.<br />
В поле &laquo;Map Function:&raquo;:</p>
<pre class="code">
function(doc) {
  emit(doc.cid, doc);
}
</pre>
<p>и сохраняем (&laquo;save as&raquo;) с параметрами<br />
Design Document &#8211; modules_views<br />
View Name &#8211; compas_modules.</p>
<p><strong>Создаём второй view</strong>.<br />
В поле &laquo;Map Function:&raquo;:</p>
<pre class="code">
function(doc) {
  emit([doc.cid, doc.pos], doc);
}
</pre>
<p>и сохраняем (&laquo;save as&raquo;) с параметрами<br />
Design Document &#8211; modules_views<br />
View Name &#8211; one_module.</p>
<p>После чего в браузере можно набрать<br />
http://localhost:5984/modules/_design/modules_views/_view/compas_modules?key=&raquo;compas1&#8243; &#8211; выдаст</p>
<pre class="code">
{"total_rows":4,"offset":0,"rows":[
{"id":"compas1_mod0","key":"compas1","value":{"_id":"compas1_mod0","_rev":"2-4271250713","cid":"compas1","pos":0,"data":"ser_1_0"}},
{"id":"compas1_mod1","key":"compas1","value":{"_id":"compas1_mod1","_rev":"2-2506425121","cid":"compas1","pos":1,"data":"ser_1_1"}},
{"id":"compas1_mod2","key":"compas1","value":{"_id":"compas1_mod2","_rev":"2-2782315297","cid":"compas1","pos":2,"data":"ser_1_2"}}
]}
</pre>
<p>а если набрать<br />
http://localhost:5984/modules/_design/modules/_view/one_module?key=["compas1",0] &#8211; выдаст</p>
<pre class="code">
{"total_rows":4,"offset":0,"rows":[
{"id":"compas1_mod0","key":["compas1",0],"value":{"_id":"compas1_mod0","_rev":"2-4271250713","cid":"compas1","pos":0,"data":"ser_1_0"}}
]}
</pre>
<p>Вообще-то надо обязательно проверять каждый раз, присутствует ли указанное свойство у документа,<br />
т.е. вместо</p>
<pre class="code">
function(doc) {
  emit([doc.cid, doc.pos], doc);
}
</pre>
<p>желательно писать</p>
<pre class="code">
function(doc) {
  if (doc.cid &#038;&#038; doc.pos)
  {
    emit([doc.cid, doc.pos], doc);
  }
}
</pre>
<p>т.к. при регулярных возникновениях ошибок при использовании map-функции (что может случиться, если свойства нет) CouchDB запрещает любое индексирование, чтобы прекратить дальнейшее использование ресурсов.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.job-blog.bullgare.ru/2009/08/%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%80-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d1%8b-%d1%81-view-%d0%b4%d0%bb%d1%8f-couchdb/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

