<?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>Nerdpress.org &#187; Sqlite</title>
	<atom:link href="http://www.nerdpress.org/tag/sqlite/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.nerdpress.org</link>
	<description>^__^</description>
	<lastBuildDate>Thu, 03 May 2012 15:03:19 +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>sqlite VACUUM</title>
		<link>http://www.nerdpress.org/2010/06/23/sqlite-vacuum/</link>
		<comments>http://www.nerdpress.org/2010/06/23/sqlite-vacuum/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 11:20:14 +0000</pubDate>
		<dc:creator>Ivo Bathke</dc:creator>
				<category><![CDATA[Sqlite]]></category>

		<guid isPermaLink="false">http://nerdpress.org/?p=1070</guid>
		<description><![CDATA[Mal ein kleines Zauberwort für Zwischendurch: VACUUM; Dieses Kommando räumt eine Sqlite Datenbank auf, killt unnötige Leerzeichen und defragmentiert den Datenbank File. In meinem Fall war die DB nach dem löschen einer relativ großen Table immer noch auf ca 20MB, das hat mich doch stutzig gemacht und zu diesem Kommando geführt. Nachdem ich es ausgeführt [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Mal ein kleines Zauberwort für Zwischendurch:<br />
<strong><a href="http://www.sqlite.org/lang_vacuum.html">VACUUM</a>;</strong></p>
<p>Dieses Kommando räumt eine Sqlite Datenbank auf, killt unnötige Leerzeichen und defragmentiert den Datenbank File.</p>
<p>In meinem Fall war die DB nach dem löschen einer relativ großen Table immer noch auf ca 20MB, das hat mich doch stutzig gemacht und zu diesem Kommando geführt.<br />
Nachdem ich es ausgeführt hatte, war der File dann tatsächlich auf 2MB geschrumpft!</p>
<p>Sollte man vielleicht nicht im laufendem Betrieb machen und als nächstes schau ich mir dann <a href="http://www.sqlite.org/pragma.html#pragma_auto_vacuum">AUTO_VACUUM</a> an.</p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.nerdpress.org/2010/06/23/sqlite-vacuum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP und Sqlite Transaktionen</title>
		<link>http://www.nerdpress.org/2010/03/09/php-und-sqlite-transaktionen/</link>
		<comments>http://www.nerdpress.org/2010/03/09/php-und-sqlite-transaktionen/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 10:30:11 +0000</pubDate>
		<dc:creator>Ivo Bathke</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Sqlite]]></category>

		<guid isPermaLink="false">http://nerdpress.org/?p=827</guid>
		<description><![CDATA[Ich bin ja Fan von sqlite, besonders für kleinere Projekte, wo kein hohes paralelles Schreiben zu erwarten ist, also für fast alle kleineren Seiten. Keine Datenbank Administration, einfach loslegen und schnell ist es auch noch. Ein paar Krücken gibts aber schon, zB bei Transaktionen (die MySql im Regelfall gar nicht kann ;)). Ich benutze die [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Ich bin ja Fan von sqlite, besonders für kleinere Projekte, wo kein hohes paralelles Schreiben zu erwarten ist, also für fast alle kleineren Seiten.<br />
Keine Datenbank Administration, einfach loslegen und schnell ist es auch noch.</p>
<p>Ein paar Krücken gibts aber schon, zB bei Transaktionen (die MySql im Regelfall gar nicht kann ;)).<br />
Ich benutze die in diesem Fall für multiple Inserts, um da Performance rauszuschlagen.</p>
<p>Über diese bin ich letztens noch gestolpert:</p>
<p>1. Es ist keine gute Idee Transaktionen zu stückeln und sequentiell abzuarbeiten.(warum auch immer man auf diese Idee kommt ;))<br />
besser ist: alle Queries zu buffern und dann in einer Transaktion auszuführen.<br />
Denn Transaktionen locken die DB und nach meiner Erfahrung kann das PHP SQLiteDatabase Object den Datenbank Cursor nicht richtig schließen.<br />
Das führt dann zu sowas: <em>&#8220;cannot start a transaction within a transaction&#8221;</em><br />
<span id="more-827"></span><br />
Folgender Code:</p>
<pre class="brush: php; title: ; notranslate">
for ($i = 0 ; $i &lt; count($data) ; $i++) {
	$q='BEGIN;';
	$q.=&quot;INSERT INTO &quot;.$this-&gt;table.&quot; (bla) VALUES ('blub');&quot;;
	$q.='COMMIT;';
	$this-&gt;_db-&gt;query($q);
}
</pre>
<p>wird also nicht klappen.</p>
<p>Bei PDO gibt es da wohl bessere Unterstützung für Transaktionen.<br />
Das PHP SQLiteDatabase Object ist da etwas kryptisch.</p>
<p>2. ->query() mag keine Transaktionen, ->queryExec() jedoch schon.<br />
Wahrscheinlich deswegen : </p>
<blockquote><p>SQLite führt Mehrfach-Anfragen, die durch Semikolon getrennt wurden, aus, so dass Sie Anfragen ausführen können, die aus einer Datei oder über ein Skript geladen wurden. Wie auch immer, das funktioniert nur, wenn das Ergebins der Anfrage nicht benutzt wird. Sollte es doch genutzt werden, wird nur die erste SQL-Anfrage der Liste ausgeführt. Die Funktion sqlite_exec() wird immer Mehrfach-Anfragen ausführen.</p>
<p>Wenn Mehrfach-Anfrage ausgeführt werden, wird die Funktion im Fehlerfall FALSE zurückgeben, anderenfalls jedoch ein undefiniertes Ergebnis (das kann, sollte die Anfrage gelingen, TRUE oder ein Ergebnis-Handle sein).
</p></blockquote>
<p>Also ->queryExec() kanns und ->query kanns irgendwie nicht.<br />
Dort würde nur der erste query ausgeführt und der Rest stillschweigend ignoriert, d.h. die Anweisung gibt true zurück.<br />
Es würde also viele Tupel -unbemerkt- verlorengehen.</p>
<p>Folgender Code hingegen klappt dann:</p>
<pre class="brush: php; title: ; notranslate">
$q='';
$this-&gt;_db-&gt;queryExec('BEGIN;');
for ($i = 0 ; $i &lt; count($data) ; $i++) {
	$q.=&quot;INSERT INTO &quot;.$this-&gt;table.&quot; (bla) VALUES ('blub');&quot;;
}
$this-&gt;_db-&gt;queryExec($q);
$this-&gt;_db-&gt;queryExec('COMMIT;');
</pre>
<p>Diese Seite war dabei übrigens recht hilfreich:<br />
<a href="http://www.ordix.de/ORDIXNews/1_2004/unix_linux_2.html">http://www.ordix.de/ORDIXNews/1_2004/unix_linux_2.html</a></p>
<p>Ja krass, gar kein Framework benutzt hier! ;)</p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.nerdpress.org/2010/03/09/php-und-sqlite-transaktionen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>symfony und multiple inserts</title>
		<link>http://www.nerdpress.org/2009/11/11/symfony-und-multiple-inserts/</link>
		<comments>http://www.nerdpress.org/2009/11/11/symfony-und-multiple-inserts/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 17:24:46 +0000</pubDate>
		<dc:creator>Ivo Bathke</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[propel]]></category>
		<category><![CDATA[Sqlite]]></category>
		<category><![CDATA[Symfony]]></category>

		<guid isPermaLink="false">http://nerdpress.org/?p=559</guid>
		<description><![CDATA[Manchmal sollte man multiple Inserts machen, ist doch performanter als in jedem Schleifendurchlauf die Database Engine zu bemühen. Falls man sich mal fragt wie man multiple Inserts mit symfony hinkriegt, fängt man an zu googlen und stößt schnell auf dieses Snippet. Und bevor man da rumeiert und das auf zB Sqlite umschreibt, einfach mal Propel [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Manchmal sollte man multiple Inserts machen, ist doch performanter als in jedem Schleifendurchlauf die Database Engine zu bemühen.</p>
<p>Falls man sich mal fragt wie man multiple Inserts mit symfony hinkriegt, fängt man an zu googlen und stößt schnell auf dieses <a href="http://snippets.symfony-project.org/snippet/307" target="_blank">Snippet</a>.</p>
<p>Und bevor man da rumeiert und das auf zB Sqlite umschreibt, einfach mal<a href="http://propel.phpdb.org/trac/wiki/Users/Documentation/1.3/HowTos/Transactions" target="_blank"> Propel Transaktionen</a> anschauen:</p>
<p><span id="more-559"></span>
<pre class="brush: php; title: ; notranslate">

$con = Propel::getConnection();
$con-&gt;beginTransaction();

foreach ($temp as $item) {

$blog = new Blogs();
$blog-&gt;setTitle($title);

$blog-&gt;save($con);

}

$con-&gt;commit();
</pre>
<p>Klappt super, zumindest mit Sqlite bei mir hier.</p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.nerdpress.org/2009/11/11/symfony-und-multiple-inserts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

