Docs Menu
Docs Home
/ /
Archivos del reino

Configurar y abrir un dominio - SDK de C++

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_config si 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.

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.

El SDK crea archivos adicionales para cada reino:

  • archivos de reino, con el sufijo "reino", pordefault.realm ejemplo: contienen datos de objetos.

  • Archivos de bloqueo, con el sufijo "lock", p. ej.: default.realm.lock registran 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.note habilitan notificaciones entre subprocesos y entre procesos.

  • archivos de gestión, con el sufijo "gestión", pordefault.realm.management ejemplo: gestión del estado interno.

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.

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.

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.

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.

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.

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:

  1. Conectarse a una aplicación de Atlas App Services.

  2. Autenticar al usuario.

  3. Crear una configuración de sincronización.

  4. 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.

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.

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));

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());

Volver

Archivos del reino

En esta página