One issue with many web development languages such as PHP or python is that all IO is blocking. So every time a program goes to the net, disk or database the thread or process blocks. It stops what it is doing and waits until the data comes back from the disk or network. In a heavily loaded server which is being bottlenecked by disk or network this can result in a great number of processes in disk or network wait states, this is less than ideal when trying to scale.
For 90% of projects done with PHP and similar tools the database engine of choice is MySQL, (Postgress gets a large chunk of what is left). So when starting a new project using PHP, Python, Ruby etc the choice of a data store will default to MySQL and in some cases that is great. There is still the choice between myism and innodb tables but that one tends to be pretty easy.
However of late 'NoSQL' has become all the rage with new data storage engines showing up every so often.
The Developer faces a few challenges when moving from MySQL to one of these NoSQL engines.
1) Most web developers understand MySQL pretty well (we hope). We know how to index things, how to layout tables etc. This level of know how has not yet been established with the new NoSQL products.
2) The tools like phpMyAdmin and such for MySQL have been around for a while and are pretty well established
3) There are at least three big NoSQL data stores in the free software arena. (CouchDB, MongoDB and Cassandra) While competition is very much a good thing for the programmer who is not familiar with these products having to try to figure out which one to use in any given case can be a bit problematic.
I expect all three of these issues will start to go away over the next few years as the tech literature catches up to the software
We seem to be bringing a lot of new web development tools online in the last 18 months or so. The problem is that many of these tools will require a major change in how web development is done. New tech to think about
Node.JS (Async I/O)
NoSQL (MongoDB, CouchDB, Casandra)
HTML 5 web workers
Part of the reason for this blog is to start the conversation on how to use these new tools.
MySQL is a great database. It has a lot of good features and is reliable in a great many use cases. However it sometimes hits its limits, some of these are specific to MySQL some are general issues with SQL databases in general.
SQL does not scale out very well. If you need to shard a dataset across servers
Tunning can be bit of an art form.
SQL is can be subject to injection attacks. (See the cartoon)
For most of the last 10-15 years the LAMP suite has been one of the major modes of web development. LAMP is composed of four parts,
Perl, PHP or Python
While Linux will stay as part of the standard developers stack for years to come the other three parts of the lamp suite seem to be getting a bit crufty.
Apache is a fine web server, but it is using a multi process model. Each connection ties up a process. As connections become longer lived with new technology like Commit the memory usage of an apache server tends to grow heavily. Event loop technologies like nginx and node.js may soon take over. For delivering static pages apache still has much to recommend it.
The future model of programming applications will be moving to the web more and more over the next few years. For those of us who have been doing we programming since rocks were soft and dirt was fresh new idea (i.e. 1993) this can only be a good thing. This blog will seek to explore programming methodologies that are on their way in and on their way out.