Sync Data Between Devices - C++ SDK
Atlas Device Sync automatically synchronizes data between client applications and an App Services backend. When a client device is online, Sync asynchronously synchronizes data in a background thread between the device and your backend App.
When you use Sync in your client application, your implementation must match the Sync Mode you select in your backend App configuration. The Realm C++ SDK only supports Flexible Sync.
Flexible Sync
When you select Flexible Sync for your backend App configuration, your client implementation must include subscriptions to queries on queryable fields. Flexible Sync works by synchronizing data that matches query subscriptions you maintain in the client application.
A subscription set contains a set of queries. Flexible Sync returns documents matching those queries, where the user has the appropriate permissions to read and/or read and write the documents. If documents match the query, but the client does not have the permission to read or write them, they do not sync to the client application.
You can form queries using Realm Query Language.
Note
Flexible Sync does not support all the query operators available in Realm Query Language and the SDK's query engine. See Flexible Sync RQL Limitations for details.
Subscription sets are based on a specific type of Realm object. You might have multiple subscriptions if you have many types of Realm objects.
To use Device Sync in your client application, open a synced realm with a Flexible Sync configuration. Then, manage subscriptions to determine which documents to sync. For more information, refer to Manage Sync Subscriptions - C++ SDK.
Group Updates for Improved Performance
Every write transaction for a subscription set has a performance cost. If you need to make multiple updates to a Realm object during a session, consider keeping edited objects in memory until all changes are complete. This improves sync performance by only writing the complete and updated object to your realm instead of every change.
Unidirectional Sync
Device Sync supports the ability to send data to Atlas, but not receive any updates.
In this scenario, you can maximize sync performance by using Data Ingest to stream data from the client application to a Flexible Sync-enabled Atlas App Services App.