<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.6.5" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>
<channel>
	<title>Comments on: Falcon Transactional Characteristics</title>
	<link>http://www.pythian.com/blogs/1107/falcon-transactional-characteristics</link>
	<description>News and views from Pythian DBAs</description>
	<pubDate>Thu,  4 Dec 2008 22:50:06 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
		<item>
		<title>By: Keith Murphy</title>
		<link>http://www.pythian.com/blogs/1107/falcon-transactional-characteristics#comment-236994</link>
		<dc:creator>Keith Murphy</dc:creator>
		<pubDate>Tue, 15 Jul 2008 19:16:26 +0000</pubDate>
		<guid>http://www.pythian.com/blogs/1107/falcon-transactional-characteristics#comment-236994</guid>
		<description>I always know I am on the right trail when people respond to my posts :).

A couple of points.  Not pointing out compression available in the new InnoDB plug-in was a serious oversight on my part. I am going to say I was having a senior moment. Shame on me!!

In retrospect, the idea of comparing Falcon and InnoDB was probably a mistake. My original idea was to have a post about each of the more well known transactional engines pointing out their features/benefits and disadvantages.  I am not sure at what point this post turned into Falcon vs InnoDB.  

Thanks everyone for the able defense(s) of InnoDB. InnoDB does have a long track record.  And there is something to be said for that. I don't think people will be rushing out to "ALTER TABLE" all their databases after they do get around to upgrading to 6.0. As a database administrator I would not recommend that anyone do that.  

I might be optimistic, but I do think that Falcon is going to have a great run and InnoDB is going to be around as a very viable option for a long long time.  As I said, competition brings out the best.  So, here's to competition!!</description>
		<content:encoded><![CDATA[<p>I always know I am on the right trail when people respond to my posts :).</p>
<p>A couple of points.  Not pointing out compression available in the new InnoDB plug-in was a serious oversight on my part. I am going to say I was having a senior moment. Shame on me!!</p>
<p>In retrospect, the idea of comparing Falcon and InnoDB was probably a mistake. My original idea was to have a post about each of the more well known transactional engines pointing out their features/benefits and disadvantages.  I am not sure at what point this post turned into Falcon vs InnoDB.  </p>
<p>Thanks everyone for the able defense(s) of InnoDB. InnoDB does have a long track record.  And there is something to be said for that. I don&#8217;t think people will be rushing out to &#8220;ALTER TABLE&#8221; all their databases after they do get around to upgrading to 6.0. As a database administrator I would not recommend that anyone do that.  </p>
<p>I might be optimistic, but I do think that Falcon is going to have a great run and InnoDB is going to be around as a very viable option for a long long time.  As I said, competition brings out the best.  So, here&#8217;s to competition!!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Xaprb</title>
		<link>http://www.pythian.com/blogs/1107/falcon-transactional-characteristics#comment-236741</link>
		<dc:creator>Xaprb</dc:creator>
		<pubDate>Tue, 15 Jul 2008 12:21:42 +0000</pubDate>
		<guid>http://www.pythian.com/blogs/1107/falcon-transactional-characteristics#comment-236741</guid>
		<description>As far as I understand it, Falcon's "True MVCC" works like this:

1) start transaction
2) do a bunch of updates, but don't lock anything, because that wouldn't be True MVCC
3) commit -- whoops, someone else updated some of that data and committed before I did.  Roll back.

I think a lot of the bullet points and phrases you copied from the documentation are only design goals at this point, and have never been substantiated.  What would be interesting is to examine Falcon's true behavior and see if they can be substantiated and really explained.  Right now they just sound like "Falcon will magically do everything right."  But even if they're true, I don't see the technical explanations of how this is supposed to happen and what the consequences are.  The "True MVCC" is just one example of that.

And do these things really work in the real world?  That's another issue.  For example -- the row cache.  It's supposed to increase cache efficiency, but the people I know who have benchmarked have had to tune it to the point of essentially disabling it to get better performance.  In other words, making it behave more like InnoDB.</description>
		<content:encoded><![CDATA[<p>As far as I understand it, Falcon&#8217;s &#8220;True MVCC&#8221; works like this:</p>
<p>1) start transaction<br />
2) do a bunch of updates, but don&#8217;t lock anything, because that wouldn&#8217;t be True MVCC<br />
3) commit &#8212; whoops, someone else updated some of that data and committed before I did.  Roll back.</p>
<p>I think a lot of the bullet points and phrases you copied from the documentation are only design goals at this point, and have never been substantiated.  What would be interesting is to examine Falcon&#8217;s true behavior and see if they can be substantiated and really explained.  Right now they just sound like &#8220;Falcon will magically do everything right.&#8221;  But even if they&#8217;re true, I don&#8217;t see the technical explanations of how this is supposed to happen and what the consequences are.  The &#8220;True MVCC&#8221; is just one example of that.</p>
<p>And do these things really work in the real world?  That&#8217;s another issue.  For example &#8212; the row cache.  It&#8217;s supposed to increase cache efficiency, but the people I know who have benchmarked have had to tune it to the point of essentially disabling it to get better performance.  In other words, making it behave more like InnoDB.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ken Jacobs</title>
		<link>http://www.pythian.com/blogs/1107/falcon-transactional-characteristics#comment-236547</link>
		<dc:creator>Ken Jacobs</dc:creator>
		<pubDate>Tue, 15 Jul 2008 06:14:22 +0000</pubDate>
		<guid>http://www.pythian.com/blogs/1107/falcon-transactional-characteristics#comment-236547</guid>
		<description>Thanks for the good words about InnoDB, Keith.  

The architecture of InnoDB is incredibly sound, and has been proven through years of experience at 1000s and 1000s of customer sites.  It will naturally take years for Falcon to prove itself in this way.  No doubt we will see more comparisons like this as Falcon (and MySQL 6.0) approach GA.   But it is important that such comparisons be complete.

Others have blogged in-depth on some other aspects of the Falcon architecture and differences between Falcon and InnoDB (see for example the article by PEter Zaitsev: http://www.mysqlperformanceblog.com/2007/01/12/falcon-storage-engine-design-review/).  

So, here I'll just briefly mention a few important things you didn't mention (in addition to the fact that InnoDB supports both statement-based and row-based replication, both of which have their place).

InnoDB supports Referential Integrity; Falcon won't do so until such support is implemented "above" the storage engine in a future release of MySQL.

InnoDB uses "clustered indexes", where the data is stored in the leaves of the (primary key or clustered) B-Tree index.   (This may be what you are alluding to when you say that the data is stored on disk in sorted order, though this is not quite correct, as the index pages themselves may be stored "randomly" on disk.)   This data structure supports an important optimization called a "covering index".  InnoDB can often retrieve all of the required data in a single i/o request (if it is not already in memory), since the non-key column values follow the value of the primary key in the clustered index.  The novel Falcon "row cache" may or may not hold the required data in memory, thus potentially requiring an extra i/o after the index lookup is performed.

The InnoDB architecture is very closely modeled on the foundational work of Jim Gray and Andreas Reuters, as described in "Transaction Processing: Concepts and Techniques".  Heikki Tuuri added some ideas taken from systems like Oracle ("undo or rollback segments" stored in the database) and created some additional very clever optimizations like the adaptive hash index and the insert buffer, which (as far as I understand) have no analogs in Falcon. 

Regarding compression, the recently released InnoDB Plugin (see the website: http://www.innodb.com/innodb_plugin/) supports very effective data compression (2:1 or better), and it uniquely compresses both data and indexes.  Some early users of compression in the InnoDB Plugin have reported outstanding results: significantly smaller databases and reduced i/o.  The InnoDB Plugin introduces several other significant new features, and it works in the context of MySQL 5.1.  

As you mention, the multi-core scalability issue may be (close to) being fixed.  In general, scalability limitations in well-designed software are often comparable to peeling an onion.  Remove one limitation, and another surfaces just below.   It's really not an exaggeration to say that (many of) the limitations of InnoDB's multi-core scalability are "bugs" or quite simple changes in a few low-level primitives for synchronization, as Mark Callaghan has demonstrated.  This is not to say that removing these limitations is simple or easy.  Achieving superior scalability is the trickiest part of any system and it is easy to introduce subtle bugs when you are working at that layer of the code.

Hope this additional information is useful.</description>
		<content:encoded><![CDATA[<p>Thanks for the good words about InnoDB, Keith.  </p>
<p>The architecture of InnoDB is incredibly sound, and has been proven through years of experience at 1000s and 1000s of customer sites.  It will naturally take years for Falcon to prove itself in this way.  No doubt we will see more comparisons like this as Falcon (and MySQL 6.0) approach GA.   But it is important that such comparisons be complete.</p>
<p>Others have blogged in-depth on some other aspects of the Falcon architecture and differences between Falcon and InnoDB (see for example the article by PEter Zaitsev: <a href="http://www.mysqlperformanceblog.com/2007/01/12/falcon-storage-engine-design-review/" rel="nofollow">http://www.mysqlperformanceblog.com/2007/01/12/falcon-storage-engine-design-review/</a>).  </p>
<p>So, here I&#8217;ll just briefly mention a few important things you didn&#8217;t mention (in addition to the fact that InnoDB supports both statement-based and row-based replication, both of which have their place).</p>
<p>InnoDB supports Referential Integrity; Falcon won&#8217;t do so until such support is implemented &#8220;above&#8221; the storage engine in a future release of MySQL.</p>
<p>InnoDB uses &#8220;clustered indexes&#8221;, where the data is stored in the leaves of the (primary key or clustered) B-Tree index.   (This may be what you are alluding to when you say that the data is stored on disk in sorted order, though this is not quite correct, as the index pages themselves may be stored &#8220;randomly&#8221; on disk.)   This data structure supports an important optimization called a &#8220;covering index&#8221;.  InnoDB can often retrieve all of the required data in a single i/o request (if it is not already in memory), since the non-key column values follow the value of the primary key in the clustered index.  The novel Falcon &#8220;row cache&#8221; may or may not hold the required data in memory, thus potentially requiring an extra i/o after the index lookup is performed.</p>
<p>The InnoDB architecture is very closely modeled on the foundational work of Jim Gray and Andreas Reuters, as described in &#8220;Transaction Processing: Concepts and Techniques&#8221;.  Heikki Tuuri added some ideas taken from systems like Oracle (&#8221;undo or rollback segments&#8221; stored in the database) and created some additional very clever optimizations like the adaptive hash index and the insert buffer, which (as far as I understand) have no analogs in Falcon. </p>
<p>Regarding compression, the recently released InnoDB Plugin (see the website: <a href="http://www.innodb.com/innodb_plugin/" rel="nofollow">http://www.innodb.com/innodb_plugin/</a>) supports very effective data compression (2:1 or better), and it uniquely compresses both data and indexes.  Some early users of compression in the InnoDB Plugin have reported outstanding results: significantly smaller databases and reduced i/o.  The InnoDB Plugin introduces several other significant new features, and it works in the context of MySQL 5.1.  </p>
<p>As you mention, the multi-core scalability issue may be (close to) being fixed.  In general, scalability limitations in well-designed software are often comparable to peeling an onion.  Remove one limitation, and another surfaces just below.   It&#8217;s really not an exaggeration to say that (many of) the limitations of InnoDB&#8217;s multi-core scalability are &#8220;bugs&#8221; or quite simple changes in a few low-level primitives for synchronization, as Mark Callaghan has demonstrated.  This is not to say that removing these limitations is simple or easy.  Achieving superior scalability is the trickiest part of any system and it is easy to introduce subtle bugs when you are working at that layer of the code.</p>
<p>Hope this additional information is useful.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Callaghan</title>
		<link>http://www.pythian.com/blogs/1107/falcon-transactional-characteristics#comment-236454</link>
		<dc:creator>Mark Callaghan</dc:creator>
		<pubDate>Tue, 15 Jul 2008 03:29:07 +0000</pubDate>
		<guid>http://www.pythian.com/blogs/1107/falcon-transactional-characteristics#comment-236454</guid>
		<description>The compression isn't that good, and as Jim stated, encoding is a more accurate description -- http://forums.mysql.com/read.php?133,134378,134760#msg-134760</description>
		<content:encoded><![CDATA[<p>The compression isn&#8217;t that good, and as Jim stated, encoding is a more accurate description &#8212; <a href="http://forums.mysql.com/read.php?133,134378,134760#msg-134760" rel="nofollow">http://forums.mysql.com/read.php?133,134378,134760#msg-134760</a></p>
]]></content:encoded>
	</item>
</channel>
</rss>
