<?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>goodguy о разработке &#187; berkleydb</title>
	<atom:link href="http://dev.good-guy.me/archives/tag/berkleydb/feed" rel="self" type="application/rss+xml" />
	<link>http://dev.good-guy.me</link>
	<description>python, zope, php, sqlite, postgresql, mysql и прочее с чем сталкиваюсь</description>
	<lastBuildDate>Sun, 04 Dec 2011 17:17:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>SQLite и JOIN</title>
		<link>http://dev.good-guy.me/archives/322</link>
		<comments>http://dev.good-guy.me/archives/322#comments</comments>
		<pubDate>Fri, 06 Mar 2009 09:25:49 +0000</pubDate>
		<dc:creator>goodguy</dc:creator>
				<category><![CDATA[Базы данных]]></category>
		<category><![CDATA[berkleydb]]></category>
		<category><![CDATA[sqlite]]></category>

		<guid isPermaLink="false">http://dev.goodguy.spb.ru/?p=322</guid>
		<description><![CDATA[<a href="http://dev.good-guy.me/archives/322" title="SQLite и JOIN"></a>Обычно по работе, когда требуется сохранить какую-то информацию (вроде справочников абонентов) в компоненте, которая отвязана от основного проекта, я стараюсь использовать BerkleyDB. Она быстра, когда для доступа используется только какой-то ключ и вполне практична. Но в одном из проектов с &#8230;<p class="read-more"><a href="http://dev.good-guy.me/archives/322">Читать далее &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://dev.good-guy.me/archives/322" title="SQLite и JOIN"></a><p style="text-align: justify">Обычно по работе, когда требуется сохранить какую-то информацию (вроде справочников абонентов) в компоненте, которая отвязана от основного проекта, я стараюсь использовать <a href="http://www.oracle.com/technology/products/berkeley-db/index.html">BerkleyDB</a>. Она быстра, когда для доступа используется только какой-то ключ и вполне практична. Но в одном из проектов с ростом количества доступов к файлу базы от разных потоков стали происходить коллизии и терялись части данных (частично виню в этом механизм доступа, реализованный в PHP, частично &#8212; недоработки в компоненте). К тому же усложнялась структура данных, хранящихся в каждом ключе. Для разрешения вопроса был выбран <a href="http://www.sqlite.org/">SQLite</a>, т.к. с ним возможно разрисовать структуру данных, и поддерживается одновременная работа с одной базой.</p>
<p style="text-align: justify">В ходе проверок запросов выяснился весьма интересный момент. В привычных мне ранее PostgreSQL или MySQL конструкция вида:
</p>
<pre name="code" class="sql:nocontrols">
SELECT b.id, f.title as foo_title, b.title
FROM bar b LEFT JOIN foo f ON f.id=b.foo_id
</pre>
<p style="text-align: justify">будет отрабатывать вполне успешно. Но не в SQLite. И дело не только в том, что конструкцию с <tt>JOIN</tt> надо заключать в круглые скобки. Внутренняя логика SQLite превращает это выражение в один источник и не позволяет выделить из какой именно таблицы тебе нужно взять поле. И в данном примере значение <tt>title</tt> из <tt>foo</tt> перекроет значение <tt>title</tt> из <tt>bar</tt>. Т.е. результатом запроса вида:</p>
<pre name="code" class="sql:nocontrols">
SELECT id, title
FROM (bar b LEFT JOIN foo f ON f.id=b.foo_id)
</pre>
<p style="text-align: justify">Будут значения <tt>id</tt> и <tt>title</tt> из таблицы <tt>foo</tt>. Выход один: делать объединение таблиц в конструкции <tt>WHERE</tt>, тем более, как говорит <a href="http://www.sqlite.org/cvstrac/wiki?p=PerformanceTuning">документация</a> потери быстродействия в этом случае не будет.</p>
]]></content:encoded>
			<wfw:commentRss>http://dev.good-guy.me/archives/322/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

