{"id":1738,"date":"2009-10-14T15:26:00","date_gmt":"2009-10-14T05:26:00","guid":{"rendered":"http:\/\/www.flamingspork.com\/blog\/?p=1738"},"modified":"2014-10-08T09:14:23","modified_gmt":"2014-10-07T23:14:23","slug":"return-of-the-top-5-mysql-wishlist-and-looking-at-drizzle","status":"publish","type":"post","link":"https:\/\/www.flamingspork.com\/blog\/2009\/10\/14\/return-of-the-top-5-mysql-wishlist-and-looking-at-drizzle\/","title":{"rendered":"Return of the &#8220;Top 5 MySQL Wishlist&#8221; and looking at Drizzle"},"content":{"rendered":"<p>It&#8217;s coming up on a year since I started working full time on Drizzle. So, I got a bit reflective&#8230;<\/p>\n<p>Have we done things that I (and others) really wanted done?<a href=\"http:\/\/www.flamingspork.com\/blog\/2007\/06\/19\/my-top-5-wishlist-for-mysql\/\"> Back in 2007, I wrote my top 5 wishlist for the MySQL Server<\/a>.<\/p>\n<p>I am not going to pretend I speak for the MySQL development team; I&#8217;m just trying to evaluate how Drizzle is doing against some wishlists that (to me) embodied some of the reasons we started Drizzle.<\/p>\n<p>Please think of this as &#8220;database server wishlists&#8221; and comparing them against Drizzle&#8230;.<\/p>\n<p>My wishlist was:<\/p>\n<p><strong>5. Six-monthly release cycles<\/strong><\/p>\n<p style=\"padding-left: 30px;\">Done. Not only does Drizzle have milestone releases, but we&#8217;re also dropping tarballs every two weeks (currently for the <a href=\"https:\/\/launchpad.net\/drizzle\/+milestone\/bell\">bell milestone<\/a>). We&#8217;re also doing a decent job of keeping trunk free of massive breakage.<\/p>\n<p><strong>4. Much more in depth automated testing<\/strong><\/p>\n<p style=\"padding-left: 30px;\">Done (and in progress). We have <a href=\"https:\/\/launchpad.net\/drizzle-automation\">drizzle-automation<\/a> running things all the time. Hudson (and buildbot) test across many platforms (what pushbuild did and more when inside MySQL) <strong>before<\/strong> code hits trunk. We also have <a href=\"http:\/\/www.drizzle.org\/\">regular performance benchmarks<\/a> that we compare across versions, crash-me, the <a href=\"http:\/\/www.flamingspork.com\/blog\/2009\/10\/13\/random-query-generator-added-to-drizzle-automation\/\">random query generator<\/a> as well as checking that <a href=\"http:\/\/www.drizzle.org\/\">we don&#8217;t regress in code size (via sloccount)<\/a>.<\/p>\n<p><strong>3. Sane build system<\/strong><\/p>\n<p style=\"padding-left: 30px;\">(slightly distorting my original words). Well, we&#8217;re not quite at the ready for packaging in distributions stage, but a debug or non debug build is just -g and\u00c2\u00a0optimization\u00c2\u00a0level for the compiler, plugins are using autofoo to work otu if they can be built&#8230; so yeah, this is pretty sane.<\/p>\n<p style=\"padding-left: 30px;\">We also are building with -Werror (and more!) which increases code quality no end.<\/p>\n<p style=\"padding-left: 30px;\">So, mostly done.<\/p>\n<p><strong>3.5. (yes, i have a 3.5): Kill HPUX<\/strong><\/p>\n<p style=\"padding-left: 30px;\">Done.<\/p>\n<p><strong>2. Increased liberal use of asserts<\/strong><\/p>\n<p style=\"padding-left: 30px;\">An in-progress thing, but the better compiler warnings have won us a <strong>lot<\/strong>.<\/p>\n<p><strong>1. Pluggable data dictionary<\/strong><\/p>\n<p style=\"padding-left: 30px;\">Not only that, but done away with FRM totally. Really happy with this.<\/p>\n<p>What about other peoples wishlist?<\/p>\n<p><strong>Kostya<\/strong> had one:<\/p>\n<p><strong>1. Remove excessive fuss. <\/strong><\/p>\n<p style=\"padding-left: 30px;\">i.e. &#8220;just do it&#8221;.<\/p>\n<p style=\"padding-left: 30px;\">I think we&#8217;re doing really well with this for Drizzle. Plugins are pretty easy to get merged, and if your patches to the kernel are good, they&#8217;re also easy. Big changes can be harder, but in the end it has turned out well.<\/p>\n<p><strong>2. Open the development process.<\/strong><\/p>\n<p style=\"padding-left: 30px;\">Done. There is no internal wiki, there are no &#8220;committers&#8221; versus &#8220;non-committers&#8221;.. everything is judged on merit of the idea\/code. Sometimes the most valuable contribution is somebody telling you their real world experience.<\/p>\n<p><strong>3. Get to a normal release schedule.<\/strong><\/p>\n<p style=\"padding-left: 30px;\">Done.<\/p>\n<p><strong>4. Establish productive relationship with the majority of users.<\/strong><\/p>\n<p style=\"padding-left: 30px;\">I think drizzle-discuss mailing list is doing quite well in this regard. Is quite active with discussion.<\/p>\n<p><strong>5. Find a way to do incompatible changes with minimal pain for users. <\/strong><\/p>\n<p style=\"padding-left: 30px;\">We&#8217;ll see how we go :)<\/p>\n<p style=\"padding-left: 30px;\">\n<p><a href=\"http:\/\/ronaldbradford.com\/blog\/top-5-wishes-for-mysql-2007-06-21\/\">Ronald also had a list<\/a>:<\/p>\n<p><strong>1. Real time Query Monitoring<\/strong><\/p>\n<p style=\"padding-left: 30px;\">With gearman logging and my recent <a href=\"http:\/\/www.flamingspork.com\/blog\/2009\/10\/10\/how-many-cpu-cycles-does-a-sql-query-take-or-pagefaults-caused-or-l2-cache-misses-or-cpu-migrations\/\">experimentation with using CPU performance counters<\/a> I think we&#8217;ll end up somewhere rather awesome.<\/p>\n<p style=\"padding-left: 30px;\">If you&#8217;re looking for MySQL monitoring though, the MySQl Enterprise query monitoring stuff looks pretty good to me.<\/p>\n<p><strong>2. Consistent Release Cycles<\/strong><\/p>\n<p style=\"padding-left: 30px;\">We&#8217;re doing pretty well so far!<\/p>\n<p><strong>3. INFORMATION_SCHEMA Extensions<\/strong><\/p>\n<p style=\"padding-left: 30px;\">We&#8217;ve inherited the architecture from MySQL 5.1 (and 6.0) of being able to pretty easily add INFORMATION_SCHEMA tables and improved it. It&#8217;s currently pretty easy to add them. We also have ongoing work having an INFORMATION_SCHEMA storage engine which means that you won&#8217;t have to have the I_S tables be\u00c2\u00a0materialized\u00c2\u00a0every time you query them.<\/p>\n<p><strong>4. Online table maintenance<\/strong><\/p>\n<p style=\"padding-left: 30px;\">All progress has been due to Storage Engine authors. With the data dictionary work though, this gets easier and saner to do.<\/p>\n<p><strong>5. Published benchmarks<\/strong><\/p>\n<p style=\"padding-left: 30px;\">We&#8217;re encouraging others who will be more objective :) Although we also do regular performance regression tests as part of our standard development process.<\/p>\n<p><a href=\"http:\/\/dormando.livejournal.com\/469685.html\">Dormando also had a list<\/a> (complete with &#8220;there is no five&#8221;):<\/p>\n<p><strong>1) Logical separation of connections from threads<\/strong><\/p>\n<p style=\"padding-left: 30px;\">We have this in Drizzle through plugins. Interesting ones are pool_of_threads (fixed number of threads), multithread (thread per connection) and single_thread (one thread).<\/p>\n<p><strong>2) A more modular core<\/strong><\/p>\n<p style=\"padding-left: 30px;\">We&#8217;re very much doing well here. It&#8217;s a long process, but I&#8217;m quite impressed by our progress.<\/p>\n<p><strong>3) Better replication (better replication management\/protocol?)<\/strong><\/p>\n<p style=\"padding-left: 30px;\">The work being done on Drizzle replication is really exciting. I love the fact that modularity is encouraged and the ability to replace any bit you want easily, as well as read the replication stream in about any language you want.<\/p>\n<p><strong>4) Better test suite<\/strong><\/p>\n<p style=\"padding-left: 30px;\">I may never be 100% happy with a test suite, but we&#8217;re doing good&#8230;<\/p>\n<p><a href=\"http:\/\/www.mysqlperformanceblog.com\/2007\/06\/29\/top-5-wishes-for-mysql\/\">PeterZ<\/a>&#8216;s view is always interesting, and he had one too:<\/p>\n<p><strong>1. Be Pluggable<\/strong><\/p>\n<p style=\"padding-left: 30px;\">Check. (and also, of course, in progress)<\/p>\n<p><strong>2. Be Scalable<\/strong><\/p>\n<p style=\"padding-left: 30px;\">We&#8217;ve done a lot of work scaling on many CPUs and many connections. Really, 8 concurrent database connections <strong>just isn&#8217;t interesting<\/strong>. We ever run as part of our regression suite <a href=\"http:\/\/www.drizzle.org\/\">up to 2048 concurrent connections<\/a>.<\/p>\n<p><strong>3. Be Distributed<\/strong><\/p>\n<p style=\"padding-left: 30px;\">With the new protocol work to have built in sharding, plugins for logging and replication via Gearman, we&#8217;re getting better.<\/p>\n<p><strong>4. Be Solid<\/strong><\/p>\n<p style=\"padding-left: 30px;\">This will be a test for us. I think we should end up pretty good because of a number of reasons:<\/p>\n<ul style=\"padding-left: 30px;\">\n<li>\n<ul>\n<li><span style=\"background-color: #ffffff;\">clearer, easier to understand code without nasty side effects or really odd things (e.g. relying on a bool storing the value 2)<\/span><\/li>\n<li><span style=\"background-color: #ffffff;\">Better modularity (a module you don&#8217;t use and don&#8217;t load cannot screw you up)<\/span><\/li>\n<li><span style=\"background-color: #ffffff;\">Smaller core and removal of problematic features.<\/span><\/li>\n<li><span style=\"background-color: #ffffff;\">All the testing stuff I&#8217;ve previously mentioned.<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p style=\"padding-left: 30px;\">So I <strong>hope<\/strong> we&#8217;re going to be okay here.<\/p>\n<p><strong>5. Don&#8217;t forget about the roots<\/strong><\/p>\n<p style=\"padding-left: 30px;\">The group of us working at Sun on Drizzle have said we want to focus on being awesome for large scale Web apps while enabling others to make Drizzle good for other things. I think this is the right approach to not forget our roots (and target users) while allowing it to be awesome for any use somebody wants to have of it.<\/p>\n<p>From a Storage Engine author PoV, <a href=\"http:\/\/pbxt.blogspot.com\/2007\/06\/pbxt-top-5-wishes-for-mysql-of-storage.html\">Paul had some insights<\/a> while thinking about PBXT:<\/p>\n<p><strong>1. A generic engine test suite<\/strong><\/p>\n<p style=\"padding-left: 30px;\">We&#8217;re doing pretty well&#8230; the whole Drizzle test suite runs with InnoDB, and doesn&#8217;t require much change to get going with another transactional engine. The proof is in the Drizzle PBXT branch! But I also think we could do better and have a test suite more directed at each part of an engine (including error cases!).<\/p>\n<p><strong>2. Internal APIs<\/strong><\/p>\n<p style=\"padding-left: 30px;\">Paul mentions FRMs, which are gone :) In their place is a simple interface that engines can implement for ever increased functionality (i.e. they own their own metadata). We&#8217;re getting better in other places too.<\/p>\n<p><strong>3. Customizable table and column attributes<\/strong><\/p>\n<p style=\"padding-left: 30px;\">MariaDB has this now, and we have space in our table definition proto, but not at the parser level (yet).<\/p>\n<p><strong>4. Push-down restrict and join conditions.<\/strong><\/p>\n<p style=\"padding-left: 30px;\">Not yet, and not for a little while.<\/p>\n<p><strong>5. Custom data types<\/strong><\/p>\n<p style=\"padding-left: 30px;\">It&#8217;ll be great when we rework the type system even more so that this really is as easy as it should be &#8211; not only from a SQL level but also for adding new types as server modules.<\/p>\n<p>Finally, <a href=\"http:\/\/antbits.blogspot.com\/2007\/06\/okay.html\">Antony&#8217;s wish list<\/a>:<\/p>\n<p><strong>1. Modular Architecture<\/strong><\/p>\n<p style=\"padding-left: 30px;\">Covered.<\/p>\n<p><strong>2. libmysys as a separate project<\/strong><\/p>\n<p style=\"padding-left: 30px;\">We&#8217;ve removed it where we can, and are using gnulib where we can. It very much improves the situation when you ditch weird-ass platforms and assume some level of POSIX.<\/p>\n<p><strong>3. New\/modular parser<\/strong><\/p>\n<p style=\"padding-left: 30px;\">We&#8217;re getting close to a stage where you could load a different parser&#8230; not there, but relatively close. It would still be messy, but a lot better than even 6 months ago.<\/p>\n<p><strong>4. Unit tests for server components<\/strong><\/p>\n<p style=\"padding-left: 30px;\">With our move towards modularity, this is actually getting possible!<\/p>\n<p><strong>5. Aggregate Stored functions and External Stored Procedures<\/strong><\/p>\n<p style=\"padding-left: 30px;\">We don&#8217;t currently have either, we have decent thoughts though.<\/p>\n<p>Antony also cheated and added a few more:<\/p>\n<p><strong>A new Recursive Descent parser<\/strong><\/p>\n<p style=\"padding-left: 30px;\">The required work to be able to replace the parser is in progress.<\/p>\n<p><strong>Abstract Syntax Trees<\/strong><\/p>\n<p style=\"padding-left: 30px;\">See above.. getting the pre-work done.<\/p>\n<p><strong>SCTP and\/or link aggregation<\/strong><\/p>\n<p style=\"padding-left: 30px;\">We&#8217;ll see improvements around this with the new drizzle protocol.<\/p>\n<p><strong>Parsing within the client<\/strong><\/p>\n<p style=\"padding-left: 30px;\">We&#8217;ve had some very good discussion on the drizzle-discuss list. We&#8217;ll no doubt have something to help remove more of the cycles used in executing a query.<\/p>\n<p><strong>Integrated Federation<\/strong><\/p>\n<p style=\"padding-left: 30px;\">That&#8217;s the game plan :)<\/p>\n<p><strong>Elimination of FRM Files<\/strong><\/p>\n<p style=\"padding-left: 30px;\">I never get tired of saying this is done :)<\/p>\n<p><strong>Elimination of errmsg.sys<\/strong><\/p>\n<p style=\"padding-left: 30px;\">We&#8217;re now just using gettext, like every other free software project on the planet. Although I think we could take a few steps in making errors more easily parsable by code.<\/p>\n<p style=\"padding-left: 30px;\">\n<p>So how do we stack up?<\/p>\n<p>I think we&#8217;re doing pretty well. There&#8217;s still a lot of work to get where we want to be, but it&#8217;s amazing how much progress we&#8217;ve made in the short time we&#8217;ve been around.<\/p>\n<p>I also just\u00c2\u00a0realized\u00c2\u00a0I missed <a href=\"http:\/\/jpipes.com\/index.php?\/archives\/172-My-Top-5-Wishlist-for-MySQL.html\">Jay&#8217;s list<\/a>&#8230; but we&#8217;re doing pretty well there too.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>It&#8217;s coming up on a year since I started working full time on Drizzle. So, I got a bit reflective&#8230; Have we done things that I (and others) really wanted done? Back in 2007, I wrote my top 5 wishlist &hellip; <a href=\"https:\/\/www.flamingspork.com\/blog\/2009\/10\/14\/return-of-the-top-5-mysql-wishlist-and-looking-at-drizzle\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[75,14],"tags":[70,628,125],"class_list":["post-1738","post","type-post","status-publish","format-standard","hentry","category-drizzle-work-et-al","category-mysql","tag-drizzle","tag-mysql","tag-wishlist"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5a6n8-s2","jetpack-related-posts":[{"id":1235,"url":"https:\/\/www.flamingspork.com\/blog\/2008\/11\/05\/singing-in-the-rain\/","url_meta":{"origin":1738,"position":0},"title":"Singing in the Rain","author":"Stewart Smith","date":"2008-11-05","format":false,"excerpt":"The past 3 years, 11 months I have worked full time on NDB (MySQL Cluster). It's been awesome. Love the product and people. In the time I've been on the Cluster team, we've gone from a small group that would easily fit in the (old old) Stockholm office to one\u2026","rel":"","context":"In &quot;life, the universe and everything&quot;","block_context":{"text":"life, the universe and everything","link":"https:\/\/www.flamingspork.com\/blog\/category\/life-the-universe-and-everything\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3345,"url":"https:\/\/www.flamingspork.com\/blog\/2013\/05\/23\/mysql-vs-drizzle-plugin-api\/","url_meta":{"origin":1738,"position":1},"title":"MySQL vs Drizzle plugin APIs","author":"Stewart Smith","date":"2013-05-23","format":false,"excerpt":"There's a big difference in how plugins are treated in MySQL and how they are treated in Drizzle. The MySQL way has been to create a C API in front of the C++-like (I call it C- as it manages to take the worst of both worlds) internal \"API\". The\u2026","rel":"","context":"In &quot;code&quot;","block_context":{"text":"code","link":"https:\/\/www.flamingspork.com\/blog\/category\/code\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":3237,"url":"https:\/\/www.flamingspork.com\/blog\/2013\/03\/08\/mysql-modularity-are-we-there-yet\/","url_meta":{"origin":1738,"position":2},"title":"MySQL modularity, are we there yet?","author":"Stewart Smith","date":"2013-03-08","format":false,"excerpt":"MySQL is now over four times the size than it was with MySQL 3.23. This has not come in the shape of plugins. Have we improved modularity over time? I decided to take LoC count for plugins and storage engines (in the case of Drizzle, memory, myisam and innobase are\u2026","rel":"","context":"In &quot;code&quot;","block_context":{"text":"code","link":"https:\/\/www.flamingspork.com\/blog\/category\/code\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":4180,"url":"https:\/\/www.flamingspork.com\/blog\/2016\/09\/27\/mysql-removes-the-frm-7-years-after-drizzle-did\/","url_meta":{"origin":1738,"position":3},"title":"MySQL removes the FRM (7 years after Drizzle did)","author":"Stewart Smith","date":"2016-09-27","format":false,"excerpt":"The new MySQL 8.0.0 milestone release that was recently announced brings something that has been a looooong time coming: the removal of the FRM file. I was the one who implemented this in Drizzle way back in 2009 (July 28th 2009 according to Brian)- and I may have had a\u2026","rel":"","context":"In &quot;code&quot;","block_context":{"text":"code","link":"https:\/\/www.flamingspork.com\/blog\/category\/code\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2362,"url":"https:\/\/www.flamingspork.com\/blog\/2011\/04\/21\/http-json-alsosql-interface-to-drizzle\/","url_meta":{"origin":1738,"position":4},"title":"HTTP JSON AlsoSQL interface to Drizzle","author":"Stewart Smith","date":"2011-04-21","format":false,"excerpt":"So... I had another one of those \"hrrm... this shouldn't be hard to hack a proof-of-concept\" moments. Web apps are increasingly speaking JSON all around the place. Why can't we speak JSON to\/from the database? Why? Seriously, why not? One reason why MongoDB has found users is that JSON is\u2026","rel":"","context":"In &quot;drizzle&quot;","block_context":{"text":"drizzle","link":"https:\/\/www.flamingspork.com\/blog\/category\/work-et-al\/drizzle-work-et-al\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.flamingspork.com\/blog\/wp-content\/uploads\/2011\/04\/Screenshot-11-300x230.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1752,"url":"https:\/\/www.flamingspork.com\/blog\/2010\/03\/11\/continuing-the-journey\/","url_meta":{"origin":1738,"position":5},"title":"Continuing the journey","author":"Stewart Smith","date":"2010-03-11","format":false,"excerpt":"A couple of months ago (December 1st for those playing along at home) it marked five years to the day that I started at MySQL AB (now Sun, now Oracle). A good part of me is really surprised it was for that long and other parts surprised it wasn't longer.\u2026","rel":"","context":"In &quot;drizzle&quot;","block_context":{"text":"drizzle","link":"https:\/\/www.flamingspork.com\/blog\/category\/work-et-al\/drizzle-work-et-al\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/1738","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/comments?post=1738"}],"version-history":[{"count":7,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/1738\/revisions"}],"predecessor-version":[{"id":3825,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/posts\/1738\/revisions\/3825"}],"wp:attachment":[{"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/media?parent=1738"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/categories?post=1738"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.flamingspork.com\/blog\/wp-json\/wp\/v2\/tags?post=1738"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}