|Version 17 (modified by 14 years ago) ( diff ),|
Blueprint for Synchronisation
We need to be able to support synchronising data between instances:
All tables have UUID fields: DeveloperGuidelinesDatabaseSynchronization
We can Export the tables - CSV is best-supported within Web2Py currently
"complete database backup/restore with db.export_to_csv_file(..),db.import_from_csv_file(...),
reimporting optionally fixes references without need for uuid"
This can be done using appadmin, but we have started work on a user-friendly way of dumping all relevant tables:
This works well, but has some needed enhancements:
- Define how to deal with duplicates (currently, if a UUID is duplicated then the CSV file Updates the record, if a UUID isn't present then it is Created)
- Download all
- Download all for a Module
Need clear list of which tables to include:
- not lookup lists which are the same across sites
- e.g. OpenStreetMap/Google Layers (but WMS/SOS Layers Yes. Shapefiles Layers Yes if uploads copied across as well)
- not site-specific stuff such as system_config, gis_keys, etc
Create an index manually to make the search by uuid faster.
other related threads:
There is a simple 1-table example appliance which has the ability to do syncs via XML-RPC:
In Sahana2 the record ids are UUIDs built from each instance's 'base_uuid'
There is a sync_instance table:
CREATE TABLE sync_instance ( base_uuid VARCHAR(4) NOT NULL, -- Instance id owner VARCHAR(100), -- Instance owner's name contact TEXT, -- Contact details of the instance owner url VARCHAR(100) DEFAULT NULL, -- Server url if exists last_update TIMESTAMP NOT NULL, -- Last Time sync with the instance sync_count INT DEFAULT 0, -- Number of times synchronized PRIMARY KEY(base_uuid) );