Hi!
I'm working on a SQL proxy for distributing load as a project at
university. The idea is to have a system, which can transparently be
inserted between an existing database and its clients, to allow the
system performance (selects) to scale by adding more databases as the
load increases. This way we don't need to recode the clients.
Below is a diagram of the system.
Client 1 Database 1
_____ _____
| | | |
| |<----- Proxy (distributor) ----->| |
|___| | SQL _____ SQL | |___|
------------->| |<-----------
. | | .
. ------------->|___|<----------- .
| SQL SQL |
Client n | | Database m
_____ | | _____
| | | | | |
| |<----- ----->| |
|___| |___|
All databases contain a replicate of the same data. From the clients'
point of view the proxy looks like a normal postgres database.
The job of the proxy is to look at the querys: If the query is a
select it can be transmitted to only on of the databases, but if it is
an update/insert it has to go to all of them. Furthermore it should
monitor the set of databases, and exclude databases that stop working,
and update them when thay again become available.
I have been browsing a bit around the develop corner at postgresql.org
and looking at the c client library, but I haven't been able to find
any information about the protocol used between the postgres database and
the clients, Is such information available anywhere, or could anyone
point me to areas of interest in the postgres server code?
Thanks in advance!
--
Bye, Peter Korsgaard