<?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: The Doom of Multiple Storage Engines</title>
	<atom:link href="http://www.mysqlperformanceblog.com/2010/05/08/the-doom-of-multiple-storage-engines/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mysqlperformanceblog.com/2010/05/08/the-doom-of-multiple-storage-engines/</link>
	<description>Percona&#039;s MySQL &#38; InnoDB performance and scalability blog</description>
	<lastBuildDate>Sat, 11 Feb 2012 16:45:54 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Simon</title>
		<link>http://www.mysqlperformanceblog.com/2010/05/08/the-doom-of-multiple-storage-engines/comment-page-1/#comment-765562</link>
		<dc:creator>Simon</dc:creator>
		<pubDate>Tue, 25 May 2010 08:31:42 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=2626#comment-765562</guid>
		<description>Yea, I don&#039;t use MySQL hence I don&#039;t have the possibility to use different storage engines as all other database engines have only one storage engine. I&#039;ve never suffered from that.</description>
		<content:encoded><![CDATA[<p>Yea, I don&#8217;t use MySQL hence I don&#8217;t have the possibility to use different storage engines as all other database engines have only one storage engine. I&#8217;ve never suffered from that.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: peter</title>
		<link>http://www.mysqlperformanceblog.com/2010/05/08/the-doom-of-multiple-storage-engines/comment-page-1/#comment-765373</link>
		<dc:creator>peter</dc:creator>
		<pubDate>Tue, 18 May 2010 04:04:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=2626#comment-765373</guid>
		<description>Kevin,

Yes there are situation when MyISAM is faster.  However it is not as general as &quot;all selects are faster&quot; - MyISAM has serve problems with contention on the key cache mutex limiting scalability dramatically as well as slow access to the row data if access is done by index because it is only cached in OS cache. 

What you seems to be missing is  if application performance can be improved by using mix of storage engines it does not mean it is justified. Every complication has it costs and I believe for 95% of MySQL applications  the performance advantages by such fine tuning in storage engines is not worth it.    

This is not to mention if MySQL would be highly optimized for transactional storage engine such as Innodb the gap would be a lot less.</description>
		<content:encoded><![CDATA[<p>Kevin,</p>
<p>Yes there are situation when MyISAM is faster.  However it is not as general as &#8220;all selects are faster&#8221; &#8211; MyISAM has serve problems with contention on the key cache mutex limiting scalability dramatically as well as slow access to the row data if access is done by index because it is only cached in OS cache. </p>
<p>What you seems to be missing is  if application performance can be improved by using mix of storage engines it does not mean it is justified. Every complication has it costs and I believe for 95% of MySQL applications  the performance advantages by such fine tuning in storage engines is not worth it.    </p>
<p>This is not to mention if MySQL would be highly optimized for transactional storage engine such as Innodb the gap would be a lot less.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Kevin</title>
		<link>http://www.mysqlperformanceblog.com/2010/05/08/the-doom-of-multiple-storage-engines/comment-page-1/#comment-763178</link>
		<dc:creator>Kevin</dc:creator>
		<pubDate>Wed, 12 May 2010 15:14:47 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=2626#comment-763178</guid>
		<description>Doesn&#039;t MyISAM still offer some significant benefits in certain situations?  If you have a database with a relatively small, constant, known INSERT/UPDATE load, but a very large SELECT load, are you not still better off using MyISAM with fixed-length rows over InnoDB?

If so, I have to question the assumption that &quot;for probably 95% of applications single storage engine would be good enough&quot; if that storage engine is InnoDB.  I find it hard to believe that the sort of use model I describe accounts for less than 5% of all MySQL uses.

Has this situation changed?</description>
		<content:encoded><![CDATA[<p>Doesn&#8217;t MyISAM still offer some significant benefits in certain situations?  If you have a database with a relatively small, constant, known INSERT/UPDATE load, but a very large SELECT load, are you not still better off using MyISAM with fixed-length rows over InnoDB?</p>
<p>If so, I have to question the assumption that &#8220;for probably 95% of applications single storage engine would be good enough&#8221; if that storage engine is InnoDB.  I find it hard to believe that the sort of use model I describe accounts for less than 5% of all MySQL uses.</p>
<p>Has this situation changed?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: waterguo</title>
		<link>http://www.mysqlperformanceblog.com/2010/05/08/the-doom-of-multiple-storage-engines/comment-page-1/#comment-762650</link>
		<dc:creator>waterguo</dc:creator>
		<pubDate>Tue, 11 May 2010 17:32:01 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=2626#comment-762650</guid>
		<description>well said. modularization comes with cost. in database world, the cost is too high to be ignored.</description>
		<content:encoded><![CDATA[<p>well said. modularization comes with cost. in database world, the cost is too high to be ignored.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Henrik Ingo</title>
		<link>http://www.mysqlperformanceblog.com/2010/05/08/the-doom-of-multiple-storage-engines/comment-page-1/#comment-762481</link>
		<dc:creator>Henrik Ingo</dc:creator>
		<pubDate>Tue, 11 May 2010 11:53:44 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=2626#comment-762481</guid>
		<description>Hi Roland

The points you raise are actually being worked on:

CREATE TABLE options exists in MariaDB 5.2: http://askmonty.org/wiki/Manual:Extending_CREATE_TABLE

As part of Timour&#039;s &quot;Query Fragment Pushdown&quot; work (this is a set of several worklogs) in the SE summit we also discussed the issue of &quot;normalized cost model&quot; for the optimizer, where an engine could give info to the optimizer on which operations will be efficient and which are costly. (A more detailed explanation would be beyond my ability to write it, and space available here...) The obvious alternative would be a pluggable optimizer, but it seems preferable to have the optimizer constant, and let the engine just influence the decision.

Some other of Peter&#039;s comments are also valid, but are not to my knowledge being addressed - for instance nobody is trying to get rid of the .frm files. Especially for &quot;remote&quot; engines like NDB, syncing the .frm is a hassle.</description>
		<content:encoded><![CDATA[<p>Hi Roland</p>
<p>The points you raise are actually being worked on:</p>
<p>CREATE TABLE options exists in MariaDB 5.2: <a href="http://askmonty.org/wiki/Manual:Extending_CREATE_TABLE" rel="nofollow">http://askmonty.org/wiki/Manual:Extending_CREATE_TABLE</a></p>
<p>As part of Timour&#8217;s &#8220;Query Fragment Pushdown&#8221; work (this is a set of several worklogs) in the SE summit we also discussed the issue of &#8220;normalized cost model&#8221; for the optimizer, where an engine could give info to the optimizer on which operations will be efficient and which are costly. (A more detailed explanation would be beyond my ability to write it, and space available here&#8230;) The obvious alternative would be a pluggable optimizer, but it seems preferable to have the optimizer constant, and let the engine just influence the decision.</p>
<p>Some other of Peter&#8217;s comments are also valid, but are not to my knowledge being addressed &#8211; for instance nobody is trying to get rid of the .frm files. Especially for &#8220;remote&#8221; engines like NDB, syncing the .frm is a hassle.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Roland Bouman</title>
		<link>http://www.mysqlperformanceblog.com/2010/05/08/the-doom-of-multiple-storage-engines/comment-page-1/#comment-762418</link>
		<dc:creator>Roland Bouman</dc:creator>
		<pubDate>Tue, 11 May 2010 08:35:02 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=2626#comment-762418</guid>
		<description>Great post! 

I always like the idea behind the ability to use multiple storage engines. The idea that &quot;not all data is created equal&quot; makes sense, and it stands to reason that the is benefit in the ability to address specific needs with a specific storage solution. But over time, a few things made me feel uncomfortable:

- if different storage engines cater to different use cases, then why is the SQL dialect, even DDL, just a fixed set? Shouldn&#039;t we be able to configure tables backed by a particular storage with options that are specific to that engine? In the case of a storage engine plugin, shouldn&#039;t the SQL dialect extend accordingly? Sure, there may be some table options today that apply only to a specific engine, but the syntax for these options is hard-wired in the code proper - not in any particular storage engine. Essentially this means that if you want to develop a storage engine yourself that needs specific table options, you can&#039;t just write a plugin - you actually have to fork the server to allow the user to talk properly to your engine.

- perhaps an extension of the previous point, shouldn&#039;t data type support be dynamic too? It seems reasonable that one of the special advantages of a particular storage engine would be that it implements particular data types. Again, if we&#039;d want to create an engine to support a particular specific data type, we have no option but to fork the server.

- you already mentioned it, but indeed - what about the optimizer? Shouldn&#039;t the optimizer be extensible and pluggable too? Column-oriented storage engine vendors like infobright and calpont all had to put in their optimizer next to the native one in order to benefit from their engine. Is that just a corner case? WOuld it even be possible to come up with an optimizer design that is so generic that it is even possible to fully benefit from different engines?

(I am not pretending I have any answers - just voicing concerns about the current state of the &#039;pluggable&#039; SE)</description>
		<content:encoded><![CDATA[<p>Great post! </p>
<p>I always like the idea behind the ability to use multiple storage engines. The idea that &#8220;not all data is created equal&#8221; makes sense, and it stands to reason that the is benefit in the ability to address specific needs with a specific storage solution. But over time, a few things made me feel uncomfortable:</p>
<p>- if different storage engines cater to different use cases, then why is the SQL dialect, even DDL, just a fixed set? Shouldn&#8217;t we be able to configure tables backed by a particular storage with options that are specific to that engine? In the case of a storage engine plugin, shouldn&#8217;t the SQL dialect extend accordingly? Sure, there may be some table options today that apply only to a specific engine, but the syntax for these options is hard-wired in the code proper &#8211; not in any particular storage engine. Essentially this means that if you want to develop a storage engine yourself that needs specific table options, you can&#8217;t just write a plugin &#8211; you actually have to fork the server to allow the user to talk properly to your engine.</p>
<p>- perhaps an extension of the previous point, shouldn&#8217;t data type support be dynamic too? It seems reasonable that one of the special advantages of a particular storage engine would be that it implements particular data types. Again, if we&#8217;d want to create an engine to support a particular specific data type, we have no option but to fork the server.</p>
<p>- you already mentioned it, but indeed &#8211; what about the optimizer? Shouldn&#8217;t the optimizer be extensible and pluggable too? Column-oriented storage engine vendors like infobright and calpont all had to put in their optimizer next to the native one in order to benefit from their engine. Is that just a corner case? WOuld it even be possible to come up with an optimizer design that is so generic that it is even possible to fully benefit from different engines?</p>
<p>(I am not pretending I have any answers &#8211; just voicing concerns about the current state of the &#8216;pluggable&#8217; SE)</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: peter</title>
		<link>http://www.mysqlperformanceblog.com/2010/05/08/the-doom-of-multiple-storage-engines/comment-page-1/#comment-762087</link>
		<dc:creator>peter</dc:creator>
		<pubDate>Mon, 10 May 2010 23:18:03 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=2626#comment-762087</guid>
		<description>Paul,

Transactional API is only one part of the story,  a very small one.  Think about Optimizer for example - it has to operate entirely different for local in memory data and distributed storage engine.  I recognize this is major point for Drizzle and MySQL which at certain point attracted development and user community.</description>
		<content:encoded><![CDATA[<p>Paul,</p>
<p>Transactional API is only one part of the story,  a very small one.  Think about Optimizer for example &#8211; it has to operate entirely different for local in memory data and distributed storage engine.  I recognize this is major point for Drizzle and MySQL which at certain point attracted development and user community.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: peter</title>
		<link>http://www.mysqlperformanceblog.com/2010/05/08/the-doom-of-multiple-storage-engines/comment-page-1/#comment-761943</link>
		<dc:creator>peter</dc:creator>
		<pubDate>Mon, 10 May 2010 18:05:20 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=2626#comment-761943</guid>
		<description>I see some people do not understand where this post comes from and what are Percona plans regarding the issues I mentioned.  Here is example:
http://www.pythian.com/news/12437/the-doom-of-xtradb-and-percona-server/

First I came to write this post after serving on advisory to number of database engines, some not MySQL related at all as well as well as looking at design of NoSQL solutions as MongoDB.  I was in many cases pleased how simple designs they can use because they do not have this multiple storage engine complication. 

Percona Server is not going to rip away support for other storage engines, there is no point doing that without significant changes to the architecture and result obviously will not be as compatible with MySQL as we want Percona Server to be.    

I&#039;m simply wishing some thing like this would exist though we are not in position to jump into creating it right now.</description>
		<content:encoded><![CDATA[<p>I see some people do not understand where this post comes from and what are Percona plans regarding the issues I mentioned.  Here is example:<br />
<a href="http://www.pythian.com/news/12437/the-doom-of-xtradb-and-percona-server/" rel="nofollow">http://www.pythian.com/news/12437/the-doom-of-xtradb-and-percona-server/</a></p>
<p>First I came to write this post after serving on advisory to number of database engines, some not MySQL related at all as well as well as looking at design of NoSQL solutions as MongoDB.  I was in many cases pleased how simple designs they can use because they do not have this multiple storage engine complication. </p>
<p>Percona Server is not going to rip away support for other storage engines, there is no point doing that without significant changes to the architecture and result obviously will not be as compatible with MySQL as we want Percona Server to be.    </p>
<p>I&#8217;m simply wishing some thing like this would exist though we are not in position to jump into creating it right now.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: peter</title>
		<link>http://www.mysqlperformanceblog.com/2010/05/08/the-doom-of-multiple-storage-engines/comment-page-1/#comment-761873</link>
		<dc:creator>peter</dc:creator>
		<pubDate>Mon, 10 May 2010 14:57:01 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=2626#comment-761873</guid>
		<description>Brian,

Right. The bad interface for storage engine adds to the list of problems but I still believe the problems are general.  How many of the items in my list does Drizzle design is posed to solve completely ? 

Now regarding temporary storage for resolving queries it does not have to be handled the same way as normal operations. At least one can argue it should not.  Internal temporary tables are handled just by single thread which has created them which includes all kind of concurrently.   Regarding treating In memory and on disk tables equally  I think Innodb could be improved in a way it does it but again I argue for a lot of users simplicity and performance in general case can be a more important than getting last possible bits of performance in niche cases.  

Please do not get me wrong I&#039;m not suggesting this as a path for Drizzle or MySQL my point is 95% of users would be served better by more tight knit solution.</description>
		<content:encoded><![CDATA[<p>Brian,</p>
<p>Right. The bad interface for storage engine adds to the list of problems but I still believe the problems are general.  How many of the items in my list does Drizzle design is posed to solve completely ? </p>
<p>Now regarding temporary storage for resolving queries it does not have to be handled the same way as normal operations. At least one can argue it should not.  Internal temporary tables are handled just by single thread which has created them which includes all kind of concurrently.   Regarding treating In memory and on disk tables equally  I think Innodb could be improved in a way it does it but again I argue for a lot of users simplicity and performance in general case can be a more important than getting last possible bits of performance in niche cases.  </p>
<p>Please do not get me wrong I&#8217;m not suggesting this as a path for Drizzle or MySQL my point is 95% of users would be served better by more tight knit solution.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Rob Wultsch</title>
		<link>http://www.mysqlperformanceblog.com/2010/05/08/the-doom-of-multiple-storage-engines/comment-page-1/#comment-761871</link>
		<dc:creator>Rob Wultsch</dc:creator>
		<pubDate>Mon, 10 May 2010 14:55:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.mysqlperformanceblog.com/?p=2626#comment-761871</guid>
		<description>For the sake of argument why not just use Postgres? 

PG seems significantly less buggy and significantly more responsive to bugs. (#989 I am looking at you)
PG only has a single storage engine. No multiple data dictionaries and hyper easy hot backups.
PG seems to have fewer weird issues scaling up.
BSD licence.
No conference surprise features.
No crippleware^H^H^H^H^H^H^H^H^H^H enterprise only features.</description>
		<content:encoded><![CDATA[<p>For the sake of argument why not just use Postgres? </p>
<p>PG seems significantly less buggy and significantly more responsive to bugs. (#989 I am looking at you)<br />
PG only has a single storage engine. No multiple data dictionaries and hyper easy hot backups.<br />
PG seems to have fewer weird issues scaling up.<br />
BSD licence.<br />
No conference surprise features.<br />
No crippleware^H^H^H^H^H^H^H^H^H^H enterprise only features.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

