<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Mobile DB Performance Testing: with Hardware</title>
	<atom:link href="http://elegantcode.com/2009/08/24/mobile-db-performance-testing/feed/" rel="self" type="application/rss+xml" />
	<link>http://elegantcode.com/2009/08/24/mobile-db-performance-testing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mobile-db-performance-testing</link>
	<description></description>
	<lastBuildDate>Sun, 12 Feb 2012 18:54:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
	<item>
		<title>By: Raul Moratalla</title>
		<link>http://elegantcode.com/2009/08/24/mobile-db-performance-testing/comment-page-1/#comment-48948</link>
		<dc:creator>Raul Moratalla</dc:creator>
		<pubDate>Mon, 31 Aug 2009 08:00:29 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/08/12/mobile-db-performance-testing/#comment-48948</guid>
		<description>Hi,did you made the tests using the ported c# version of Sqlite? It should be interesting to make more tests with more databases :)</description>
		<content:encoded><![CDATA[<p>Hi,did you made the tests using the ported c# version of Sqlite? It should be interesting to make more tests with more databases <img src='http://elegantcode.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: tom s.</title>
		<link>http://elegantcode.com/2009/08/24/mobile-db-performance-testing/comment-page-1/#comment-48527</link>
		<dc:creator>tom s.</dc:creator>
		<pubDate>Mon, 17 Aug 2009 19:24:23 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/08/12/mobile-db-performance-testing/#comment-48527</guid>
		<description>I&#039;ve made some comments about the Sybase results at http://iablog.sybase.com/tslee/2009/08/elegantcode-on-mobile-databases/. 

Some of what I say is similar to Steve Graves&#039; comment above - some of these operations will be I/O bound and as a result it really matters what kind of guarantees the different databases are offering when you commit changes, for example. It&#039;s valuable to see comparisons, but it is important that they not just be comparisons of some of the default settings in the different products (cache size, for example).</description>
		<content:encoded><![CDATA[<p>I&#8217;ve made some comments about the Sybase results at <a href="http://iablog.sybase.com/tslee/2009/08/elegantcode-on-mobile-databases/" rel="nofollow">http://iablog.sybase.com/tslee/2009/08/elegantcode-on-mobile-databases/</a>. </p>
<p>Some of what I say is similar to Steve Graves&#8217; comment above &#8211; some of these operations will be I/O bound and as a result it really matters what kind of guarantees the different databases are offering when you commit changes, for example. It&#8217;s valuable to see comparisons, but it is important that they not just be comparisons of some of the default settings in the different products (cache size, for example).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Steve Graves</title>
		<link>http://elegantcode.com/2009/08/24/mobile-db-performance-testing/comment-page-1/#comment-48462</link>
		<dc:creator>Steve Graves</dc:creator>
		<pubDate>Fri, 14 Aug 2009 15:52:52 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/08/12/mobile-db-performance-testing/#comment-48462</guid>
		<description>Some comments about the Perst performance results from McObject (you can download the Perst embedded database http://www.mcobject.com/perst  )

First, thanks for the kind words about the support you received from us.  Our commitment to excellent customer support is a great source of pride for us, so the positive feedback is greatly appreciated.

The results are more or less what we would have expected - Perst shows good search performance and not-as-good performance of update requests and iteration. Lower performance of insert/update is caused by short transactions; i.e. a commit is performed after each update. Perst doesn&#039;t like short transactions. If you group multiple changes into each update transaction (which probably more accurately reflects real-world transactions more often than not) then Perst&#039;s performance should be better. For a quick and easy experiment, just try performing a commit after each N-th transaction, and experiment with the value of N. 

As to why SQLite and other databases perform better in insert/update, first of all some might implicitly be using delayed or asynchronous commit (changes are written to the database by a separate thread, so commit() actually doesn&#039;t mean that results of this transaction cannot be lost in case of power failure). This is just speculation; someone would need to dig into the internals of the systems to determine if, in fact, that is the case.  Unless you explicitly relax it, Perst enforces the ACID properties of transactions.

Another reason can be the log-less nature of the Perst transaction mechanism. Perst has no log file; instead, shadow copies of objects 
are created. When the transaction is committed, all modified pages have to be flushed to the disk (the shadow pages become the pages of record). The total size of these pages can be larger than just the modified objects written to the transaction log (i.e. more bytes have to be written because any given page has &gt;1 object on it). Further, random modified pages in Perst can be (and probably are) located in different parts of the disk. Which will require additional disk head positioning (which is the slowest operation - 10msec average disk access time for modern disks) and as a result - worse performance compared to a sequential write to append to a transaction log file. 

Concerning iteration speed - RDBMS table records are located together and so makes it possible to scan them very efficiently
(disks perform sequential reads much, much faster than random reads). Remember, tables are organized as rows, so scanning down a table&#039;s rows is very fast.  Perst has to deal with much more complex object structure and is oriented to a different access pattern: it is intended that an index is used to locate an object by some key and then some cluster of related objects is accessed using references. So Perst makes an assumption that objects that were created together are also accessed together and it tries to allocate these objects sequentially on the disk (locality of reference). Consequently, objects of different classes are interspersed in the storage, so sequential search will be less efficient in this case since it will require a lot of disk head repositioning.

I hope this helps put some perspective on your results. Feel free to contact us.

regards,
McObject Support</description>
		<content:encoded><![CDATA[<p>Some comments about the Perst performance results from McObject (you can download the Perst embedded database <a href="http://www.mcobject.com/perst" rel="nofollow">http://www.mcobject.com/perst</a>  )</p>
<p>First, thanks for the kind words about the support you received from us.  Our commitment to excellent customer support is a great source of pride for us, so the positive feedback is greatly appreciated.</p>
<p>The results are more or less what we would have expected &#8211; Perst shows good search performance and not-as-good performance of update requests and iteration. Lower performance of insert/update is caused by short transactions; i.e. a commit is performed after each update. Perst doesn&#8217;t like short transactions. If you group multiple changes into each update transaction (which probably more accurately reflects real-world transactions more often than not) then Perst&#8217;s performance should be better. For a quick and easy experiment, just try performing a commit after each N-th transaction, and experiment with the value of N. </p>
<p>As to why SQLite and other databases perform better in insert/update, first of all some might implicitly be using delayed or asynchronous commit (changes are written to the database by a separate thread, so commit() actually doesn&#8217;t mean that results of this transaction cannot be lost in case of power failure). This is just speculation; someone would need to dig into the internals of the systems to determine if, in fact, that is the case.  Unless you explicitly relax it, Perst enforces the ACID properties of transactions.</p>
<p>Another reason can be the log-less nature of the Perst transaction mechanism. Perst has no log file; instead, shadow copies of objects<br />
are created. When the transaction is committed, all modified pages have to be flushed to the disk (the shadow pages become the pages of record). The total size of these pages can be larger than just the modified objects written to the transaction log (i.e. more bytes have to be written because any given page has &gt;1 object on it). Further, random modified pages in Perst can be (and probably are) located in different parts of the disk. Which will require additional disk head positioning (which is the slowest operation &#8211; 10msec average disk access time for modern disks) and as a result &#8211; worse performance compared to a sequential write to append to a transaction log file. </p>
<p>Concerning iteration speed &#8211; RDBMS table records are located together and so makes it possible to scan them very efficiently<br />
(disks perform sequential reads much, much faster than random reads). Remember, tables are organized as rows, so scanning down a table&#8217;s rows is very fast.  Perst has to deal with much more complex object structure and is oriented to a different access pattern: it is intended that an index is used to locate an object by some key and then some cluster of related objects is accessed using references. So Perst makes an assumption that objects that were created together are also accessed together and it tries to allocate these objects sequentially on the disk (locality of reference). Consequently, objects of different classes are interspersed in the storage, so sequential search will be less efficient in this case since it will require a lot of disk head repositioning.</p>
<p>I hope this helps put some perspective on your results. Feel free to contact us.</p>
<p>regards,<br />
McObject Support</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Checking Your Hire Van Over Thoroughly First &#124; AZA Cars</title>
		<link>http://elegantcode.com/2009/08/24/mobile-db-performance-testing/comment-page-1/#comment-48458</link>
		<dc:creator>Checking Your Hire Van Over Thoroughly First &#124; AZA Cars</dc:creator>
		<pubDate>Fri, 14 Aug 2009 12:06:42 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/08/12/mobile-db-performance-testing/#comment-48458</guid>
		<description>[...] Mobile DB Performance Testing &#124; Elegant Code [...]</description>
		<content:encoded><![CDATA[<p>[...] Mobile DB Performance Testing | Elegant Code [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris Brandsma</title>
		<link>http://elegantcode.com/2009/08/24/mobile-db-performance-testing/comment-page-1/#comment-48429</link>
		<dc:creator>Chris Brandsma</dc:creator>
		<pubDate>Thu, 13 Aug 2009 20:14:55 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/08/12/mobile-db-performance-testing/#comment-48429</guid>
		<description>Hey everyone,  seems there is interest in two things: more databases, and actual device times.  I can add device times, and I&#039;ll work on more databases.  If that happens, expect this to get republished.</description>
		<content:encoded><![CDATA[<p>Hey everyone,  seems there is interest in two things: more databases, and actual device times.  I can add device times, and I&#8217;ll work on more databases.  If that happens, expect this to get republished.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ike</title>
		<link>http://elegantcode.com/2009/08/24/mobile-db-performance-testing/comment-page-1/#comment-48418</link>
		<dc:creator>Ike</dc:creator>
		<pubDate>Thu, 13 Aug 2009 17:58:53 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/08/12/mobile-db-performance-testing/#comment-48418</guid>
		<description>Hi,

Just wanted to give another option.
VistaDB (this one closely matches SQLCE for compatibility, but has many other features not present in SQLCE).
I&#039;m not working for them. Also I have no real experience with it.
Just thought you might want to check that one out too.

Best regards
Ike</description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>Just wanted to give another option.<br />
VistaDB (this one closely matches SQLCE for compatibility, but has many other features not present in SQLCE).<br />
I&#8217;m not working for them. Also I have no real experience with it.<br />
Just thought you might want to check that one out too.</p>
<p>Best regards<br />
Ike</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dew Drop &#8211; August 13, 2009 &#124; Alvin Ashcraft's Morning Dew</title>
		<link>http://elegantcode.com/2009/08/24/mobile-db-performance-testing/comment-page-1/#comment-48411</link>
		<dc:creator>Dew Drop &#8211; August 13, 2009 &#124; Alvin Ashcraft's Morning Dew</dc:creator>
		<pubDate>Thu, 13 Aug 2009 12:45:43 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/08/12/mobile-db-performance-testing/#comment-48411</guid>
		<description>[...] Mobile DB Performance Testing (Chris Brandsma) [...]</description>
		<content:encoded><![CDATA[<p>[...] Mobile DB Performance Testing (Chris Brandsma) [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: madman2</title>
		<link>http://elegantcode.com/2009/08/24/mobile-db-performance-testing/comment-page-1/#comment-48392</link>
		<dc:creator>madman2</dc:creator>
		<pubDate>Thu, 13 Aug 2009 08:12:16 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/08/12/mobile-db-performance-testing/#comment-48392</guid>
		<description>The difference between the emulator and the hardware can be substantial as we all know. What I&#039;d be interested in is what &#039;kind&#039; of differences are there? It&#039;s not just about cpu or i/o speed because what we are effectively testing in the emulator is the quality of the emulation code.
I don&#039;t think that this invalidates the tests done here for which many thanks Chris. They provide an interesting insight into relative performance issues but as you raise in the article issues such as &#039;sync&#039; and backend compatibility are often far more important. We&#039;re moving to SQL Anywhere (along with the EntitySpaces persistence layer) for those reasons and if our first impressions are anything to go by it&#039;s faster than anything we&#039;ve used before.

MM2</description>
		<content:encoded><![CDATA[<p>The difference between the emulator and the hardware can be substantial as we all know. What I&#8217;d be interested in is what &#8216;kind&#8217; of differences are there? It&#8217;s not just about cpu or i/o speed because what we are effectively testing in the emulator is the quality of the emulation code.<br />
I don&#8217;t think that this invalidates the tests done here for which many thanks Chris. They provide an interesting insight into relative performance issues but as you raise in the article issues such as &#8216;sync&#8217; and backend compatibility are often far more important. We&#8217;re moving to SQL Anywhere (along with the EntitySpaces persistence layer) for those reasons and if our first impressions are anything to go by it&#8217;s faster than anything we&#8217;ve used before.</p>
<p>MM2</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Reflective Perspective - Chris Alcock &#187; The Morning Brew #411</title>
		<link>http://elegantcode.com/2009/08/24/mobile-db-performance-testing/comment-page-1/#comment-48386</link>
		<dc:creator>Reflective Perspective - Chris Alcock &#187; The Morning Brew #411</dc:creator>
		<pubDate>Thu, 13 Aug 2009 07:26:57 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/08/12/mobile-db-performance-testing/#comment-48386</guid>
		<description>[...] Mobile DB Performance Testing - Chris Brandsma looks at the performance of four of the most common embedded database engines performing common operations such as creating tables, inserting, updating, selecting, iterating and joining. [...]</description>
		<content:encoded><![CDATA[<p>[...] Mobile DB Performance Testing &#8211; Chris Brandsma looks at the performance of four of the most common embedded database engines performing common operations such as creating tables, inserting, updating, selecting, iterating and joining. [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andreas Böckert</title>
		<link>http://elegantcode.com/2009/08/24/mobile-db-performance-testing/comment-page-1/#comment-48352</link>
		<dc:creator>Andreas Böckert</dc:creator>
		<pubDate>Wed, 12 Aug 2009 19:24:05 +0000</pubDate>
		<guid isPermaLink="false">http://elegantcode.com/2009/08/12/mobile-db-performance-testing/#comment-48352</guid>
		<description>Did you run all the tests on a mobile device? I think that running on an actual device may provide different results. In particular, the relative performance of CPU vs ram vs Disk/flash may. I.e. when focusing on CPU, the emulator may be 3 times faster but when it comes disk IO it may be 2 times slower. (Arbitrary numbers). Different optimizations may yield different results here.

Greets</description>
		<content:encoded><![CDATA[<p>Did you run all the tests on a mobile device? I think that running on an actual device may provide different results. In particular, the relative performance of CPU vs ram vs Disk/flash may. I.e. when focusing on CPU, the emulator may be 3 times faster but when it comes disk IO it may be 2 times slower. (Arbitrary numbers). Different optimizations may yield different results here.</p>
<p>Greets</p>
]]></content:encoded>
	</item>
</channel>
</rss>

