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;