There's a lot of activity in the MySQL ecosystem currently.
I've written an article for The H which
takes a look at MySQL and the various forks and spinoffs to give
an overview of where MySQL's community and close competition is
currently at.
http://www.h-online.com/open/features/MySQL-and-the-forks-in-the-road-1829242.html
From my previous posts, we have some numbers (excluding NDB) for the size of MySQL, so what about PostgreSQL? Here, I used PostgreSQL git trunk and classing things in the contrib/ directory as plugins. I put the number of lines of code in the src/backend/storage directory down as storage engines LoC but did not count it as non-kernel code.
Version | Total LoC | Plugin LoC | Storage Engines LoC | Remaining (kernel) |
MySQL 5.5.30 | 858,441 | 2,706 | 171,009 | 684,726 (79% kernel) |
MySQL 5.6.10 | 1,049,344 | 29,122 | 236,067 … |
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 storage engines and everything else comes under plugin). I’ve excluded NDB from these numbers as it is rather massive and is pretty much still a separate thing.
Version | Total LoC | Plugin LoC | Storage Engines LoC | Remaining (kernel) |
MySQL 3.23.58 | 371,987 | 0 (0%) | 176,276 | 195,711 (52% kernel) |
… |
Continuing on from my previous posts, MySQL code size over releases and MariaDB code size I’ve decided to also look into some other code branches. I’ve used the same methodology as my previous few posts: sloccount for C and C++ code only.
There are also other branches around in pretty widespread use (if only within a single company). I grabbed the Google, Facebook and Twitter patches and examined them too, along with Percona Server 5.1 and 5.5.
Codebase | LoC (C, C++) | +/- from MySQL | |
Google v4 patch 5.0.37 | 970,110 | … |
I got rid of unireg.cc way back in 2009 as I rewrote all the FRM related code inside Drizzle to instead use a nice protobuf based structure. If you’re wondering what was there, I just quote this part of pack_screens() from unireg.cc in MySQL 5.6:
start_row=4; end_row=22; cols=80; fields_on_screen=end_row+1-start_row;
We have gradually pulled things out of unireg.h over the years too. But, let’s go back to ask the question “What is UNIREG?”. To answer that, I’m going to quote from something that was current back when MySQL 3.22 was the latest and greatest:
In 1979, he developed an in-house database tool called UNIREG for managing databases. Since 1979, UNIREG has been rewritten in several different languages and extended to handle big databases.
No doubt the definition of big has changed for most people since then. If we …
[Read more]
Today marks the first release of Drizzle Tools for MySQL
servers. Drizzle Tools aims to be a collection of useful
utilities to use with MySQL servers based around the work on the
Libdrizzle Redux project.
In this first version there is one utility in the tree called
'drizzle-binlogs'. If you've seen me talk about this tool
before it is because it used to be included in the Libdrizzle 5.1
source but has now been moved here to be developed
independently. For those who haven't 'drizzle-binlogs' is a
tool which connects to a MySQL server as a slave, retrieves the
binary log files and stores them locally. This could be
used as part of a backup solution or a rapid way to help create a
new MySQL master server.
Due to the API changes before the Libdrizzle API became stable
Drizzle Tools requires a minimum of Libdrizzle 5.1.3 to be …
Taking the inspiration of Valeriy Kravchuk great series of blog posts “Fun with Bugs” (and not http://funwithbugs.com/ which is about both caring for and eating bugs), and since I recently went and run Coverity against Drizzle, I thought I’d have a small series of posts on bugs that it has found (and I’ve fixed).
An idea that has been pervasive in the Drizzle project (and one that I rather subscribe to) is that there is two types of correct: correct and obviously correct. Being obviously correct is much, much better than merely being correct.
The first category of problems that Coverity …
[Read more]Coverity is a static analysis tool, which although proprietary itself does offer a free scanning service for free and open source software (which is great by the way, I totally owe people who make that happen a frosty beverage).
Prompted by someone volunteering to get MariaDB into the Coverity Scan, I realized that I hadn’t actually followed through with this for Drizzle. So, I went and submitted Drizzle. As a quick overview, this is the number of problems of each severity both projects got back:
Severity | MariaDB | Drizzle |
This weekend I am supposed to be giving a talk at FOSDEM on
Libdrizzle. Unfortunately my kids and I all
fell ill on Thursday (my wife appears to be immune) so I had to
cancel my plans (infecting 5000 people didn't seem wise :)
Instead I am writing this blog post about Libdrizzle and my part
in it which covers some of what I was going to talk about.
History of LibdrizzleLibdrizzle started out as a from-scratch C
connector for Drizzle and MySQL originally created by Eric
Day. It was designed to be high performance and use common
standards to make it easy to work on. In the summer of 2010
it was merged into the main Drizzle tree where development has
been focused. There were several attempts to split it out
again but until now none were truly successful.
For a few years Brian …
As part of the Libdrizzle Redux project I created an example tool
which was bundled with it which will connect to a MySQL server as
a slave and download the binary logs to local files. This
was developed as a quick example of what can be done with the new
binlog API.
Two things quickly became apparent:
- We shouldn't really be distributing applications in a library
- I am going to be developing more useful tools around libdrizzle and they certainly shouldn't be in the same package
- BSD is a fantastic license for a library, but I personally prefer GPLv2 for applications
With this in mind I have pulled the drizzle_binlogs utility from
Libdrizzle trunk (and therefore won't be in the 5.1.3 release)
and put it in its own repository. It has been licensed
appropriately (GPLv2) and I am already beginning to develop more
tools to go with it.
The are no source …