Esta página explica las configuraciones disponibles cuando habilita o configura la sincronización del dispositivo.
Configuraciones disponibles
Clúster para sincronizar
El nombre de la fuente de datos del clúster Atlas vinculado donde desea almacenar sus datos sincronizados.
No se puede modificar este campo mientras la sincronización de dispositivos esté habilitada. Debe finalizar la sincronización para poder seleccionar un clúster diferente.
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.
La sincronización basada en particiones ha quedado obsoleta y no se permite en las nuevas configuraciones de sincronización. En su lugar, todas las nuevas configuraciones de sincronización se configuran automáticamente en el modo de sincronización flexible recomendado.
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
Reaccionar a los cambios
Agregar, cambiar o eliminar consultas
La sincronización flexible es el único modo disponible para las nuevas configuraciones de sincronización.
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 ya tiene una aplicación que usa la sincronización basada en particiones, le recomendamos migrar a la sincronización flexible. La migración es un proceso automático que no requiere cambios en el código de la aplicación cliente, salvo actualizar las versiones del SDK. Para obtener más información, consulte Migrar modos de sincronización de dispositivos.
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 producción. Asegúrate de desactivarlo antes de que tu aplicación sea accesible en un entorno de producción.
Cambios radicales
Servicios de aplicaciones Las aplicaciones en modo de desarrollo que se crearon después del de septiembre 13 de2023 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 compatibilidad con sincronización flexible
Versión mínima del SDK:
SDK de Realm C++ versión 68001.0.0
SDK de Flutter de Realm versión 68001.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
SDK de React Native de Realm versión 680012.2.0
SDK de Realm Swift versión 680010.42.2
Nota
Aplicaciones creadas antes del 13 de septiembre de 2023
Para las aplicaciones creadas antes del de septiembre 13 del, 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.
Cambie su modelo de objeto local.
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:
Efectos secundarios de habilitar el modo de desarrollo
Habilitar el modo de desarrollo tiene dos efectos secundarios:
Habilitación autenticación anónima.
Desactivación borradores de implementación.
Si su aplicación no necesita autenticación anónima, es posible que desee deshabilitarla después de habilitar el modo de desarrollo.
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 continúa creando nuevos esquemas y colecciones del lado del servidor para cada nuevo tipo de objeto. Si posteriormente agrega un objeto Dog, este se sincronizará con una nueva colección myapp.Dog que App Services creará.
Campos consultables
Al configurar Flexible Sync, se especifican los nombres de campo que la aplicación cliente puede consultar en una suscripción de Flexible Sync. Los campos que se pueden usar en una consulta de suscripción se denominan campos consultables.
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.
Ámbitos de campos 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.
Camposconsultables de colección: limitados a una única colección en la aplicación.
Limitar un campo consultable a una colección específica reduce la cantidad de almacenamiento de respaldo de Atlas necesario para almacenar metadatos de Sync.
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
Puede especificar automáticamente campos consultables activando el modo de desarrollo. Los campos que aparecen en las consultas de cliente al usar el modo de desarrollo se agregan automáticamente como campos consultables de la colección consultada.
Los nombres de campo que proporcione son cadenas arbitrarias. Si un tipo de objeto tiene un campo cuyo nombre coincide con el que usted proporcionó (y cumple otros criterios de elegibilidad), Device Sync podrá consultar dicho campo.
Configurar campos consultables indexados
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 solo admite campos primitivos de nivel superior de tipo escalar como campos consultables. También puede incluir matrices de estos primitivos como campos consultables. Flexible Sync no admite objetos incrustados ni matrices de objetos como campos consultables.
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 reserva algunas palabras clave para el lenguaje de consulta de Realm y otros fines. No se pueden usar palabras clave reservadas como nombres de campo.
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 también reserva las siguientes palabras clave con la capitalización exacta indicada:
|
|
|
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 que se aplican a cada colección. Por ejemplo, si tiene 3 campos consultables globales y 7 campos consultables de colección, tendrá 10 campos consultables que se aplican 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".
Para obtener consideraciones adicionales, consulte cómo optimizar el rendimiento y el almacenamiento al utilizar 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.
La indexación de un campo consultable mejora el rendimiento de las consultas simples en un solo campo, como {"store_id": 1} o {"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
Tras configurar un campo consultable indexado, los dispositivos cliente no pueden actualizar el valor de un campo consultable indexado de un objeto existente. Por ejemplo, si el campo consultable indexado store_id es, el cliente no puede cambiar este valor directamente. No se permite cambiarlo desde el cliente, ya que podría entrar en conflicto con otras actualizaciones realizadas al objeto en el mismo periodo.
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.
Todavía puedes cambiar este valor directamente en la base de datos Atlas.
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.
Consultas del lado del cliente en campos consultables indexados
Cuando tu aplicación usa un campo consultable indexado, las consultas del cliente en una suscripción de Sincronización Flexible deben incluir dicho campo mediante == IN una comparación o con una constante al menos una vez. Por ejemplo, user_id == 641374b03725038381d2e1fb store_id IN {1,2,3}o.
Opcionalmente, puede incluir una comparación AND siempre que el campo consultable indexado 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).
Las consultas de sincronización flexibleno válidas en un campo consultable indexado incluyen consultas donde:
El campo consultable indexado no usa
ANDcon el resto de la consulta. Por ejemplo,store_id IN {1,2,3} OR region=="Northeast"no es válido porque usaORen lugar deAND. De igual manera,store_id == 1 AND active_promotions < 5 OR num_employees < 10no es válido porqueANDsolo se aplica al término contiguo, no a toda la consulta.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.A la consulta le falta por completo el campo consultable indexado. Por ejemplo,
region=="Northeast"otruepredicateno son válidos porque no contienen dicho campo.
Consecuencias de agregar o eliminar campos consultables
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 reglas de acceso a datos basadas en roles para todas las solicitudes a un clúster sincronizado. Las reglas son expresiones JSON dinámicas que determinan la capacidad del usuario para sincronizar, ver y modificar datos.
Para obtener más detalles, consulte Permisos basados en roles.
Ingesta de datos
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 frecuentemente datos de sensores tiene una carga de escritura significativa y ninguna carga de lectura. El dispositivo también puede estar desconectado durante largos periodos. La ingesta de datos omite parte del procesamiento necesario para la sincronización bidireccional, lo que mejora 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.
Las colecciones de ingesta de datos solo se utilizan para escribir datos. No se pueden usar consultas de sincronización flexible en estas colecciones. En su lugar, utilice la opción "Conectarse a orígenes de datos de MongoDB".
Después de habilitar la ingesta de datos, impleméntela en la aplicación cliente mediante los SDK de cliente. Actualmente, los siguientes SDK de Realm admiten la ingesta de datos:
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
SDK de Node.js: Definir un objeto asimétrico
SDK de React Native: Define un objeto asimétrico
Swift SDK: Transmitir 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
El Tiempo Máximo sin Conexión del Cliente determina cuánto tiempo puede estar sin conexión el cliente entre sesiones de sincronización. Cambiar este valor permite equilibrar el acceso sin conexión con el almacenamiento utilizado en el clúster Atlas sincronizado. Para obtener más información, consulte Tiempo Máximo sin Conexión del Cliente.
Recuperación de clientes
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>" }
Es posible que el campo obsoleto aún aparezca en la configuración de permissions la aplicación exportada. Esto podría indicar que la aplicación aún no se ha migrado automáticamente al sistema de reglas unificado. No elimine este campo hasta que la aplicación se haya migrado.
Objeto de configuración de sincronización
{ "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 | |
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 campo para usar como campo consultable indexado. Aunque esta propiedad es una matriz, Sync actualmente solo admite un campo consultable indexado. Por lo tanto, esta matriz 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 se pausó o deshabilitó la sincronización por última vez, representada por la cantidad de segundos desde la época de Unix (enero 1, 1970, 00:00:00 UTC). |
asymmetric_tablesstring[] | Una matriz de nombres de colecciones que se definen como asimétricas con la ingesta de datos, donde los clientes pueden escribir datos pero no leerlos. |