[Catalyst] PostgreSQL Conference: West

Gene Selkov selkovjr at observercentral.net
Wed Aug 20 19:04:52 BST 2008


On Tue, 19 Aug 2008, Joshua Drake wrote:

>> However, one of the problems you may find from the Catalyst side of
>> things is that we tend to forget the particulars of various databases
>> because DBIx::Class, SQL::Abstract and SQL::Translator take a lot of
>> the pain from being cross-database compatible out of the mix.
>
> Right, that is the constant issue with all the toolkits. My mind is
> something that provides an introduction to Catalyst (which is good for
> Catalyst) but also, "Why use Catalyst with PostgreSQL?". What kind of
> cool features can Catalyst (and is associated libs) expose that
> developers might be missing.

The coolest feature in postgres is its extensibility. Tsearch2, which 
someone mentioned in an earlier post is based on a user-defined data type. 
I have done some work on the postgres GIST a decade ago, which enabled 
applications like Tseach2, among other things. There is no full-text 
search capability in the postgres engine, but it doesn't have to be 
implemented in the engine. Two Russian astronomers came along and 
figured out how to index arbitrary vectors with a GIST-based data type, 
then they used those vectors to index documents for full-text search 
That's not a very straightforward method, but it works better than the 
built-in search methods in other databases. This goes to say that there is 
almost nothing one cannot do with postgres; however, it is mostly used to 
mimic what everyone else does with databases, with the only 
conspicuous advantages being its zero price, high performance and 
convenience.

So if you really want to highlight postgres's advantages, focus on 
its extended behaviors.

But linking that to Catalyst will appear contrived, unless we can think of 
a nice and complete application that uses these things as independent 
components. Think of something that would be difficult to do without one 
or the other.

I am currently working on porting one of my database applications to 
Catalyst. It has nothing postgres-specific in it, besides the fact that if 
I were to use anything else (mysql, etc.) I would spend more time being 
annoyed than making progress. However, it has a fairly sophisticated data 
backend running in postgres; it has a fairly sophisticated user interface 
done with yui, and there's Catalyst in between.

Here's one component that may be worth showcasing (after some adaptation). 
Take a look:

   http://cci.uchicago.edu:8000/plot/tree/roach

   (if it bitches about "communication errors", wait a bit and reload the
    page. The server is so weak I am really afraid to publish this link)

The idea is that there's a large tree structure in the database (about 
7000 nodes), and there is a mass of data linked to the nodes directly or 
indirectly. Think of the tree as a fancy container for things. The user 
has two basic needs: (1) navigate the tree and (2) look into things 
hanging on it. Looking into things, in most cases, is easier said than 
done, as it may require expensive processing. Another interesting notion 
that may be of general interest is branch aggregates, the simplest 
examples of which are the count of things hung on a branch and the mean 
value of the common attribute, but it can be much more complicated than 
that.

I will not go into detail explaining the meaning of this application (it's 
for surgical education -- highly specific), but it should suffice to say 
that there's a tree, there's data linked to the tree, and there can be 
multiple views of the tree itself and the data it contains. The data is in 
postgres, served with Catalyst, rendered in the browser with YUI, and 
because the backend portion of the rendering process is expensive, the 
view loads itself dynamically on user's request.

This is not a good example of easy and painless development, but I have 
solved so many typical problems while building it that it could be used to 
represent a sophisticated web technology, if properly generalized.

Here's a list of fairly difficult things that it can illustrate:

   1. Storing a tree (nested-segment representation is used)

   2. Tree traversal (I have developed (and borrowed) a couple dozen 
utility queries for doing things with the trees).

   3. Some very involved DBIx::Class queries

   4. A combination of DBIx::Class subqueries with pass-through queries 
used where the task is beyond DBIC's ability.

   5. Tree rendering with YUI

   6. Thomas Pietrzykowski's AJAX controller is used to call the 
applications controller actions from the browser

      http://thomas.pietrzykowski.de/blog/?p=1

   7. External processes are called by the backend to process the data (R, 
gnuplot, etc.)

This would be the kind of example I would like to use, but instead I had 
to spend months figuring things out by trial and error.

If there is any interest in this kind of thing, I can spend some more time 
to generalize it and make it publishable.

Alternatively, I could collaborate with someone to demonstrate the use of 
extended data types in postgres. I myself will not be able to attend any 
conferences outside UK for a year or so.

Regards,

--Gene



More information about the Catalyst mailing list