Monday, December 15. 2008My advice to MySQLHere is my advice to MySQL. Take it or leave it. Time will tell whether I'm full of shit. MySQL 5.1 is out the door. Awesome. Great job to all the folks who fixed the thousands of bugs over the last 3 years. MySQL 5.1 should be faster and more stable than 5.0 because of those bug fixes, and features like partitioning are welcome additions to the small percentage of MySQL users who need that functionality. And, even if there are some bugs in partitioning (what feature doesn't have any bugs?), the partitioning feature is as good or better than other competing products. Good job. However, going forward, here is my advice to MySQL engineering: stop all work on new 6.0 features entirely. Don't scrap the features, just stop development on them now. Take one month to figure out how to restructure MySQL engineering and priorities with the following steps: Suggested StepsDrop the current roadmap: Continuing down the current roadmap without addressing the core problems of a Frankenstein-like core database server kernel will mean that the current roadmap features will take 2-3 times as long to develop. Stop this now. Refocus on re-architecting the kernel to a 21st century, modular design. Tell sales and marketing that you are taking these steps to ensure the long-term viability of the MySQL name and product line. Make two teams: a maintenance team which maintains server versions <= 5.1 and a team which is dedicated entirely to redesigning the MySQL server kernel into a streamlined, black box. Reduce the headcount of the MySQL engineering team if necessary to contain only those engineers who have the ability to design modular, pluggable systems. Give up on backwards compatibility: To make the changes necessary without making the kernel even more complex than it already is, you will need to relinquish the idea that backwards compatibility is necessary. Guido van Rossum already made this decision for Python 3, recognizing the need for it. MySQL needs to do the same. SQL_MODE? Scrap it. Only do what is correct according to data integrity and SQL standards. Reduce the code complexity and code paths and you will find that features are easier to develop and fixes are easier to identify. Forget Windows for now: Use open source, community-maintained, and standardized libraries within the kernel. Don't rewrite libc and various other quality open source libraries because of Not Invented Here syndrome or because Windows lacks these things. Focus on the standards and don't bother with platforms that don't conform to POSIX. If Microsoft wants future MySQL versions to run on its platforms, partner with Microsoft and have them do the port. While you're at it, drop support for old platforms like Netware and other crap that is obselete. Make all decisions open and transparent: For the non-maintenance team, make a policy that all decisions about the kernel design be done in an open forum, with the community able to participate in the discussion. Have stewards that are willing to negotiate the design decisions with the community and do everything in a transparent manner. Focus all energy towards the APIs: Think of the server kernel as simply a provider of services. Clearly and consistently define these services (as interfaces and plugin APIs) and have the community of engineers vet the design of these APIs. Once these interfaces are clearly defined, document them on public wikis. Clean up the abysmal messiness of the code base: Refactor, decruft, and standardize the code base to a C99 (minimal), warning-free, environment that uses stdint, stdbool, proper STL templates, and other stuff that is now standard for 5+ years. Clear your heads of the premature optimization syndrome that infects the code base and makes it messy and cluttered. You will find that there are many community resources that would be happy to help in this effort. Once done, BSD the kernel and turn it over to the open source community: Once the above is done, BSD the kernel code base and let the community support it entirely. Then, focus your energies on creating value-added features as plugins around that community-supported core kernel. Use the resources and expertise in your engineering department to develop niche addons that paying customers want. Package branded versions of the MySQL server (closed or open source) that include a number of these value-added plugins that target a specific industry, such as data-warehousing or security-conscious environments. Sell those packages as Enterprise packages with an Enterprise price point. Provide all support and services for these Enterprise-branded MySQL server packages. How Long?Based on what the Drizzle project has been doing, I predict that doing ALL of the above steps would take approximately 12 months to achieve a version 1.0 of a stable, modular kernel. I believe that features could be developed as plugins to that kernel in less time than if the work was not done and the features for 6.x are developed as they currently are. PredictionsIf the above steps are taken, here is what I predict would be the outcome: Reduction in maintenance costs of the core server by 80%: By turning over maintenance costs to the community, there will be a reduction in maintenance costs. By simplifying the kernel code base, there will be an even bigger reduction in maintenance costs: since one "fix" won't break other things nearly as often as "fixes" do today. This reduction in maintenance costs means that Sun can allocate more of its internal engineering resources to developing value-added plugins which are sold to customers. Because more developer resources are now dedicated to revenue-producing activities, the long-term viability of the database engineering department is ensured. Sales and marketing efforts become easier: Currently, MySQL sales and marketing are undeniably hindered by two things:
By following the steps above, these problems are tackled. A simpler and community-supported kernel means a more stable kernel. A more stable kernel means a shorter, more incremental release cycle. The lack of differentiation is solved by MySQL now being able to focus on value-added plugins in branded MySQL packaging. These branded packages are much easier for a sales force to sell, since they represent clear, differentiated value to the customer. When sales and marketing of a product become easier, only one thing is bound to happen: a strong increase in sales. MySQL will once-again return to the Open Source community: Much has been made of the inability of community contributors to get contributions into the MySQL server in a reasonable timeframe. By opening up the design and development of the kernel to the community, MySQL would restore much of the trust it has lost in recent years. Instead of being seen as "throwing a bone" to the open source community every once in a while, Sun/MySQL engineering would be seen as an active and trusted partner in open source contributions, stewardship and development. ConclusionOr, I am completely full of it and the above is a waste of time. Trackbacks
Trackback specific URI for this entry
No Trackbacks
Comments
Display comments as
(Linear | Threaded)
Alternately, Sun sponsor some core MySQL developers to build a "sister project" to MySQL, which incorporates your aforementioned ideas. This small but dedicated team could start stripping MySQL apart down to its core, rebuild and redesign some of the components which have been sore points for a while, and all the while adding support for plugins to replace the functionality that was stripped out. For the sake of argument, let's call this hypothetical project "Light But Steady Rain".
Until this project is production ready though, maybe Sun doesn't want to destroy MySQL by stopping forward development altogether. Because after the 3 yr wait for 5.1 GA, another massive re-architecture would kill off interest in the project in general. So they would continue to move forward, adding important features like improved backup, a competitor engine to InnoDB, real foreign key support, improved optimizer. It's true that if Sun were crazy enough to take on this strategy, they would be splitting up resources. However the "Light But Steady Rain" team could cherry pick features they are interested in from the MySQL team, so that effort would not be entirely wasted. Then when that project is production ready, Sun could throw QA, support, and sales resources behind that project as well. Imagine! Ryan,
"another massive re-architecture" I'm sorry, but I do not see 5.1 as a massive re-architecture. It just isn't. And, "stopping forward development altogether" One could reasonably posit that there is currently no forward development from an outside perspective at all and has not been for years. For people who see things this way, there is nothing to lose. Thanks Jay for your thoughts. Interesting.
But, aren't you essentially describing Drizzle? So the Sun perspective, ... [fill in the blanks] However, if I were a MySQL Sales or product marketing exec, I'd ponder this advice in relation to my future at the company, and take the hints seriously. Sounds like you are describing Drizzle in that first comment
I think this is an excellent post. I think many of the things in here can be taken into other realms of software development. I am able to make parallels from this to our web development at work. Forget Windows for now? Have Microsoft port it?
Jay, I'm sorry that is soo wrong... . Microsoft will never ever port it. Why should they port competitors product, they do have SQL Express already running on their platform, and this is our job to outperform it. There is a lot of open source running on Windows. libc? No, apache portable runtime runs.Libevent runs fine, ICU was developed on it as primary platform. etc etc etc. autotools? no, CMake is superior to it and works fine on any Unix too. If Windows lacks anything that is C99 (yet), but writing stdint.h and stdbool.h takes at most 1 day work. I do not see the bright future on Linux/gcc only. It runs on 1% of all world computers not going to change any time soon, whatever ESR has to say. I agree with Vladislav Vaintroub: Windows support is crucial, no matter how distasteful or awkward. I believe supporting Windows is what caused MySQL to achieve the success it has over the past 10 years.
Frankly, PostgreSQL has always been a superior RDBMS implementation, but it failed early on by not prioritizing a native Windows port. By the time they did provide a Windows download, it was too late. MySQL gained immeasurably by providing a Windows download. Well, not immeasurably. MySQL has about four times the marketshare of PostgreSQL, based on recent stats I've seen. If the Drizzle team neglects the Windows platform, no matter the justification, then it will become the next PostgreSQL: technically meritorious, but a business failure. I seriously could not agree more. I think that MySQL is not the only team having issues like this though Jay, Zend is starting to follow the same mistakes.
Ah well, if they don't listen to Jay Pipes, I dunno what to tell em. Oh wait, I keep forgetting you're full of shit Good thoughts, Jay -- much along my own thinking.
Got to agree with other commenters on the Windows issue, though. It would be a grave mistake to underestimate just how much MySQL takes place on Windows -- especially, but in no way limited to, development machines. If MySQL stopped providing binaries for Windows then I would have no choice but to abandon MySQL. As for your other points - half of them may have some merit (and I'm not going to identify which half)), but the other half is just too radical to be taken seriously.
And if you don't identify which points are too radical, then I won't take your reply seriously.
This is a dear topic to me... We did something like this in a 200 people company I worked for two years ago. "The company" had a product which kicked ass, but was not maintainable (patched to death, not modular, hard to test requiring lengthy test cycles, rigid releases etc). We made a total rearchitecture and put the best coders in building it.
It was a fun project. But it took 3 years (guesses were 1 year). The delay was mainly due to changing and growing requirements (duh). As the competitors changed we had to keep up in the new, unreleased product. Also, since it was a Big Project, people were afraid to leave something out, so the requirements just kept coming. It seemed like a constantly expanding black hole. Big Projects often go bad, because they are Big Projects. To Jay and MySQL: I suggest splitting any big refactoring in smaller increments to avoid doing Big Projects. (Drizzle might be an exception since it is an initial release) Meanwhile, our company got more and more crippled from the slow release process and the old code base that was not maintainable. Some of the best coders quit one by one, and the people left got used to the slow processes. Now, the new product is finished, but the processes are still dead slow. People got used to control, meetings, bureaucracy, documents, boards, you name it. My guess on MySQL is that regardless of what MySQL 6.0 will look like (refactored or not), it will be painfully hard to increase speed again, since the organisation has got used to its' bad habits. So don't count on everything suddenly getting GREAT just because the technology got better. Sometimes, the organisation is the biggest challenge. * The company's new product kicks as, scales like nothing else and is modular. But people are afraid to put it into use, since it might not be fully backwards compatible. Since the old product wasn't modular, the transition to the new product cannot be done in steps. This causes a Big Bang when going live, and people don't like Big Bangs. I believe MySQL must remain 99% backwards compatible. Databases are really resistant to upgrades, mainly because downtime is required (on a side note, a tool solving this with HA/MMM/Flipper and apt-get would be nice). A lot of users will have really old MySQL versions. So when you DO upgrade your MySQL version, the increment is typically so big that you don't want a lot of backwards breaking stuff on top of the normal risk with getting a lot of new features and bug fixes. MySQL should keep their backwards compatibility, or they will loose a lot of customers who cannot make the transition. If they do need to break stuff, be sure to do it in small steps, preferably using runtime settings. That way, customers can install the new MySQL version in backwards compatibility mode. They can see that everything else works, then they can rewrite their app and switch off the backwards compatiblity flag. I like your plan Jay, but I think it comes with a new set of unexpected problems.... but then again, what went wrong with "The company" might work ok for MySQL. Anyway, great that you got the discussion started. With regards to re-architecting the server: the problem is that there is no shared and clear vision of what is the architecture that we should aim for. Trivial first example: should server operations (e.g. hash join) have push (result->heres_next_record()) or pull (handler->give_me_another_record()) model? Why? This is the first of hundreds of questions. If we start a re-architecture you'll see the next MySQL release in a decade or so. Something like that happened to Netscape on its path to becoming Mozilla.
On pluggability: Jay, have you ever seen a database system that was really pluggable? Where one could really plug the features (e.g. VIEWs, SPs) in? If you think you can do it, could you please prove it by making partitioning, merge, and innodb true plugins, so that files in sql/*.* have no hints about existence of the plugins? Sergey,
Just because it hasn't been done before doesn't mean it can't be done. Also, if there is no shared or clear vision of what architecture should be aimed for, then the architecture team needs to be changed. Either that, or open it up to the community and just decide on it already. -j Does postgres count?
It's also community driven, bsd licensed, has a fairly clean code base, and is even not backwards compatible with mysql; so it meets most of Jays criteria already I can now abridge my advise to Sun to simply:
"Listen to Jay Pipes" reading this again, and some of the comments, i was just reminded of a project that the mysql development team decided to completely re-architect. the re-architecting turned out to be a black hole of time and energy, and all that was really needed some better processes for getting releases out, some light refactoring and a focus on what customers wanted.
it was only an odbc driver, but there's some lessons there. |
Calendar
QuicksearchArchivesCategoriesSyndicate This Blog |
||||||||||||||||||||||||||||||||||||||||||
