Un reino es la estructura de datos principal que se utiliza para organizar los datos en Realm. Un reino es una colección de los objetos que utiliza en su aplicación, llamados objetos de Realm, así como metadatos adicionales que los describen.
Al abrir un reino, debes especificar un db_config. El db_config Puede contener información como:
Una ruta opcional donde se almacena el reino en el dispositivo
Una lista opcional de modelos que el reino debe administrar
Un programador opcional si necesita personalizar el bucle de ejecución
A
sync_configsi desea utilizar el reino con sincronización de dispositivos
Puede utilizar el constructor predeterminado db_config si no necesita especificar una ruta de archivo de reino, una configuración de sincronización de dispositivo u otros detalles de configuración.
Archivos del reino
Realm almacena una versión binaria codificada de cada objeto y tipo en un único .realm archivo. Este archivo se encuentra en una ruta específica que se define al abrir el dominio. Se puede abrir, ver y editar el contenido de estos archivos.
Archivos auxiliares
El SDK crea archivos adicionales para cada reino:
archivos de reino, con el sufijo "reino", por
default.realmejemplo: contienen datos de objetos.Archivos de bloqueo, con el sufijo "lock", p. ej.:
default.realm.lockregistran las versiones de datos de un dominio que se utilizan activamente. Esto evita que el dominio recupere espacio de almacenamiento que aún utiliza una aplicación cliente.archivos de notas, con el sufijo "nota", p. ej.:
default.realm.notehabilitan notificaciones entre subprocesos y entre procesos.archivos de gestión, con el sufijo "gestión", por
default.realm.managementejemplo: gestión del estado interno.
Realms sincronizados
Puedes configurar un dominio para que sincronice automáticamente los datos entre varios dispositivos, cada uno con su propia copia local. Los dominios sincronizados necesitan un sync_config y un backend de Atlas App Services para gestionar el proceso de sincronización.
Las aplicaciones siempre pueden crear, modificar y eliminar objetos de dominio sincronizados localmente, incluso sin conexión. Siempre que haya una conexión de red disponible, el SDK de dominio abre una conexión con un servidor de aplicaciones y sincroniza los cambios con y desde otros clientes. El protocolo Atlas Device Sync y las transformaciones operativas del servidor garantizan que todas las instancias de un dominio completamente sincronizadas vean exactamente los mismos datos, incluso si algunos cambios se produjeron sin conexión o se recibieron fuera de orden.
Reinos sincronizados vs. Reinos no sincronizados
Los reinos sincronizados se diferencian de los reinos locales no sincronizados en algunos aspectos:
Los reinos sincronizados intentan sincronizar los cambios con su aplicación de servicios de aplicaciones de backend, mientras que los reinos no sincronizados no lo hacen.
A los reinos sincronizados solo pueden acceder los usuarios autenticados, mientras que los reinos no sincronizados no tienen concepto de usuarios ni autenticación.
Con los realms sincronizados, puedes descargar actualizaciones antes de abrir un realm. Sin embargo, exigir que las actualizaciones se descarguen antes de abrir el realm requiere que el usuario esté en línea. Los reinos no sincronizados pueden usarse siempre fuera de línea.
Puedes copiar manualmente datos de un reino no sincronizado a un reino sincronizado, y viceversa, pero no puedes sincronizar un reino no sincronizado.
Abrir un reino no sincronizado
Puedes abrir un dominio en el directorio actual usando el constructor predeterminado. O bien, puedes construir un db_config con una ruta de archivo específica para abrir el dominio en una ubicación específica.
Abrir el reino predeterminado
Al abrir un reino sin especificar una ruta opcional, se abre el reino predeterminado en el directorio actual.
Al abrir un dominio, el SDK de C++ puede inferir automáticamente qué modelos están disponibles en el proyecto. No es necesario especificar manualmente los modelos disponibles a menos que se abra un dominio para sincronizar datos unidireccionalmente con objetos asimétricos. Para obtener más información, consulte "Abrir un dominio sincronizado" en esta página.
auto config = realm::db_config(); auto realm = realm::db(std::move(config));
Tip
Construyendo una aplicación de Android
Al crear una aplicación Android con el SDK de Realm para C++, debe pasar filesDir.path el path parámetro al parámetro en el constructor db_config. Para obtener más información, consulte: Crear una aplicación Android.
Abrir un reino en una ruta de archivo
Puede utilizar set_path() para especificar una ruta que db_config utilizará al abrir el reino.
auto relative_realm_path_directory = "custom_path_directory/"; std::filesystem::create_directories(relative_realm_path_directory); // Construct a path std::filesystem::path path = std::filesystem::current_path().append(relative_realm_path_directory); // Add a name for the database file path = path.append("employee_objects"); // Add the .realm extension path = path.replace_extension("realm"); // Set the path on the config, and open the database at the path auto config = realm::db_config(); config.set_path(path); auto realmInstance = realm::db(std::move(config));
Tip
Construyendo una aplicación de Android
Al crear una aplicación Android con el SDK de Realm para C++, debe filesDir.path pasar path el parámetro como en el constructor db_config. Para obtener más información, consulte: Crear una aplicación Android.
Abrir un reino sincronizado
Debe tener una aplicación Atlas App Services que haya configurado para sincronización flexible para poder sincronizar datos entre dispositivos.
Para abrir un reino sincronizado:
Conectarse a una aplicación de Atlas App Services.
Autenticar al usuario.
Crear una configuración de sincronización.
Abra el reino sincronizado del usuario con la configuración.
// Initialize the App, authenticate a user, and open the database auto appConfig = realm::App::configuration(); appConfig.app_id = APP_ID; auto app = realm::App(appConfig); auto user = app.login(realm::App::credentials::anonymous()).get(); auto syncConfig = user.flexible_sync_configuration(); auto syncedRealm = realm::db(syncConfig);
Al abrir un dominio sincronizado, no es necesario pasar los modelos que desea que administre el dominio a la lista de parámetros de plantilla de la función de apertura. Esto supone un cambio respecto a la obsoleta API Alpha.
La única excepción a esta regla es abrir un dominio sincronizado para sincronizar asymmetric_object tipos. Al abrir un dominio sincronizado para sincronizar asymmetric_object tipos, debe especificar explícitamente los objetos en la lista de parámetros de plantilla para la función de apertura. Para obtener más información, consulte Transmitir datos a Atlas - SDK de C++.
Tip
Construyendo una aplicación de Android
Al crear una aplicación Android con el SDK de Realm para C++, debe pasar filesDir.path el path parámetro al parámetro en el constructor db_config. Para obtener más información, consulte: Crear una aplicación Android.
Establecer encabezados HTTP personalizados al usar un dominio sincronizado
Para utilizar encabezados HTTP personalizados con Device Sync, debe configurar los encabezados en la aplicación y flexible_sync_configuration()en.
Después de inicializar la configuración, utilice la función miembro set_custom_http_headers() para establecer los encabezados HTTP personalizados en un mapa de claves y valores de encabezado de cadena.
std::map<std::string, std::string> customHeaders; customHeaders.emplace("CUSTOM_HEADER_NAME", "CUSTOM_HEADER_VALUE"); auto syncConfig = user.flexible_sync_configuration(); syncConfig.set_custom_http_headers(customHeaders);
Ahora el reino sincronizado puede usar los encabezados para todas las solicitudes de red de sincronización de dispositivos.
Proporcionar un subconjunto de modelos a un reino
Tip
Operar con bajas restricciones de memoria
Algunas aplicaciones tienen restricciones estrictas de su huella de memoria. Para optimizar el uso de memoria de tu realm en entornos con poca memoria, abre el realm con un subconjunto de modelos.
De forma predeterminada, el SDK de C++ agrega automáticamente todos los tipos de objetos que tienen un esquema de objeto en su ejecutable a su esquemade base de datos.
Sin embargo, si desea que el reino administre solo un subconjunto de modelos, puede especificar esos modelos pasándolos a la lista de parámetros de plantilla de la función realm::open().
auto config = realm::db_config(); auto realm = realm::open<realm::Dog>(std::move(config));
Cerrar un reino
Para evitar fugas de memoria, cierre la base de datos al terminar de usarla. Cerrar la base de datos invalida los objetos restantes. Cierre la base de datos con db::close().
// Create a database configuration. auto config = realm::db_config(); auto realm = realm::db(config); // Use the database... // ... later, close it. realm.close(); // You can confirm that the database is closed if needed. CHECK(realm.is_closed()); // Objects from the database become invalidated when you close the database. CHECK(specificDog.is_invalidated());