This page explains the settings available when you enable or configure Device Sync.
Configuraciones disponibles
Clúster para sincronizar
El nombre del clúster de Atlas vinculado fuente de datos donde desea almacenar los datos sincronizados.
You cannot modify this field while Device Sync is enabled. You must terminate Sync before you can select a different cluster.
Nota
Requisitos de la fuente de datos para la sincronización del dispositivo
Para habilitar la sincronización de dispositivos, su aplicación de Servicios de aplicaciones debe tener al menos una fuente de datos vinculada que cumpla con los siguientes requisitos:
Un clúster de MongoDB Atlas no fragmentado en ejecución MongoDB 5.0 o posterior.
El clúster no puede ser una instancia sin servidor ni una instancia de base de datos federada. Consulte las limitaciones de las fuentes de datos.
Tipo de sincronización
Importante
El tipo de sincronización solo está disponible para aplicaciones de sincronización basadas en particiones
La capacidad de seleccionar el tipo de sincronización de su aplicación solo está disponible para organizaciones con al menos una aplicación de sincronización basada en particiones existente en su proyecto.
Partition-Based Sync has been deprecated and is disallowed for new Sync configurations. Instead, all new Sync configurations automatically default to the recommended Flexible Sync mode.
Cuando habilita la sincronización del dispositivo, puede seleccionar uno de los siguientes modos de sincronización:
La sincronización flexible permite definir una consulta en el cliente y sincronizar solo los objetos que coinciden con ella. Con las suscripciones del lado del cliente, las aplicaciones cliente pueden:
Mantener consultas
React to changes
Añadir, cambiar o borrar queries
Flexible Sync es el único modo disponible para nuevas configuraciones de sincronizar.
La sincronización basada en particiones es un modo de sincronización más antiguo que ha quedado obsoleto y no está permitido para nuevas configuraciones de sincronización.
Si tienes una aplicación existente que ya utiliza la antigua Partition-Based Sync, recomendamos encarecidamente migrar a Flexible Sync. La migración es un proceso automático que no requiere realizar ningún cambio en el código de tu aplicación cliente, excepto actualizar las versiones del SDK. Para obtener más información, consulta Migrar modos de Device Sync.
No se puede cambiar el tipo de sincronización mientras Device Sync esté habilitado. Debe terminar o pausar sincronizar antes de realizar los cambios.
Modo de desarrollo
Elmodo de desarrollo es una opción de configuración que permite a Device Sync inferir y actualizar esquemas basados en modelos de datos del cliente. Esto optimiza el desarrollo, pero no debe utilizarse en producción.
El modo de desarrollo acelera el desarrollo al permitirle diseñar esquemas directamente en el código de la aplicación cliente.
Al sincronizar un dominio, Atlas App Services asigna cada tipo de objeto sincronizado a su propia colección en la base de datos especificada por el nombre de la base de datos (solo en modo de desarrollo). Si actualiza el modelo de objetos en el cliente, App Services actualiza el esquema de la colección para que coincida. Esto le permite actualizar los objetos en el código cliente mientras desarrolla la aplicación.
Puede usar reglas de acceso a datos con el modo de desarrollo. Tenga en cuenta que los cambios de esquema ignoran las reglas de acceso a datos. Esto significa que cualquier cliente puede actualizar el esquema del backend modificando el modelo de cliente.
Para obtener más información sobre cómo los esquemas de objetos de Realm se asignan a los esquemas de App Services cuando se usa el modo de desarrollo, consulte Asignación de modelos de datos.
Para obtener más información sobre cómo modificar esquemas de objetos sincronizados, consulte: Actualizar su modelo de datos.
Importante
Deshabilitar el modo de desarrollo para aplicaciones de producción
El Modo de desarrollo es una utilidad de desarrollo que no es adecuada para su uso en producción. Asegúrate de desactivar el modo de desarrollo antes de poner tu aplicación disponible en un entorno de producción.
Cambios radicales
Servicios de aplicaciones Las aplicaciones en modo de desarrollo que se crearon después del 13 de septiembre de 2023 pueden realizar cambios importantes en los esquemas de objetos sincronizados desde el código del cliente.
Si su aplicación se creó antes del 13 de septiembre de 2023, puede comunicarse con el soporte para habilitar esta función.
Requisitos previos
App Services App creada después del 13 de septiembre de 2023
MongoDB 5.0 o posterior para la compatibilidad con Flexible Sync
Minimum SDK version:
SDK de Realm C++ v1.0.0
SDK de Flutter de Realm v1.6.0
Realm Java SDK v10.16.2
Realm Kotlin SDK v11.1.1
Realm .NET SDK v11.6.0
Realm Node.js SDK v12.2.0
Realm React Native SDK v12.2.0
SDK de Realm Swift v10.42.2
Nota
Aplicaciones creadas antes del 13 de septiembre de 2023
Para las aplicaciones creadas antes del 13 de septiembre de 2023, debe actualizar el esquema de objetos en la interfaz de usuario de App Services. Para obtener más información, consulte Actualizar el modelo de datos.
Para realizar un cambio importante desde el código del cliente:
Elimina tu dominio local y tus datos. Esto no afectará los datos sincronizados con el backend. Los cambios locales que no se hayan sincronizado se eliminarán y serán irrecuperables.
Change your local object model.
Abra un reino con su modelo de objeto actualizado.
Ejecute su aplicación cliente para sincronizar sus cambios con el backend.
Para eliminar un archivo Realm, utilice los métodos específicos del SDK de Realm:
Side Effects of Enabling Development Mode
Habilitar el modo de desarrollo tiene dos efectos secundarios:
Habilitación autenticación anónima.
Deshabilitar borradores de implementación.
If your app does not need anonymous authentication, you may want to disable it after enabling Development Mode.
No es posible volver a habilitar los borradores de implementación en la interfaz de usuario hasta que se deshabilite el modo de desarrollo. Sin embargo, aún se pueden crear borradores de implementación manualmente mediante la CLI o la API de administración.
Nombre de la base de datos (solo modo de desarrollo)
Al habilitar el modo de desarrollo, se especifica una base de datos para almacenar los objetos sincronizados. App Services crea nuevas colecciones en esta base de datos del modo de desarrollo para cada tipo de objeto sincronizado.
Ejemplo
Especifique una base de datos de modo de desarrollo de myappSu cliente iOS tiene un modelo Person. Sincroniza un dominio que contiene una instancia del objeto Person. El modo de desarrollo crea un esquema del servidor asociado al modelo. El objeto se sincroniza con la colección myapp.Person.
App Services continues creating new server-side schemas and collections for each new object type. If you later add a Dog object, that object will sync to a new myapp.Dog collection that App Services will create.
Queryable Fields
When you configure Flexible Sync, you specify field names that your client application can query in a Flexible Sync subscription. Fields that can be used in a subscription query are called queryable fields.
Ejemplo
En una aplicación de listas de tareas, puedes configurar assignee o owner como campos consultables. En el cliente, puedes consultar las tareas cuyo assignee o owner coincida con el usuario conectado.
Alcances de campo consultables
Los campos consultables se aplican al ámbito que usted designa al configurarlos. Los dos ámbitos disponibles son:
Campos consultables globales: abarcan todas las colecciones en el esquema de una aplicación.
Collection queryable fields: scoped to a single collection in the App.
Scoping a queryable field to a specific collection reduces the amount of backing Atlas storage required to store Sync metadata.
Puede usar reglas y permisos para configurar un control de acceso más granular por colección. Puede definir reglas y permisos a nivel de colección para campos globales y campos consultables de colección.
Configurar campos consultables
You can automatically specify queryable fields by enabling Development Mode. Fields that appear in client queries while using Development mode are automatically added as collection queryable fields for the collection being queried.
The field names you provide are arbitrary strings. If an object type has a field whose name matches a field name you provided (and meets other eligibility criteria), that field becomes available to Device Sync to query.
Configura campos indexados consultables
Solo puedes agregar o eliminar un campo de consulta indexado cuando la Sincronización de Dispositivos no está habilitada. Si la Sincronización de Dispositivos ya está ejecutándose en tu aplicación, debes finalizarla y configurar el campo de consulta indexado al volver a habilitarla.
Esto provoca que se reinicie el cliente para cualquier cliente que intente reconectarse después de volver a habilitar la sincronización.
Tipos de campos elegibles
Flexible Sync only supports top-level primitive fields with a scalar type as queryable fields. You can also include arrays of these primitives as queryable fields. Flexible Sync does not support embedded objects or arrays of objects as queryable fields.
Los campos consultables indexados admiten un subconjunto de tipos de datos. Su campo consultable indexado puede ser uno de los siguientes:,,,. int64stringObjectIdUUID
Tip
Lenguaje de consulta de dominio: limitaciones de sincronización flexible
Para obtener información sobre las consultas que puede realizar en estos campos, consulte: Limitaciones de RQL de sincronización flexible
Nombres de campos reservados
App Services reserves some keywords for the Realm Query Language and other purposes. You cannot use reserved keywords as field names.
App Services se reserva las siguientes palabras clave con cualquier mayúscula:
|
|
|
Ejemplo
No puede utilizar descending, Descending, DESCENDING o DeScEnDiNG como nombre de campo.
App Services also reserves the following keywords with the given exact capitalization:
|
|
|
Ejemplo
No puede utilizar true o TRUE, ya que ambas mayúsculas están específicamente reservadas, pero puede utilizar True o tRUE como nombre de campo.
Rendimiento y almacenamiento
Cada campo consultable añade almacenamiento de metadatos adicional a su clúster Atlas y puede reducir el rendimiento de escritura. Debe tener la menor cantidad de campos consultables que necesite su aplicación y limitarlos al número mínimo de colecciones requeridas.
Muchas aplicaciones encuentran un buen equilibrio entre el uso del almacenamiento y la flexibilidad de las consultas, con un máximo de 10 campos consultables aplicados a cada colección. Por ejemplo, si tiene 3 campos consultables globales y 7 campos consultables de colección, tendrá 10 campos consultables aplicados a la colección.
Si tiene un campo que solo desea consultar en una colección, pero está configurado como campo consultable global, esto consume innecesariamente espacio de almacenamiento de Atlas. Por ejemplo, si tiene un user campo en cada colección, pero solo lo usa para consultas de sincronización en una colección, definirlo como campo consultable de colección reduce los requisitos de almacenamiento. Al reducir el alcance, Sync no tiene que mantener metadatos de ese campo para las demás colecciones donde no se consulta el user campo.
Si necesita reducir el uso de almacenamiento o mejorar el rendimiento, puede eliminar los campos consultables innecesarios de su aplicación. Sin embargo, tenga en cuenta las consecuencias de agregar o eliminar campos consultables. Para obtener más información, consulte "Consecuencias de agregar o eliminar campos consultables".
For additional considerations, refer to optimizing performance and storage when using Flexible Sync.
Campos consultables indexados
Puedes mejorar el rendimiento de ciertos tipos de cargas de trabajo añadiendo un campo indexado consultable. Un campo indexado consultable es un campo consultable global que se puede consultar de manera más eficiente, proporcionando un mejor rendimiento de sincronización. Puedes designar un campo consultable global como un campo indexado consultable.
Indexing a queryable field improves performance for simple queries on a single field, such as {"store_id": 1} or {"user_id": "641374b03725038381d2e1fb"}.
El campo consultable indexado debe aparecer en los esquemas de todas las colecciones de sincronización y debe usar el mismo tipo de dato válido. Por ejemplo, si el campo consultable indexado es,store_id debe aparecer en todas las colecciones que sincronice y debe ser del mismo tipo válido en todas ellas. Para obtener más información sobre los tipos de campo elegibles, consulte Tipos de campo elegibles.
No se pueden cambiar los valores de los campos consultables indexados en el cliente
After you configure an indexed queryable field, client devices cannot update an existing object's indexed queryable field value. For example, if your indexed queryable field is store_id, the client cannot change this value directly. Changing it from the client is not supported because it may conflict with other updates made to the object in the same timeframe.
Si intenta cambiar el valor de un campo consultable indexado en el dispositivo, se activará un error de escritura compensatorio. Para obtener más información sobre este error y su comportamiento, consulte ErrorCompensatingWrite en la documentación de Errores de sincronización flexible.
You can still change this value directly in the Atlas database.
Advertencia
Cambiar el valor del campo consultable indexado de un objeto a través de Atlas puede sobrescribir las actualizaciones simultáneas del cliente al objeto.
Client-Side Queries on Indexed Queryable Fields
When your app uses an indexed queryable field, client-side queries in a Flexible Sync subscription must include the indexed queryable field using an == or IN comparison against a constant at least once. For example, user_id == 641374b03725038381d2e1fb or store_id IN {1,2,3}.
Opcionalmente, puedes incluir una comparación de AND siempre que el campo indexado consultable se compare directamente con una constante usando == o IN al menos una vez. Por ejemplo, store_id IN {1,2,3} AND region=="Northeast" o store_id == 1 AND (active_promotions < 5 OR num_employees < 10).
Invalid Flexible Sync queries on an indexed queryable field include queries where:
The indexed queryable field does not use
ANDwith the rest of the query. For examplestore_id IN {1,2,3} OR region=="Northeast"is invalid because it usesORinstead ofAND. Similarly,store_id == 1 AND active_promotions < 5 OR num_employees < 10is invalid because theANDonly applies to the term next to it, not the entire query.El campo consultable indexado no se utiliza en un operador de igualdad. Por ejemplo,
store_id > 2 AND region=="Northeast"no es válido porque solo utiliza el operador>con el campo consultable indexado y no tiene una comparación de igualdad.The query is missing the indexed queryable field entirely. For example,
region=="Northeast"ortruepredicateare invalid because they do not contain the indexed queryable field.
Consequences of Adding or Removing Queryable Fields
Puede actualizar su configuración de sincronización para agregar o eliminar nombres de campos consultables mientras la sincronización esté habilitada, pero tenga en cuenta lo siguiente:
Cuando agrega un campo consultable, los dispositivos solo pueden sincronizarse en ese campo una vez que el dispositivo haya alcanzado el punto en el Historial de sincronización del dispositivo donde se agregó el campo.
Cuando se elimina un campo consultable, cualquier dispositivo que aún utilice ese campo perderá su sesión de sincronización de dispositivo y deberá realizar un restablecimiento del cliente. Los clientes que no utilicen el campo eliminado no recibirán ningún error. Para evitar que se active un restablecimiento del cliente al remover el campo consultable, primero debes remover el uso de ese campo en el lado del cliente.
Si terminas Sync antes de agregar o remover campos consultables, estas consideraciones no se aplican. Sin embargo, finalizar sincronizar sí activa un restablecimiento del cliente para cualquier cliente que se haya sincronizado con tu aplicación.
Permisos
Atlas Device Sync aplica normas de acceso a los datos basadas en roles para todas las solicitudes a un clúster sincronizado. Las normas son expresiones JSON dinámicas que determinan la capacidad de un usuario para sincronizar, ver y modificar datos.
For details, see Role-based Permissions.
Data Ingest
Data Ingest es una estrategia de sincronización para aplicaciones con cargas de trabajo significativas de inserción solo del lado del cliente. Se puede habilitar para una o más colecciones. Soporta la escritura en cualquier tipo de colección, incluyendo una colección de series de tiempo de Atlas.
Por ejemplo, una aplicación de IoT que registra datos de sensores con frecuencia tiene una carga de trabajo de escritura significativa y ninguna carga de trabajo de lectura. El dispositivo también puede estar fuera de línea durante períodos prolongados. Data Ingest omite parte del procesamiento requerido para la sincronización bidireccional, mejorando significativamente la velocidad de escritura en una colección Atlas.
Otros casos de uso incluyen la escritura de datos inmutables, como facturas de una aplicación minorista, o el registro de eventos de aplicaciones, ninguno de los cuales requiere resolución de conflictos.
Puedes aplicar Data Ingest a colecciones individuales. Esto significa que tu aplicación puede usar Data Ingest para guardar algunos datos, pero la Flexible Sync bidireccional en otras colecciones.
Data Ingest collections are only for writing data. You cannot use Flexible Sync queries against these collections. Instead, use Connect to MongoDB Data Sources.
After you have enabled Data Ingest, you implement it in the client app via the client SDKs. Currently, the following Realm SDKs support Data Ingest:
SDK de C++: Transmisión de datos a Atlas - SDK de C++
SDK de Flutter: Transmitir datos a Atlas - SDK de Flutter
SDK de Kotlin: Transmitir datos a Atlas - SDK de Kotlin
.NET SDK: Unidirectional Data Ingest - .NET SDK
SDK de Node.js: Definir un objeto asimétrico
SDK de React Native: Define un objeto asimétrico
Swift SDK: Transmite datos a Atlas - Swift SDK
Atlas Device Sync gestiona completamente el ciclo de vida de estos datos. Se mantiene en el dispositivo hasta que la sincronización de Data Ingest se completa y luego se elimina del dispositivo.
Tiempo máximo sin conexión del cliente
Client Maximum Offline Time determines how long the client can be offline between sync sessions. Changing this value enables you to balance offline access with storage used in the synced Atlas cluster. For more information, refer to Client Maximum Offline Time.
Client Recovery
La Recuperación de Cliente permite que el cliente intente restablecerlo automáticamente mientras recupera datos del dispositivo. Para más información, consulte Recuperar Cambios No Sincronizados.
Referencia del archivo de configuración de sincronización
Puede encontrar el archivo de configuración de sincronización para su aplicación en el sync directorio de una aplicación exportada:
app/ └── sync/ └── config.json
Por ejemplo, la siguiente configuración de Sync se aplica a las aplicaciones que utilizan la Flexible Sync.
{ "type": "flexible", "development_mode_enabled": <Boolean>, "service_name": "<Data Source Name>", "database_name": "<Development Mode Database Name>", "state": <"enabled" | "disabled">, "client_max_offline_days": <Number>, "is_recovery_mode_disabled": <Boolean>, "queryable_fields_names": [ <Array of String Field Names> ], "indexed_queryable_fields_names": [ <Array of String Field Names> ], "collection_queryable_fields_names": <Map[String][]String> "permissions": "<Deprecated, Do Not Use>" }
The deprecated permissions field might still appear in your exported app's configuration. That might indicate your app has not automatically migrated to the unified rule system yet. Please avoid deleting this field until your app has been migrated.
Sync Config Object
{ "type": "flexible", "development_mode_enabled": <Boolean>, "service_name": "<Data Source Name>", "database_name": "<Development Mode Database Name>", "state": <"enabled" | "disabled">, "client_max_offline_days": <Number>, "is_recovery_mode_disabled": <Boolean>, "queryable_fields_names": ["<Field Name>", ...], "indexed_queryable_fields_names": ["<Field Name>", ...], "collection_queryable_fields_names": { "<Collection Name>": ["<Field Name>", ...], ... } }
Campo | Descripción |
|---|---|
typestring | El modo de sincronización. Hay dos modos de sincronización: Sincronización flexible y la sincronización basada en particiones (la más antigua). Recomendamos usar la sincronización flexible. Para obtener más información sobre la sincronización basada en particiones, consulte Sincronización basada en particiones. Opciones válidas para una configuración de sincronización flexible:
|
development_mode_enabledboolean | Si |
service_namestring | El nombre de la fuente de datos del clúster de Atlas para sincronizar. No puedes usar sincronizar con una instancia sin servidor. |
database_namestring | El nombre de una base de datos en el clúster sincronizado donde App Services almacena datos en modo de desarrollo. App Services genera automáticamente un esquema para cada tipo sincronizado y asigna cada tipo de objeto a una colección dentro de la base de datos. |
statestring | El estado actual del protocolo de sincronización para la aplicación. Opciones válidas:
|
client_max_offline_daysnumber | La cantidad de días que el proceso de compactación de backend espera antes de podar agresivamente los metadatos que algunos clientes necesitan sincronizar desde una versión anterior de un reino. |
is_recovery_mode_disabledboolean | Si |
queryable_fields_namesstring[] | Una lista de nombres de campos para utilizar como campos de consulta globales. |
indexed_queryable_fields_namesstring[] | Una lista de nombres de campos para usar como campo indexado consultable. Aunque esta propiedad es un array, Sync sólo admite actualmente un campo indexado consultable. Por lo tanto, este arreglo puede contener como máximo un elemento. El campo consultable indexado debe estar presente en el esquema y ser del mismo tipo de campo elegible en cada colección que sincronices. El nombre del campo consultable indexado debe también aparecer en |
collection_queryable_fields_names{ [collectionName: string]: string[] } | Un mapa de nombres de colecciones a una lista de campos consultables a nivel de colección para cada colección. |
last_disablednumber | La fecha y hora en que la sincronización fue pausada o desactivada por última vez, se representa por el número de segundos transcurridos desde la Unix epoch (1 de enero de 1970, 00:00:00 UTC). |
asymmetric_tablesstring[] | An array of the names of collections that are defined as asymmetric with Data Ingest, where clients can write data but not read. |