Replication using SymmetricDS

SymmetricDS is a a Java-based database synchronization software, supporting asynchronous multi-master database synchronization. If you want to have the GUI (and scripts) you may have to be prepared to spend some $$$ for the Pro version, but if you are happy with the command line, this one is fully functional.
Apart from being cross-platform, this tool has the extraordinary ability of being database-independent, working on a abstraction layer that covers a large number of databases; including: MySQL, PostGreSQL and SQLite (that’s right, SQLite); chances are: it will cover many more in the future.
I decided to try this promising software and I will leave here my impressions.
The first thing I have to say, is that SymmetricDS is a really complete tool, perhaps as complete or more than Microsoft Sync Framework (I did not check properly, because I am not really interested in using Microsoft products). Being so complete, it has to be said it is quite hard to configure, but once you get understand the basics, it is not so bad.
The underlying model is that you have a server and a client for replication. However, far from a simple client-server relationship, the server (root) is actually a group, that may include many nodes, and the client (store) can also be a group with many nodes; you can even have several types of stores, each one with different characteristics (for instance updating only certain tables).
AFAIK, the distinction between server and client is that the server is constantly listening (which requires a sort of a daemon), while the clients are configured to pull and push changes as required (push when they happen, and pull at certain intervals). This makes sense, if you accept that the server should have a more or less reliable internet connection, but it is not so with the clients.
Contrarily to other subscription systems, SymmetricDS actually does support changes on the server, and it does support changes on the schema, so we have some kind of powerful bi-directional synchronization.
Another area where it scores points is in conflict resolution (conflicts are unfortunately inevitable in lazy systems). It does present detection and solution methods for conflicts on a table basis.
Although I did not try the conflict management system, I am quite happy with the framework, after configuring it and running with MySQL databases, running in two different hosts (a slightly more complicated, but more realistic scenario than the one described on the Quick-Start). However, as it happens with MySQL, the scenario of offline-only synchronization still goes without solution.
Things I would like to try next, with SymmetricDS:

  • system with three nodes;
  • system of SQLite databases;
Advertisements

6 thoughts on “Replication using SymmetricDS

  1. In order to do the evaluation, I tried it with MySQL and PostgreSQL; it seems to work ok, but I did not have the chance yet to implement it with my project! I will keep you updated 🙂

  2. Pingback: Quick guide to Multi-master Replication in PostgreSQL | heartcode

  3. My best time to do master to master replication is 12 minutes. I have build webapp to make it easier with simple interface. It now only working in mysql database, postgresql will be supported this month. And oracle db is on a road map. I like symmetricds, but i think the pro is too expensive. You will be asked various questions when you contact the for pro version, like what is the purpose, how many nodes you will be used, etc.
    The file sync is the bonus feature that i like, but it not yet working in my multimaster webapp. I think i just need time to make it working 🙂

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s