Stopping bi-directional sync in ODK-X


We are currently using ODK-X (tables, survey and sync-endpoint) to develop a longitudinal study involving senstive data in regions with poor internet connectivity. We are concerned about the bi-directional sync for two reasons:

  • Having to synchronize all of the data from the server will take a very long time with poor internet connectivity.
  • There are privacy concerns - if someone were to steal any one of the phones they would have access to every record we have collected, which may be disastrous for the people we are surveying.

Currently, our survey consists of three tables, two of which do not contain sensitive data. Is there any way we could restrict the sync process such that the table containing sensitive data is only ever pushed from device to server and never pushed the other way, while still bi-directionally syncing the other two tables?

Interesting feature request. We have been hearing requests from people who want row syncing per user, but syncing per table has not been commonly requested yet. Please fill out an issue request with what you would like to see to start consideration by the TSC:

One approach that some deployments do is they have a program that archives the row as it comes into their “workflow” as it only needs to processed once by their server “workflow”. Once processed they delete the row on sync-endpoint thereby eliminating concerns.

Also, to perform better in poor internet connectivity the ODK-X protocol only replicates changes to keep the amount of data to be transferred to the device small.

Another approach people take is to just turn on device encryption so if it is lost all the data is protected. The problem being if someone forgets the password to the device the data on the device cannot be recovered. Although devices with full encryption often are not the cheapest ones.