Wednesday, April 30, 2003

Clustered JDBC

Here's an open source project that CFMX and J2EE developers will find interesting: c-jdbc which stands for Clustered JDBC. It's basically a JDBC driver that lets you cluster several databases (any db with a JDBC driver pretty much), you can even have a cluster of different types of databases that operate on the same schema (eg Oracle and PostgreSQL).

The concept is called RAIDb (Redundant array of inexpensive databases), and they define several types of RAIDb levels:

  • SingleDB: load balancer for a single database backend instance.
  • RAIDb-0: full database partitioning (no table can be replicated) with an optional policy specifying where new tables are created.
  • RAIDb-1: full database mirroring (all tables are replicated everywhere) with an optional policy specifying how distributed queries (writes/commit/rollback) completion is handled (when the first, a majority or all backends complete).
  • RAIDb-1ec: full database mirroring (like RAIDb-1) with error checking for byzantine failures detection.
  • RAIDb-2: partial replication (each table must be at least replicated once) with optional policies for new table creation (like RAIDb-0) and distributed queries completion (like RAIDb-1).
  • RAIDb-2ec: partial replication (like RAIDb-2) with error checking for byzantine failures detection.

This technology is great for the open source databases because it allows you to cluster them easily. MySQL does support replication, and there are some solutions for PostgreSQL as well but I think something like this is more flexbile at the moment. The one drawback is that all applications that access the db must use JDBC.