1 Aug 2003
(updated 1 Aug 2003 at 17:33 UTC) »
I'm currently working on a fairly large website for a client that's basically a searchable web based cataog and user registration system. The catalog side is reasonably simple since it's just populating some templates from the database but the registration is much more difficult and consists of 100s of fields with fairly complex validation rules. My first version of the site, done under the crunch as usual, was using Python Service Objects (CGI) mainly because it has fairly nice form handling. Unfortunately this didn't work because the load on the site was higher than expected and it bogged down the server. So here comes version 2:
This time around I have several goals:
- Make the application faster (applet / servlets / etc)
- Make the application code easier to work with for me and my successor
- Make the application easier to deploy
This job seems ideally suited to CherryPy, a python based web application development platform. It basically takes python code and bundles it into a standalone server which can run behind Apache and service the requests. The result is that it is really fast. Also it should be easier to deploy since it's really just requiring Python on the target system. There is no reason why the app wouldn't just run happily on Windows servers too.
For the database side of things, the dataset isn't particularly large. I was thinking of moving away from MySQL and using Metakit. Metakit is a nice little embedded relational database I've used in the past and again it makes the application less dependent on the server. I'm wondering how well Metakit handles multiuser load and concurrency. From what I can tell it seems to do it well but it remains to be seen.
Here are some links on the topic:
All in all I think this will make for a faster more self contained application which the client can just plug into their website. The tools are different from the norm but I'm confident that any reasonable coder should be able to pick up python and CherryPy with very little effort.