This is my coverage of the second day of the 2007 MySQL Conference which was written during the third day. Day One was discussed previously.
The entire exhibit floor opened quietly this day. The traffic and interest of the attendees had changed quite a bit. The first day, everyone is simply roaming around finding out what's there. The second day, the bulk of the people don't come back. They've had their curiosity satisfied and they only come in to get the free stuff. But the interesting thing is that the remaining people have completely different goals.
This led to quite a few less people stopping to ask questions, but the questions are much more focused on the goals and direction of the project and/or how it can solve their specific problems. The questions were much deeper and even allowed us to discuss the core architecture of the system. Although we spoke with significantly less people, most of them stuck around quite a bit longer. One of the more interesting ongoing discussions was concerning the REST interfaces I originally sketched out in my REST Web Services talk last fall at DCPHP.
The first presentation I attended was Adam Donnison's session on Running a Top 500 Web Site with LAMP Stack and Commodity Hardware. Disclaimer: Adam is the project leader of dotProject, so I may be a bit biased. 😉 I happened to find his talk stunning. He described the setup of MySQL's web properties from when he joined them – about 18 months ago – to present. At that time, they had two load balanced web servers serving data from a pair of load balanced database servers. That's it. I'm still a bit in shock over that one but my first thought was that it makes quite a bit of sense. Of any group that will have a highly tuned database and server setup, MySQL would have it. Of course, I was wrong. Adam pointed out that when you make assumptions about usage patterns, you can tune towards those patterns but you end up de-tuning alternative ones in the process. Point taken.
In the last 18 months, it appears that they've come a long way in terms of systems and architecture. They have numerous web servers and a master/slave database setup. The thing I found to be the most interesting is that the master is write only while each of the slaves are read only. Therefore, when something bad happens and they have an outage, the worse case is that the site(s) enter a read-only mode which affects only a tiny group of users. In addition, one of the slave database servers is always the latest and greatest release of MySQL. This gives them real feedback on synchronization issues. Just after the presentation, he showed some of the stats/monitoring screens and turned away to start talking about them. Ironically, it was at this moment that the site took a dive.
Back at the booth, things were finally winding down and lots of schwag was being distributed. I happened across the team at SnapLogic and will likely talk about them in the future… interesting things afoot there.
Disclaimer: I've met and talked to Bill a number of times and he was the one who invited me to participate with the Zend Framework.
The final regular session was Bill Karwin's session on “Using MySQL with the Zend Framework” which was basically an overview of the Zend DB component. I have not used it, but at present, it appears to offer a single interface to MySQL, Oracle, MS SQL, and a variety of other systems. I don't have a need for this, but I see how many “business intelligence” applications or reporting applications might need to have this sort of thing to reach into each of the various systems and archives of various departments. In addition, the DB libraries implement a very lightweight Active Record Pattern to make your life a bit simpler.
As an aside, I realized last week how little SQL I write any more. Between the Active Record Pattern – which gained attention from Ruby on Rails – and a bit of code generation – using QCodo – the only SQL I write anymore is to do the nasty bits having to do with specific business logic. My CRUD operations are simply handled for me and I save quite a bit of change. After this presentation, I noted this to Mike Ho – creator of QCodo – and he pointed out areas and concepts – like QCodo's QForms – that save even more time.
During Bill's presentation, I was also sketching out some simple logging code for a production PHP application (no, not dotProject). It has no logging whatsoever at present, so I've had a free hand and it's relatively simple, so I was rolling my own. Then it hit me. I bet the ZendFramework has a Logger, why don't I use that? In the following hour, I implemented it. And it worked. It was almost anti-climactic… but I guess that's the point of these tools.
The evening closed with the MySQL Quiz Bowl where bribing the judges was recommended. While there was deep discussion about MySQL internals, optimization strategies and general architecture, the best question of the evening was:
SELECT, INSERT, UPDATE – which word gives the most points in Scrabble?