Planet Drizzle

5.1, Innodb Plugin Release

December 03, 2008 11:56 PM

In MySQL 5.1 related new, Innodb has announced the release of their Innodb Plugin Engine for MySQL.

So why do I blog about it?

Because the Innodb plugin engine is the default engine Drizzle :)

Monty Taylor finished up the work last night to import it into Drizzle, and I just finished my review of the engine and have pushed it into our main branch.

Some of the advantages:

  • Fast index creation: add or drop indexes without copying the data
  • Data compression: shrink tables, to significantly reduce storage and i/o
  • New row format: fully off-page storage of long BLOB, TEXT, and VARCHAR columns
  • File format management: protects upward and downward compatibility
  • INFORMATION_SCHEMA tables: information about compression and locking
  • What constitutes an identifier for a table?

    Posted by: MacPlusG3, December 03, 2008 11:44 PM

    Well… there’s:

    • database
    • table name

    (both of these are quite obvious).

    But then you have:

    • temporary tables

    Well… two types of temporary tables:

    • those created in the course of query execution, typically in /tmp/
    • those created during ALTER TABLE, typically in the database directory

    You may have seen these “#sql-foo.frm” etc files around.

    but you can also CREATE TABLE `#sql-foo` (you know, because that’s a good string to use in your app). In fact, you can (and shouldn’t) create a table with the exact same name as the temporary #sql table and use it in your app.

    So really the primary key for a table is: string database name, string table name, bool is_tmp. Oh, and the /tmp/ temporary tables just to screw with your braiiiinn.

    In drizzle, this is what the storage engine API is ending up looking like. It’s the responsibility of the engine to encode the temporary table names so that they don’t clash with the non-temporary table names. This could be done by putting them in a different set of files, marking them with som eflag, or just passing the is_tmp flag to build_table_filename (or make_table_key) and being done with it.

    I think this ends up being the least-hacky approach and it does mean we can remove the bass ackwards if(table_name[0]==’#') checks from some engines.

    Yet another new Drizzle plugin type: replicator

    December 02, 2008 10:03 AM

    [info]krow just asked me to add another plugin type to Drizzle, for pluggable replication, and so I have, and it's pushing up to Launchpad now to merge with the mainline.

    The plugin type is actually called "replicator", to avoid conflicts with the existing source files called "replication.*"

    The existing replication system in MySQL 5 is... well. Like the old joke about if you like laws or sausages, you probably shouldn't watch them get made, if you need to think that MySQL 5 replication is rock solid, you probably shouldn't read the source code. Heck, a serious bug was discovered in it at OpenSQLCamp a few weekends ago, just by projecting a random page of code on the wall and having a dozen pairs of eyes read it.
    Is your garage internet enabled?

    Posted by: MacPlusG3, December 01, 2008 11:50 PM

    Real noisy fucker. So loud, that if it’s in the garage but the back door is open, I still hear it.

    Being used for drizzle dev on Solaris… although a switch to OpenSolaris or Linux is likely imminent. Straight Solaris 10 is just too annoying.

    Me at the Hackfest at OpenSQLCamp

    December 01, 2008 08:29 PM


    OpenSQLCamp - hackfest
    Originally uploaded by datacharmer
    I need a haircut, tho not as short as Jay Pipes, seated next to me.

    I think at that moment I was either working on more improvements to the errmsg plugin interface to Drizzle, or else I was adding a new plugin type to enable PBXT's blob streaming protocol.
    MySQL for Hosting Providers - how do they manage ?

    Posted by: peter, November 28, 2008 10:24 PM

    Working with number of hosting providers I always wonder how do they manage to keep things up given MySQL gives you so little ways to really restrict how much resources single user can consume. I have written over a year ago about 10+ ways to crash or overload MySQL and since that people have come to me and suggested more ways to do the same.

    This is huge hole in MySQL design, thinking little about users isolations and resource quotas and interesting enough I have not seen significant changes in fresh our MySQL 5.1 GA or even something major on the roadmap for future MySQL versions. May be Drizzle will give it a thought ? This surely would help adoption by (especially low end) Hosting Providers and remember this exactly where a lot of kids start to develop their first sites and play with web technologies.

    So how do the hosting providers manage to host hundreds of users on single server with single MySQL server ? Well people just seems to be nice and not looking to crash MySQL/DOS server on purpose but rather cause most of the issues unintentionally by running bad queries or installing bad software.

    It is good people are nice but it may not be comforting to know you stay up just because nobody wants bring you down rather than because your systems are solid and designed to prevent such abuse.

    The systems which I see people implementing are typically focused on the load eliminating - using Google UserStats patches (included in Percona releases) or Log analyzes as well as PROCESSLIST monitoring. This allows you to crack down on users which cause a lot of load which causes a lot of unintentional abusers, but to get MySQL in trouble you do not need a lot of load. You can do this by very light queries which would not show up in the PROCESSLIST or will not take too much combined time in the logs to attract your attention;

    For example:

    SQL:
    1. SET @a1:=repeat("a",1000000); SELECT sleep(1);
    2. SET @a2:=repeat("a",1000000); SELECT sleep(1);
    3. SET @a3:=repeat("a",1000000); SELECT sleep(1);
    4. SET @a4:=repeat("a",1000000); SELECT sleep(1);
    5. SET @a5:=repeat("a",1000000); SELECT sleep(1);
    6. SET @a6:=repeat("a",1000000); SELECT sleep(1);
    7. SET @a7:=repeat("a",1000000); SELECT sleep(1);
    8. SET @a8:=repeat("a",1000000); SELECT sleep(1);
    9. SET @a9:=repeat("a",1000000); SELECT sleep(1);
    10. SET @a10:=repeat("a",1000000); SELECT sleep(1);
    11. SET @a11:=repeat("a",1000000); SELECT sleep(1);
    12. SET @a12:=repeat("a",1000000); SELECT sleep(1);
    13. SET @a13:=repeat("a",1000000); SELECT sleep(1);
    14. ...

    Causes MySQL to "leak" 1MB of memory per second with no apparent good reason - no slow queries or queries in the PROCESS LIST and you can't really track how much memory was allocated for given session (or restrict this number)

    Now remove sleep(1) and you will get mysqld quickly running out of memory and being killed by OOM killer or being unusable for any queries. In my test I got OOM though it kept the box stalled for few minutes before that:

    Out of memory: Killed process 1081 (mysqld).
    automount invoked oom-killer: gfp_mask=0x201d2, order=0, oomkilladj=0

    Out of memory: Killed process 1081 (mysqld).
    automount invoked oom-killer: gfp_mask=0x201d2, order=0, oomkilladj=0

    Call Trace:
    [] out_of_memory+0x8e/0x2f5
    [] __alloc_pages+0x245/0x2ce
    [] __do_page_cache_readahead+0x95/0x1d9
    [] :dm_mod:dm_any_congested+0x38/0x3f
    [] filemap_nopage+0x148/0x322
    [] __handle_mm_fault+0x1f8/0xe23
    [] do_page_fault+0x4cb/0x830
    [] error_exit+0x0/0x84

    Do I need any particular privileges for this to happen ? Not really - you do not even need to be able to select from the table. Any user with permission to connect to MySQL Server can crash it.


    Entry posted by peter | 10 comments

    Add to: delicious | digg | reddit | netscape | Google Bookmarks

    Time Warp, Solaris

    November 28, 2008 10:01 PM

    The date is the summer of 1992 and I have a Sun 1 Sparc Station that I need to turn into a working development environment.

    What is the process?

    I have to ftp a lot of software off of ftp.gnu.org to my local MicroVax. From there I will download all of the software over my 9600 baud modem to the Sparc sitting in the living room of the house I am living in at the time.

    It will take days, if not weeks to assemble all of the software and turn the machine into a working system. This was the state of the art at the time.

    Today?

    Today I take a similar system, install pkg-get and grab packages. What do I discover?

    Half of them are out of date. So what do I do?

    I could grab one of the package systems that are put together to make my life easier, but they won't play well with the stuff I have downloaded with pkg-get. Could I ditch pkg-get and just install the prepacked stuff I can find elsewhere but they too are incomplete.

    So?

    I ftp packages off ftp.gnu.org and compile those into /usr/local.

    Except unlike 16 years ago, half those packages will not compile any longer on Solaris. Between pkg-get and ftp.gnu.org I do make it work.

    None of this will automatically update though, so I am stuck maintaining it. Open Solaris is not an option because it does not run on this system (and Open Solaris comes with a bunch of old compilers/libraries so it is just a different sort of hassle).

    One other incredibly annoying thing, except for what I installed in /usr/local, the rest of programs/libraries it takes to compile anything is found across a half dozen directories in /opt and /usr. The entire structure is not GNU like, and GNU like is the model for other systems. There is nothing innovative about picking your own directory structure.

    So what are the main differences 16 years later?

  • I have broadband so the download is a lot faster.
  • More disk space means I can download everything at once and not be concerned about having enough space to build a working development environment.
  • gmake -j. This machine has a lot of cores so compiling software is lot faster!

    I was asked on Twitter if I would be supporting development for Drizzle on Solaris if I did not work for Sun.

    The answer is "yes".

    There are still quite a few Solaris users out there and I am very interested in seeing how well we perform on the T5240. It is an interesting piece of hardware because of the number of hardware contexts it provides us.

    Now if I had a simple method for installing Ubuntu on it, would I still care about making Solaris work?

    I honestly do not know. I am looking forward to finding the time someday to find out if Solaris or Linux runs best on one of the beasts. My T1000 is with Stewart now so I I don't have a way to test what Linux looks like on a working piece of Niagra based hardware that supports Linux currently. The T5240 does not yet run Ubuntu.

    If I found that Linux ran better I would be mighty tempted to leave the Solaris porting to others. There are a lot of things that I could be doing to make better use of my time.

    Tim commented on "What Sun Should Do". I have not been at Sun long enough to really make any broad comments on the future of Sun.

    One thing is very certain in my mind concerning Sun's future. The problem I described above needs to have been fixed a decade ago, and is at the heart of the failure of Solaris. Many point to the failure of Solaris being CDDL and not being GPL. I believe this is an issue, but it is not the center issue.

    My Mac has plenty of non-GPL code on it.

    It is also a superior development environment to Solaris.

    And why is that?

    It just works.

    And Linux?

    It just works.

    Solaris?

    Someone needs to take a hard look at what is being done today and get it on track.
  • Open SQL Camp experiences

    November 26, 2008 02:13 AM

    Open SQL Camp was a success.

    It was hosted by Baron "Xaprb" Schwartz, who I learned is one of the few people I don't have to look down to look in the eye.

    There were maybe 100 people over the whole the weekend, including the upper echalon of MySQL and other open source database hackers, as well as technical people from Infobright and Tokutek and PBXT.

    There were people who quite literally flew in from the other side of the planet and from Europe.

    It was good to see Monty Widenius, and to introduce him to the pleasure that is well made matcha.

    Vadim Tkachenko's and Peter Zaitsev's presentation on the Percona patches was interesting and eye opening. The following random roundtable discussion between them, Brian Aker of Drizzle, and Arjen Lentz about the open source future of InnoDB was productive, in that it let to Percona moving their patch set development to Launchpad here: https://code.launchpad.net/percona-patches.

    At that meeting, Oracle/Innobase were very notable in their absence.


    I got to meet Richard Hipp, the author of SQLite, and then to introduce him to Jim Starkey. Richard's presentation on how much you can and can't trust the operating system, and how to make a database durable in the face of the real world was very illuminating, and more than a little bit scary. I wonder if InnoDB and MyISAM (and PBXT and Maria and Falcon) test as rigiously against the edge conditions of write failure as SQLite does.

    Saturday night I was asked to make a custom tree of Drizzle for PBXT, for the blob streaming protocol work, and so I did. The drizzle-blobcontainer patch is now up on my Launchpad account.

    Sunday was a hackathon, which I spent plumbing up the Drizzle pluggable error handlers. Almost done, tho hard to debug, since when it doesn't work, Drizzle doesnt output any error messages! :) When it's done, another one or two locks will be removed from the main execution path, plus a whole pile of spagghetti and hardened lava, and Drizzle will be even faster!

    Monday morning I caught the train up to New York Penn Station, riding along with Sheeri Cabral of Pythian and Ronald Bradford of 42SQL. Taking the train was cheaper and faster than driving or flying from Charlottesville to NYC.
    Temporary tables in any engine….

    Posted by: MacPlusG3, November 25, 2008 06:54 PM

    Well… nearly any engine.

    I have a plan forming in my head to add some hooks to engines to help with creating temporary tables (the ones created while executing a query, not ones created during ALTER TABLE).

    Currently, if you ALTER TABLE and we require a temporary table, it’s still database.table but we generate a table name that’s small, unique and begins with “#sql”.

    I’ve changed some of the handler interface to accept two strings (database name, table name) instead of one “path” that may (or may not) end in “.FRM” and may (or may not) begin with “./” and may (or may not) use the “/” separator between database and table name (hint: on win32, it’s sometimes “\”).

    So ha_delete_table is now: ha_delete_table(db, table_name). Sanity!

    (this has the downside of being a incompatible change that doesn’t break the build as there seems to be no way in C++ to say “derived classes cannot implement a function of this name”).

    This is annoying for temporary tables however.

    They don’t reside in a database… they’re off in la-la land (otherwise known as opt_drizzle_tmpdir).

    Now… in MySQL 5.1 the ability for multiple temporary directories was added, and the MySQL server will cycle through them. The clusterfuck part of this was that a mutex was added… so every time the code goes to get the name of a (or for 99.99999999% of cases, the) temporary directory, it has to grab a mutex. With modern systems being able to have *many* simultaneous IO operations (e.g. create files) this is just dumb. It’s gone.

    If you want to use multiple spindles for temporary tables it’s called RAID people (or buy an SSD, mkfs.ext2 it and just wipe it on reboot. simple.)

    Anyway… back to temporary tables:

    they’re in /tmp or something. So an API that’s foo(const char *db, const char *table_name) doesn’t work as well.

    Also, for a bunch of engines, it’s good to know that you’re using a temporary table. You probably want to store these somewhere that never needs fsync() or anything like that. If the server goes away, these tables are *gone*. So optimise for that.

    Heck, it may even be good to store temporary tables in your distributed engine (if that engine is memory based) as it’s often faster to access remote memory than local disk (although with SSD this is a whole different ball game… in fact, I’m not sure if it’s even still a ball game.. it’s possibly frisbee)

    But currently there’s hardcoded a mi_create (MyISAM create) call in the server and in the 6.0-maria tree, an #ifdef around if it’s mi_create or maria_create.

    So not any engine yet… but one can dream. Yes, I dare to dream.

    (although why I was dreaming of a small board with a PowerPC 603, 8MB RAM and a mini DVI port the other night is quite beyond me)

    They are wrong.

    Misleading at best.

    Reworking parts of Drizzle (which came directly from MySQL) it can get painfully obvious. Things like “afaiu” and “???” appear in more than one place (that is if the comment isn’t just obviously wrong).

    A comment merely states what one person thought the code did at some point in the past. It has no relation to what the code actually does now.

    Where is the innovation?

    Posted by: Ronald, November 24, 2008 05:05 PM

    The 2009 MySQL Conference has closed it’s submissions for papers. This year the motto is “Innovation Everywhere”.

    Last weekend’s Open SQL Camp in Charlottesville, Virginia, we had the chance to talk about the movements in the MySQL ecosystem. I was impressed to get the details of the Percona MySQL Patches, but focus is still in 5.0. (Welcome to the Percona team Tom Basil) Our Delta is attempting now to integrate patches into various MySQL branches. There was an opening keynote by Brian Aker from Drizzle, and Drizzle team Jay Pipes and Stewart Smith on hand. It was also announced that MySQL 5.1.30 will be GA, available in early December.

    But these are not innovations that are ground breaking. Last year, it was the announcement of KickFire that I found most intriguing regarding innovation.

    What is there this year?. The most interesting thing I read last week was Memcached as a L2 Cache for Innodb - The Waffle Grid Project. This is my kind of innovation. It’s sufficiently MySQL, but just adds another dimension with another companion technology. The patch seems relatively simple in concept and code size, and I’m almost prepared to fire up a few EC2’s to take this one for a spin. I’m doubly impressed because the creators are two friends and colleagues that are not hard core kernel hackers, but professionals on the front line dealing with clients daily. Will it be successful, or viable? That is the question about innovation.

    Unfortunately I spend more time these days not seeing innovation in MySQL, but in other alternative database solutions in general. Projects like Clustrix, Inc., LucidDB, and Mongo in the 10gen stack.

    Open SQL Camp

    Posted by: Eric Day, November 23, 2008 07:26 AM

    Last weekend I attended the OpenSQL Camp in Charlottesville, VA. There was a great turnout, and Baron did an excellent job organizing it! I saw a few folks I met at OSCON over the summer, along with meeting many new people. What a great group - intelligent, fun, and know how to get things done. I had some great conversations, especially with Brian, Stewart, Arjen, Patrick, Mark, and Jay. The food was great too, I was a bit worried about finding vegan food there. Oh, and there was the wine bar, and my new found love for dessert wine. Yum.

    All the sessions I attended were great! Postgres MVCC by Greg Sabino Mullane, Sphinx by Peter Zaitsev, MySQL Self Monitoring Replication by Giuseppe Maxia, Postgres Extensions by Kelly McDonald, Google Proto Buffers by Jay Pipes, OurDelta by Arjen Lentz, and Join-Fu by Jay Pipes. The hackathon on Sunday was fun, many more good conversations and project planning for Drizzle and Gearman.

    I had planned to give just one presentation on libdrizzle (slides), but ended up giving another with Brian on gearman (slides). Excuse the gearman slides, they’re a bit weak, but in our defense we threw them together 15 minutes before the talk (it was proposed only a few hours before). There were people really enthusiastic about both talks, and I received some great feedback for libdrizzle.

    I’m continuing with the Drizzle and Gearman development with all the spare time I can find, and making good progress on both. I’m in the processing of Doxygen-izing both projects, and plan to have some code for people test really soon!

    The Drizzle Snowman - PlanetMySQL fail

    Posted by: MacPlusG3, November 22, 2008 09:21 PM

    If you went “wtf” at The Drizzle Snowman - WIN! - Jay Pipes on PlanetMySQL suddenly ending at “create table”, you should click through and see the unicode character for a snowman.

    In other fun, we’ve also created tables with the name of cloud symbol, umbrella symbol and umbrella with rain drops symbol. All of these seem rather appropriate for Drizzle.

    The Drizzle Snowman - WIN!

    Posted by: nospam@example.com (Jay Pipes), November 22, 2008 07:31 PM

    Stewart, Brian and myself are having a little fun this morning. One of the niceties of having real UTF8 support in Drizzle is now we can really fun table names. Behold, the glory of Drizzle:

    drizzle>> create table ☃ (a int not null);
    Query OK, 0 rows affected (0.01 sec)
    
    drizzle>> show create table ☃\G
    *************************** 1. row ***************************
           Table: ☃
    Create Table: CREATE TABLE `☃` (
      `a` int NOT NULL
    ) ENGINE=InnoDB
    1 row in set (0.00 sec)
    

    Yep, that's a snowman.

    MySQL? Well, not so much:

    mysql> select @@character_set_system;
    +------------------------+
    | @@character_set_system |
    +------------------------+
    | utf8                   | 
    +------------------------+
    1 row in set (0.00 sec)
    
    mysql> create table ☃ (a int not null);
    ERROR 1064 (42000): You have an error in your SQL syntax; \
    check the manual that corresponds to your MySQL server version \
    for the right syntax to use near '�� (a int not null)' at line 1
    

    /me goes off to record snowman.test.

    UPDATE: There isn't an error apparently, in MySQL. As long as you set names UTF8 in the client, all works as expected.

    What VERSION in INFORMATION_SCHEMA.TABLES means (hint: not what you think)

    Posted by: MacPlusG3, November 22, 2008 12:24 AM

    It’s the FRM file format version number.

    It’s not the version of the table as one might expect (i.e. after CREATE it’s 1. Then, if you ALTER, it’s 2. Alter again 3 etc).

    In Drizzle, we now return 0.

    In future, I plan that Drizzle will allow the engine to say what version it is (where 0 is “dunno”).

    This’ll be a good step towards being able to cope with multiple versions of a table in use at once (and making sense of this to the user).

    So… in removing the FRM file in Drizzle, I found a bit of a nugget on how drop table works (currently in the MySQL server and now “did” in Drizzle).

    If you DROP TABLE t1; this is what happens

    I do like the “probably”.

    Oh, and on a “storage engine api” front, some places seem to expect handler::delete_table(const char* name) to return ENOENT on table not existing. In reality however:

    fputs(”  InnoDB: Error: table “, stderr);
    ut_print_name(stderr, trx, TRUE, name);
    fputs(” does not exist in the InnoDB internal\n”
    “InnoDB: data dictionary though MySQL is”
    ” trying to drop it.\n”
    “InnoDB: Have you copied the .frm file”
    ” of the table to the\n”
    “InnoDB: MySQL database directory”
    ” from another database?\n”
    “InnoDB: You can look for further help from\n”
    “InnoDB: http://dev.mysql.com/doc/refman/5.1/en/”
    “innodb-troubleshooting.html\n”,
    stderr);

  • and MyISAM would generate the error message itself, but that’s fixed with:
    -  if (my_delete_with_symlink(from, MYF(MY_WME)))
    +  if (my_delete_with_symlink(from, 0))
    return(my_errno);
  • and just to add to the fun, elsewhere in the code, a access(2) call on the frm file name is used to determine if the table exists or not.

    The road to removing the FRM has all sorts of these weird-ass things along it. Kinda nice to be able to replace this with something better (and, hopefully - good).

    But let me sum up with sql_table.cc:

    “This code is wrong and will be removed, please do not copy.”

    Drizzle Cirrus Milestone - Moving Forward

    Posted by: nospam@example.com (Jay Pipes), November 21, 2008 05:13 PM

    Brian, Monty, Stewart, Lee and myself sat down yesterday and fleshed out the blueprint tasks that we are targeting for the Cirrus milestone. This marks the first time we've made a concerted effort to really determine the tasks which are of essential importance in moving towards Drizzle's first release. Before I detail some of the major tasks, I'd like to make a quick recognition of our contributor community.

    Although the MySQL server does have community contributions in some of the releases, the Cirrus milestone marks something of a new day in MySQL-related development. Cirrus contains tasks which are actively being developed by external contributors. This may not sound like a huge deal, but it is.

    In the past, contributions have been included in the MySQL server, however these contributions have always been included after the code has been contributed. For instance, Jeremy Cole's SHOW PROFILES patch, although heavily modified from its original submitted form, was included in MySQL Community Server after a long period of code review and modification. However, to my knowledge, the code contributor community has never been actively involved in either ongoing feature development for a release, nor actively involved in the direction in which the server is developed.

    Cirrus marks a new day. Not only are tasks for Cirrus assigned to external contributors, but the decision-making and strategic power of the release is in the community's hands. The only reason a community member would not have a say in the direction of the server is if they don't speak up and share an opinion. As of this morning, there are 299 members of the drizzle-discuss mailing list. All of these members have a say in what gets done in Drizzle. This makes me a happy boy.

    A Note on What a "Release" Is

    Before the emails start firing off about what's in the first release of Drizzle and when it will come, I'd like to note that we are not going for a "big bang" approach to releasing software. The tasks I outline below are targets for a milestone. These tasks do not mean that the first release of Drizzle will contain all of the listed items. In fact, to be sure, some of them likely won't make it into the first release, and other tasks not listed currently for the milestone will "make it in". Although the community will eventually decide the release model, most (all?) of the developers sitting at Brian's table agree that an Ubuntu-like release model leads to more stable and consistent releases.

    By "Ubuntu-like", I mean that it is the release date which is important to be kept stable, and not the list of features contained in the release. People want consistency in when to expect the next release; it makes it easy to look forward to a certain date. What is less important is what is included in the release. What counts is that each release is stable and demonstrates incremental improvements at a consistent rate. I'll be blogging more about this concept shortly and will start a discussion on the mailing list regarding possible release dates and a schedule for locking down commits before that date. Whatever is feature-complete at the time of lock-down goes into the release. Nothing more. Why? Because stability is more important. With a set release cycle, the feature that "missed the deadline" will eventually make it into the code base in a shorter amount of time, in a consistent and stable manner.

    Targets for Cirrus

    There are a number of major areas that Cirrus is targeting:

    1. Code cleanup and standardization
    2. An updated plugin architecture
    3. An overhauled table/DB discovery design
    4. An updated replication protocol
    5. A completely rewritten client API and library
    6. An overhauled testing system
    7. An entirely redesigned INFORMATION_SCHEMA

    Many tasks in the "cleanup, reuse and refactor" category have already been completed, by Monty, Brian, myself, and community contributors such as Toru Maesaka, Patrick Galbraith, Eric Day, C.J. Collier, and Yoshinori Sano. These tasks are listed on the blueprints page starting with "code-cleanup". They are also not as dependent on each other as some of the other task areas.

    Feel free to click through on the various links to the milestone and blueprint tasks in this blog post, comment on the mailing lists, and be an active contributor. Nothing is off limits.

    Selections from Open SQL Camp

    November 15, 2008 10:14 PM


    Open SQL Camp, originally uploaded by krow.

    Click through to the flicked set. Drizzle, MySQL, Postgres, Infrobright, SQLite, and other database developers were in attendance.

    Technology predictions

    Posted by: MacPlusG3, November 09, 2008 12:26 AM

    In 2 years (ish):

    • the majority of consumer bought machines (which will be laptops) will have SSD and not rotational media
    • At the same time, servers with larger storage requirements will use disk as we once used tape.
    • At least one Linux distributoin will be shipping with btrfs as default
    • OpenSolaris will be looking interesting and not annoying to try out (a lot more “just work” and easy to get going).
    • Unless Sun puts ZFS under a GPL compatible license so it can make it into the Linux kernel, it will become nothing more than a Solaris oddity as other file systems will have caught up (and possibly surpassed).
    • There will be somebody developing a a MySQL compatible release based off Drizzle
    • Somebody will have ported Drizzle back to Microsoft Windows… possibly Microsoft.
    • X will still be used for graphics on Linux, although yet another project will start up to “replace X with something modern”, get a lot of press and then fail.

    In 5 years:

    • Apple will single handedly control 1/3rd the mobile phone market
    • The other 2/3rds will be divided between Blackberry (small), Windows Mobile and Android.
    • Linux desktop market share will be much higher than Apple’s

    That’s all for now…

    libmallocfail

    Posted by: MacPlusG3, November 07, 2008 10:50 PM

    Bazaar branches of libmallocfail

    Simple LD_PRELOAD library that will take parameters via environment variables and cause malloc() to occationally fail.

    Aim was to use this to test bits of MySQL/Drizzle although since their libtool based stuf, the binary in tree is a libtool shell script, and I haven’t found a way to LD_PRELOAD only for mysqld and not the shell script and the other processes spawned by it.

    I have found a bug in libc though :)

    Log Buffer #122: a Carnival of the Vanities for DBAs

    Posted by: David Edwards, November 07, 2008 05:26 PM

    Welcome to the 122nd edition of Log Buffer, the weekly review of database blogs.

    Let’s start with MySQL. As you probably know, the Americans were at the polls this week. In keeping with this, Keith Murphy is polling for opinion on the question: MySQL on Debian or Ubuntu? The conversation is here; the poll is on Keith’s Diamond Notes.

    A quick note by Sun CEO Jonathan Schwartz on how, with the outcome of those other polls, change has come to America, in the form of its new president and his choice of DBMS. Okay, it’s probably not his choice, but the association must be appealing.

    Duleepa “Dups” Wijayawardhana also has a big new job. He’s taking over from Jay Pipes as MYSQL Community Manager, and his advice to himself is, Don’t Panic!. As a compatriot of Dups, I say: congratulations, eh!

    Can we create a cross tab in MySQL? Yes we can! Arnold Daniels shows us how. Sheeri and Corey show some more.

    On so many trails … so little time, Pabloj elucidates new syntax (the new WITH ROLLUP) for the old challenge of adding a “Total” row at the end of your tabular output.

    Brian Aker was barking up a nearby tree . . .  or a nearby column, at any rate. Here’s his item on column stores in Drizzle. He writes, “I believe the second most important decision we will make long term for engines is going to be which column store we pick up on. I suspect we might even need two.” But which two? (more…)

    Use MySQL, get elected President of the United States

    Posted by: MacPlusG3, November 05, 2008 09:07 AM

    Jonathan puts it in slighty different words, and doesn’t gaurantee The White House to everybody.

    I do wonder when we’ll get a Drizzle or NDB using president though….

    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 that requires large rooms to house us all in. It’s also been all about smart people (you have to be to work on a distributed database).

    With MySQL Cluster 6.4 we’re getting in a bunch of features that have been on the “wide adoption” wishlist. With each release of NDB we’ve gained a wedge of applications that can be used with it - and 6.4 is no exception.

    One of the biggest things that’s been worked on is multithreaded data nodes. If you check out Jonas‘ recent posts on 500,000 reads/sec and then a massive 700,000 reads/sec.

    We’ve also got a Microsoft Windows port coming up, which a number of people have asked for over the years. Mostly I think this is a “I want to try it out” thing and not a deployment thing. (can any sane person deploy a HA app on Win32?)

    I’ve used “NDB$INFO” as the ultimate answer to any problem for a while now. It’s been the much-wanted monitoring interface. We have a lot of info inside NDB that currently isn’t easily user accessible (or only accessible through the magic DUMP interface or by gathering up many events in the cluster log). We have the start of NDB$INFO in 6.4 now and Martin will be continuing my work in making it truly awesome.

    So go and grab the 6.4 tree and have a look - things are looking sweet.

    What next for me?

    Well… a while ago I started hacking on Drizzle. Why? Well… I thought we could move the database server in a new direction and make it more modular, leaner, meaner query machine.

    And now, I’m starting to work on it full time.

    It’s exciting, and I’ll be blogging on the first TODO which is remove the FRM file and switch to a full discovery method shortly.

    UPDATE: Yes, I’m working full time on Drizzle for Sun Microsystems (in the CTO group). While not spending work time on NDB anymore, no doubt you’ll still see fun-time patches.

    Performance Interface, Drizzle

    November 02, 2008 01:29 AM

    Aarti has published the current effort around a new Performance Interface. It is draws from the work of Robin Schumaker

    Create Session Level Contention Objects

    Here is the original announcement: https://lists.launchpad.net/drizzle-discuss/msg01978.html

    Feedback around the design is very welcome on the mailing list :)
    When I was in Japan I sat down and spoke with ~40 folks from the Japanese community on Drizzle. Japan easily has more hackers who go into the MySQL code base then any other single country (I am talking about people who hack storage engines/optimizers/etc). There is a lot of good stuff in Japan that just never makes it out of country (I'll blog about two storage engines who came out of Japan in a later blog entry). We have had number of patches that have come from folks in Japan, and I am hoping to see that grow!

    Here is a couple of blog entries from folks who went to the meeting :

    http://d.hatena.ne.jp/Kiske/20081031/1225465597

    http://d.hatena.ne.jp/Voluntas/20081101/1225518072
    Column Stores, Drizzle, Search For

    November 01, 2008 01:03 AM

    Last week when I commented on Directions in Database Technology and mentioned " Column stores will continue to evolve". I received a number of comments via IM, Twitter, and email from folks who wanted to know more about column stores (both in how they relate to Drizzle and their usage in general).

    Very early on when we started work on Drizzle the plan was to focus web applications. When we looked at cutting features, one of the criteria was "is this needed for web deployment". In many cases we have leaned toward keeping functionality when it was clearly well designed and had a general usefulness. To give an example, ROLLUP for instance is not typically used for web applications, but it is a well written feature that provides us with functionality that we find is handy.

    Rollup though is a feature I would typically group in the "Data Analytics" area. Did we keep it?

    Yes, because it is useful in a general sense even if you are not doing data analytics (I also find it to be a gem that few MySQL DBAs know).

    Early on with Drizzle I tried to discourage innovation outside of the web stack, but that has proven to be futile. The fact is, we provide a micro-kernel, and users will find uses for it. To me the core of what Drizzle is, is the micro-kernel. Anything other then the Micro-kernel is service, and these are required to build solutions. Trying to direct innovation is frankly something I should have known better then to try to do.

    The short of this is that we will tackle data analytics in our own manner, and today that means we will eventually adopt a column store. Like map/reduce, column stores are one of the inevitable trends.

    In the open source world, this means Infobright right now. If you look at Infobright, which has yet to be well known in open source circles, you see a concrete example of a column store which is well purposed. It is built on top of MySQL, but has its own enhanced parser for data analytics (the basic MySQL/Drizzle optimizer is poorly designed for this sort of work). To really get good performance you have to go the route that Infobright went in replacing the optimizer (the value add for "just an engine" is small, you really do need something more).

    At some point I believe we will tackle those types of changes for our optimizer but I don't see the point in it right now. We aren't out to replace SQLite or Postgres, why fill a niche that Infobright already does well?

    So then, what is the future of the column store as relates to Drizzle?

    I believe the second most important decision we will make long term for engines is going to be which column store we pick up on. I suspect we might even need two.

    Why two?

    It is obvious that we will need one for data analytics. Using standard OLTP designs for data analytics does not work. This though is not our focus, so it is a long term need, not a short term one.

    My interest is in one for shared nothing cloud services (which is in my personal area of interest). The contender for that at the moment looks to be HyperTable, but my opinion there is based on back of the napkin conclusions. We have to do an integration in order to determine if it pans out (and there are attempts right now to do this). There seems to be a number of groups interested in this, so I know it will happen.

    As much as column stores are useful for data analytics, and probably required at this point, I believe there is a larger need for them in the space of cloud computing. They have a natural ability to scale out and I believe this will be key for the semi-structured nature that we see most often in Web Application data. While I expect setups of single node Drizzle databases, I also believe that we will need shared storage backends. These will obviously not be for OLTP uses in the beginning.

    Skip ahead into the future though and the nature of MVCC design though, plus an optimistic optimizer, should allow engineers to eventually build out OLTP systems with shared nothing backends that make use of column stores. This is not on our current roadmap, but it is also not hard to see where the future might just go.

    UPDATE Several people have made mention of LucidDB as being an open source column oriented database. I've only barely looked at it, so I can't say much about it.
    Log Buffer #121: a Carnival of the Vanities for DBAs

    Posted by: Keith Murphy, October 31, 2008 04:01 PM

    This week gives me a chance to get back into something I love to do—write. For those who don’t know, my name is Keith Murphy and I am a MySQL DBA at the Pythian Group. In addition, I have the privilege of being the editor of the MySQL Magazine, a quarterly  magazine for those who use MySQL on a daily basis, either as a DBA or a developer. The sixth issue was just released last week and is available for download now. But enough about me! Let’s see what you all had to say this week.

    Beginning with the world of MySQL.

    Monty Taylor kicks things off, bringing us news of the ability to use the innodb plugin with Drizzle. I just think its great how the Drizzle development is moving along so rapidly. My thanks to everyone involved.  Monty also puts out a call to help defray the cost of the purchase of the drizzle.org domain name.

    There have been several posts this week on virtualization of MySQL Server. I point you to a colleague at Pythian, Sheeri Cabral, who wrote about some of the benefits our customers have already experienced while using virtualized servers. While virtualized servers are not a panacea, they definitely have a place in the DBA’s environment. If you don’t work with any currently, you will be doing so down the road.

    The OpenSQL “unconference” is coming! The date is Nov 14 -16 in Charlottesville, Virginia, USA. Details and registration information are available here. Speaking of conferences, the MySQL Users Conference, which is in April in Santa Clara, CA, USA has extended its deadline for topic proposals.

    Baron has a great post on naming conventions for your schema.

    In the how-to department, Falko Timme has a good tutorial on how to set up GreenSQL to protect your databases from SQL Injection attacks. Finally, Johan Andersson has a good introductory blog post on optimizing queries for a NDB cluster, and a post on how you can get the Cluster Sandbox tool for testing the MySQL Cluster.

    The Oracle world had sad news this week. Carl Backstrom, who was an Oracle employee and APEX developer, was killed early Sunday morning in a car accident in Nevada. (more…)

    Drizze, libuuid, Sometimes "other" is better...

    October 29, 2008 10:05 PM

    One of the stated goals of the Drizzle project is to "reuse many eyeballs". I dislike "Not Invented Here", it breaks one of my primary rules that is "all engineers should be lazy".

    By lazy I don't mean "don't do your work". Being an engineer means that you build stuff. If you aren't building stuff, then you are not an engineer.

    Being lazy means that you reuse other people's work as much as possible. Skip re-inventing the wheel.

    Sometime ago MySQL introduced a uuid() function into the server. It creates infinite numbers of keys for you, at the cost of creating a large footprint in your indexes. There is a trade-off in this, but I find people are willing to make it.

    What was the problem?

    We wrote our own UUID function instead of just inheriting the one that most systems provide. What does this lead to?

    Code that only a few eyeballs ever looked at (and we have an active debate on whether its startup is thread safe or not).

    We decided to look at this recently as an exercise in "was there a better choice". For this we picked the libuuid code that comes with Linux and OSX distributions.

    The end result?

    The libuuid code was faster.

    Not by a lot, but the performance did show up, especially on multi-core hardware.

    Is this a surprise? Not entirely. I would hope that code which is used by many people would turn out better the code that only a few looked at.

    I'm attaching the end results. The first run was doing incrementing thread runs while diving the load out among clients as threads increased. The second run shows increasing work as threads increase. All work was done using our default engine (which is Innodb). I used on of my spare 8 core systems. When I get the chance I will look at reproducing it on something larger.
    Picture 5.png

    Picture 4.png

    Drizzle: Now with the InnoDB Plugin

    October 28, 2008 09:36 AM

    The InnoDB plugin is now merged into the Drizzle mainline. There is still one weird outstanding bug that I know of. Why is this exciting? The main things found in the plugin that I'm excited about are:
    • New compressed table format.
    • Adding or dropping indexes can now bypass the table copy
    • Information Schema plugins with InnoDB internals data
    Not to mention, something tells me that the plugin will be getting more dev attention, and should be easier to track moving forward.
    I've been doing my best to make the changes in such a way that they could be potentially merged back into the plugin upstream, should Oracle care to. (which I hope they will)
    The InnoDB plugin is now merged into the Drizzle mainline. There is still one weird outstanding bug that I know of. Why is this exciting? The main things found in the plugin that I'm excited about are: Not to mention, something tells me that the plugin will be getting more dev attention, and should be easier to track moving forward.
    I've been doing my best to make the changes in such a way that they could be potentially merged back into the plugin upstream, should Oracle care to. (which I hope they will)
    Help pay for drizzle.org

    October 27, 2008 05:07 PM

    It just goes to show that code isn't the only way to contribute. Mike Shadle recently did some leg work the Drizzle world by not only fronting the domain cost for drizzle.org, but also in actually negotiating down the guy who owned it already. That being done, the time has come (if you're so inclined) to chip in and help defray Mike's out-of-pocket.
    The goal is to raise roughly $1000 USD to cover the domain + Escrow costs. I've already said I would contribute a chunk of that. Please include in the PayPal description your full name/company/whatever identifying information you'd like and if you'd like it recorded, and I will record it and if the Drizzle guys wish, we can post your info on the [not established yet] website as a Drizzle supporter.
    If you've got an extra few buck lying around, please feel free to Help Establish a permanent address for the Drizzle
    s/FAIL/ewwwww/

    October 24, 2008 11:34 AM

    Antony points out:
    Unfortunately, I had to work with the limitations of the C programming language and its preprocessor so to achieve a solution which behaved as if it had the strong typing like generics but working with simple C;

    Yeah, I started out ranting about that whole system too, but decided against it since I knew the real culprit was, as is usual, requirements. I do not envy the task of implementing C++ generics in preprocessor macros. :) (I do look forward to going and reading the worklog though)

    As Antony suggests, I am speaking in the context of Drizzle, which means I'm speaking from the vantage point of having change the underlying assumptions. We use C++ fully in Drizzle. So whereas in MySQL this code is, as Antony says, performing properly (quite amazingly well, actually) in Drizzle it's rather FAIL. (Funny how changing design assumptions can do that). Since it's hard and slightly unfair to reverse judge something old in the context of new assumptions, I revoke my "FAIL" and will just leave it at "ewwwwww". :)

    Antony's right: for us this is ripe for replacement by some nice templates - as is sys_var, et al. Actually, I'm starting at sys_var and hope to have it sensible enough that plugins can just use it directly rather than having to have a separate system.
    The following comment:
    /* the following declarations are for internal use only */
    is about 35% of the way down drizzled/plugin.h. How about:
    If it's for internal use only - DONT PUT IT IN A HEADER FILE!!!!!!!!! At least not a header file that's used by things.
    MySQL Magazine Fall 2008 Issue Available!

    Posted by: Sheeri Cabral, October 23, 2008 01:40 PM

    Get it while it’s hot! The Fall 2008 issue of the MySQL Magazine is now available at http://www.mysqlzine.net. Issue 6 is chock full of 16 pages good stuff, including:

    • “Decision Table”-Driven Development by Jonathan Levin
    • Part I of a series on Transaction Time Validity in MySQL by Peter Brawley
    • An Overview of Zmanda Recovery Manager by Pythian’s own Gerry Narvaja
    • Keith Murphy, editor has a note about Drizzle.

    Download the PDF directly or go to the MySQL Magazine page to download any and all of the 6 issues.

    Drizzle: Ahead of the Storm

    Posted by: sogrady, October 23, 2008 04:06 AM

    So Tim is sold on Drizzle. Well, to paraphrase Shrek, “join the club, we’ve got jackets.”

    For a while now, I’ve been keeping tabs on the progress of the MySQL fork, because it could be argued that it’s the most interesting - and important - project going. That’s a bit of hyperbole, of course, because relative to, say, Linux, Drizzle is a speck, visibility-wise.

    But look closer, and the significance of Drizzle becomes more apparent. In challenging long held assumptions, whether that’s architecturally or commercially, Drizzle is likely to point the way forward for a number of software projects, both open source and not. Here’s why.

    Database Directions

    In discussing the project as it was launched, I invoked Adam Bosworth’s seminal database piece, “Where have all the good databases gone.” The macro relevance was simple: databases had, Adam argued, taken one path while customers took another, and Drizzle can be viewed - to some extent - as a response to that. Not necessarily in the way that Adam meant it - although per his comment at the time, he’s fully behind Drizzle - but certainly as a break with the direction that MySQL was heading. A direction that largely paralleled its larger erstwhile competitors, DB2 and Oracle.

    Drizzle, on the other hand, breaks quite fundamentally with the traditional conception of a database, on both the hardware - as we’ll see - and software fronts. Regarding the latter, it aggressively reverses the 5.0 era additions of stored procedures, triggers and so on to MySQL. According to Krow, “Stored procedures are the dodos for database technology.”

    But those who would dismiss Drizzle as merely a stripped down MySQL miss the point entirely; the project is, if anything, a fundamental rethinking of what a database should be and the deployment context for it. Drizzle is emphatically more than a refactoring. It is, rather, a database being built expressly for scale out clouds running Map/Reduce like architectures at immense scale. How to get there is still in question, but the models discussed are these:

    One direction is obvious, map/reduce, the other direction is the asynchronous queues we see in most web shops. There is little talk about this right now in the blogosphere, but there is a movement toward queueing systems. Queueing systems are a very popular topic in the hallway tracks of conferences.

    Drizzle might not be precisely the database envisioned by Adam four years ago, then, but it would seem to be pretty close.

    Development Model

    Aside from its popularity, MySQL is perhaps best known for its dual license development model. Here’s how I’ve explained this model in the past:

    In the first model, a single entity such as MySQL is responsible for the overwhelming majority of all development on a given codebase. Anything they don’t produce themselves, they license. Very often this is practiced in conjunction with the dual-license model; because MySQL is responsible for virtually all of the development of the core code, they own or have licensed appropriately all of the involved IP. As such, they’re free to issue commercial licenses to those who cannot or choose not to comply with the terms of the open source license - the GPL, in this case.

    At the risk of oversimplifying a complex model, dual licensing trades an open development model for the right to exclusively license the asset for commercial gain. MySQL’s perhaps the best known proponent of this model, but it is hardly rare.

    What’s interesting about Drizzle - which is developed by MySQL employees that are in turn employed by Sun - is that it actively rejects this model in favor of an open development paradigm. How open? This open: “Today 2/3 of our development comes from outside of the developers Sun pays to work on Drizzle. Even if we [Sun] add more developers, I expect out total percentage to decrease and not increase.”

    It might still be possible to maintain a dual licensing model, if copyright assignment is instituted as a precondition for the acceptance of a patch. Drizzle, however, requires no such assignment. Which at once throttles up the potential volume of contributions and chokes the ability of MySQL/Sun to commercialize the asset under exclusive terms.

    And yet Sun is actively funding the development, meaning that (presumably) they see commercial opportunities therein. Linux and countless other projects demonstrate quite adequately that exclusivity is not the sole or even primary path towards monetization, but this does represent a departure - and a significant one - from MySQL’s model.

    As such, it bears watching.

    For Better or Worse, Forking

    Lost in discussion of Drizzle’s technical assumptions and architecture is the potential malleability of the project. While sitting on a panel with him at OSCON this past July, Brian previewed some of his thinking on forking committed to the page here:

    I see forks as a positive development, they show potential ways we can evolve. Not all evolutionary paths are successful, but it makes us stronger to see where they go. I expect long term for groups to make distributions around Drizzle, I don’t know that we will ever do that.

    Again, this is a significant departure from the conventional wisdom regarding open development, which considers forks inevitably toxic.

    Granted, the current portfolio of development tools - such as the Bazaar/Launchpad combination used to construct Drizzle - permit levels of experimentation and fragmentation that would have derailed more centrally managed codebases in the past. Allow further that this level of experimentation can be enormously beneficial, much as evolution uses proliferation and specialization as a means of natural selection.

    Still, it will be interesting to see whether or not the Drizzle community can sustain a relatively diffuse level of development, if projects multiply and diverge at a rate faster than the core development community can adapt to.

    Hardware Assumptions

    The core hardware assumptions for Drizzle are both aggressive and not. In no particular order, a few of the baseline assumptions:

    • 64bit
    • Multi-core
    • SSD
    • N > 1

    I don’t have much to say about the 64 bit assumption except to say that I agree, and likewise designing towards multi-core seems like a no-brainer given that the laptop I’m writing this from has two, though the point about thinking bigger is well taken:

    Right now adoption is at the 16 core point, which means that if you are developing software today, you need to be thinking about multiples of 16. I keep asking myself “how will this work with 256 cores”.

    Regarding the SSDs, this is the Drizzle view:

    SSD is here, but it is not here in the sizes needed. What I expect us to do is make use of SSD as a secondary cache, and not look at it as the primary at rest storage. I see a lot of databases sitting in the 20gig to 100gig range. The Library of Congress is 26 terabytes. I expect more scale up so systems will be growing faster in size. SSD is the new hard drive, and fixed disks are tape.

    Again, not much to question here, but I wonder if there aren’t opportunities to leverage Flash drives more directly in conjunction with other media as the Fishworks guys are doing with their hybrid storage pools (see Mike Shapiro and I discussing that here - just ignore the buses going by). Storage infrastructure is intrinsically different than database infrastructure, it’s true, but the opportunity to pool different storage media using a ZFS like-filesystem to maximize collective performance might still be relevant even with the higher I/O needs.

    Last on the hardware side is this: “I do not assume Drizzle will live on a single machine.” I’m assuming Joe Gregorio agrees; I know I do.

    Storage Engine Implications

    When it’s not rethinking the featureset, the design assumptions, or the development model, Drizzle is also triggering a reappraisal of the various storage engine options. The verdict? Of a short list of Innodb, Maria, Falcon, and PBXT, source trees will be built around only PBXT and Innodb. For now, anyway.

    Disclosure: Sun is a RedMonk customer, as was MySQL prior to their acquisition.

    by-nc-sa
    Assumptions, Drizzle

    October 22, 2008 06:00 PM

    What is the future of Drizzle? What sort of assumptions are you making?

  • Hardware

    On the hardware front I get a lot of distance saying "the future is 64bit, multi-core, and runs on SSD". This is a pretty shallow answer, and is pretty obvious to most everyone. It suits a sound bite but it is not really that revolutionary of a thought. To me the real question is "how do we use them".

    64bit means you have to change the way you code. Memory is now flat for the foreseeable future. Never focus on how to map around 32bit issues and always assume you have a large, flat, memory space available. Spend zero time thinking about 32bit.

    If you are thinking "multi-core" then think about it massively. Right now adoption is at the 16 core point, which means that if you are developing software today, you need to be thinking about multiples of 16. I keep asking myself "how will this work with 256 cores". Yesterday someone came to me with a solution to a feature we have removed in drizzle. "Look we removed all the locks!". Problem was? The developer had used a compare and swap, CAS, operation to solve the problem. Here is the thing, CAS does not scale with this number of cores/chips that will be in machines. The good thing is the engineer got this, and has a new design :) We won't adopt short term solutions that just kneecap us in the near future.

    SSD is here, but it is not here in the sizes needed. What I expect us to do is make use of SSD as a secondary cache, and not look at it as the primary at rest storage. I see a lot of databases sitting in the 20gig to 100gig range. The Library of Congress is 26 terabytes. I expect more scale up so systems will be growing faster in size. SSD is the new hard drive, and fixed disks are tape.

    The piece that I have commented least on is the nature of our micro-kernel. We can push pieces of our design out to other nodes. I do not assume Drizzle will live on a single machine. Network speed keeps going up, and we need to be able to tier the database out across multiple computers.

    One final thought about Hardware, we need 128bit ints. IPV6, UUID, etc, all of these types mean that we need single instruction operator for 16byte types.

  • Community Development

    Today 2/3 of our development comes from outside of the developers Sun pays to work on Drizzle. Even if we add more developers, I expect our total percentage to decrease and not increase. I believe we will see forks and that we have to find ways to help people maintain their forks. One very central piece of what we have to do is move code to the Edge, aka plugins. Thinking about the Edge, has to be a share value.

    I see forks as a positive development, they show potential ways we can evolve. Not all evolutionary paths are successful, but it makes us stronger to see where they go. I expect long term for groups to make distributions around Drizzle, I don't know that we will ever do that.

    Code drives decisions, and those who provide developers drive those decisions.

    While I started out focusing Drizzle on web technologies, we are seeing groups showing up to reuse our kernel in data warehousing and handsets (which is something I never predicted). By keeping the core small we invite groups to use us as a piece to build around.

    Drizzle is not all about my vision, it is about where the collective vision takes us.

  • Directions in Database Technology

    Map/Reduce will kill every traditional data warehousing vendor in the market. Those who adapt to it as a design/deployment pattern will survive, the rest won't. Database systems that have no concept of being multiple node are pretty much dead. If there is no scale out story, then there is not future going forward.

    The way we store data will continue to evolve and diversify. Compression has gotten cheap and processor time has become massive. Column stores will continue to evolve, but they are not a "solves everything" sort of solution. One of the gambles we continue to make is to allow for storage via multiple methods (we refer to this as engines). We will be adding a column store in the near the future, it is an import piece for us to have. Multiple engines cost us in code complexity, but we continue to see value in it. We though will raise the bar on engine design in order to force the complexity of this down to the engine (which will give us online capabilities).

    Stored procedures are the dodos for database technology. The languages vendors have designed are limited. On the same token though, putting processing near the data is key to performance for many applications. We need a new model badly, and this model will be a pushdown from two different directions. One direction is obvious, map/reduce, the other direction is the asynchronous queues we see in most web shops. There is little talk about this right now in the blogosphere, but there is a movement toward queueing systems. Queueing systems are a very popular topic in the hallway tracks of conferences.

    Databases need to learn how to live in the cloud. We cannot have databases be silos of authentication, processing, and expect only to provide data. We must make our data dictionaries available in the cloud, we need to take our authentication from the cloud, etc...

    We need to live in the cloud.
  • S3 storage engine ported to Drizzle

    October 21, 2008 12:22 AM

    I've ported my AWS S3 storage engine to Drizzle.

    The source is at bzr branch lp:~fallenpegasus/drizzle/awss3. Pull it and build it like you would the main Drizzle. The engine is built-in, no need to plugin load it.

    Example use:
    
       CREATE TABLE colors
         (nam VARCHAR(32) NOT NULL PRIMARY KEY, val BLOB)
            ENGINE='AWSS3'
            CONNECTION='awss3 bucket_name aws_id aws_secret';
       SELECT val FROM colors WHERE nam='BlueViolet';
    
    


    I will try to keep it tracking the main Drizzle dev tree.
    Yet two more new plugin types for Drizzle

    October 20, 2008 05:47 PM

    [info]krow asked for two more plugin types for Drizzle: Scheduler (which allocates and controls threads, and assigns them to sessions), and (drumroll), Parser.

    People have been asking for plugin parsing for MySQL for years.

    Drizzle is about to get it.

    :)
    More Drizzle plugins and plugin types

    October 18, 2008 10:01 PM

    I just pushed up a new Drizzle branch at lp:~fallenpegasus/drizzle/newplugins

    It contains two new plugin types, one for configuration interface, and one for query cache. Those two are not "plumbed in", and are in fact just templates, containing two dummy entry points with two dummy parameters. But they follow the evolving pattern for plugin types.

    It also contains fixes and improvements for the logging and errmsg plugins. The logging engine implementation has parameters for filtering for slow queries and for "big queries", both ones that return a lot of rows, and ones that just examine a lot of rows.

    It's all also been internationalized.

    There is still lots of work to be done, but it's fun to get this foundation st