34 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
 | 
						|
==========
 | 
						|
 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.
 |