Watchers

A datasync “watcher” is responsible for checking a given system to see if any records are in need of sync (e.g. have changed recently).

If the given system has a SQL DB, and applicable tables include a “last modified” column, then the most common/simple way is for the watcher to simply query the table, looking for records which were modified since the last check. There are a couple of downsides to this approach:

  • must query each table separately, to find all “changed” records

  • not possible to detect “deleted” records in this way

Rattail itself uses a different approach though. The Rattail DB includes a change table, which in normal circumstances is empty. If so configured, Rattail can insert records into this change table whenever (almost) any data record is changed or deleted etc. Then a datasync watcher will look for records in the change table instead of having to query each applicable table separately. The watcher also removes change records as they are processed.

A similar effect can be achieved if the watched system has a SQL DB to which you can install (tables and) triggers. In this case you can create a new table (e.g. datasync) and then add triggers for the various tables you need to watch. When any record is changed or deleted the trigger should add a record to your new datasync table. Then the actual watcher can check your datasync table, and remove any found after they are processed.

Those are just the patterns used thus far; more are likely possible.