Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

Configurar e abrir um Realm - C++ SDK

Nesta página

  • Arquivos Realm
  • Arquivos auxiliares
  • Domínios sincronizados
  • Realms sincronizados versus Realms não sincronizados
  • Abra um Realm não sincronizado
  • Abra o Realm padrão
  • Abrir um Realm em um caminho de arquivo
  • Abrir um realm sincronizado
  • Definir HTTP headers personalizados ao usar um Realm sincronizado
  • Fornecer um subconjunto de modelos para um Realm
  • Fechar um Realm

Um domínio é a estrutura de dados principal usada para organizar dados no Realm. Um Realm é uma collection dos objeto que você usa em sua aplicação, chamados Objeto de Realm, bem como metadados adicionais que descrevem os objeto.

Ao abrir um realm, você deve especificar um db_config. O db_config pode conter informações como:

  • Um caminho opcional onde o Realm é armazenado no dispositivo

  • Uma lista opcional de modelos que o Realm deve managed

  • Um agendador opcional se você precisar personalizar o loop de execução

  • Um sync_config se você quiser usar o Realm com o Realm Mobile Sync

Você pode usar o construtor db_config padrão se não precisar especificar um Arquivo de Realm, uma configuração do Realm Mobile Sync ou outros detalhes de configuração.

O Realm armazena uma versão codificada binária de cada objeto e digita um domínio em um único arquivo .realm . O arquivo está localizado em um caminho específico que você pode definir quando abrir o domínio. Você pode abrir, visualizar e editar o conteúdo desses arquivos com .

O SDK cria arquivos adicionais para cada Realm:

  • arquivos realm, com sufixo com "realm", por exemplo default.realm: contém dados de objeto.

  • lock, com sufixo "lock", por exemplo default.realm.lock: acompanhe quais versões dos dados em um domínio estão ativamente em uso. Isso impede que o domínio recupere espaço de armazenamento que ainda é usado por um aplicativo cliente.

  • arquivos de nota, com sufixo com "nota", por exemplo default.realm.note: ative as notificações entre threads e entre processos.

  • arquivos de gerenciamento, com sufixo de "gerenciamento", por exemplo default.realm.management: gerenciamento de estado interno.

Você pode configurar um Realm para sincronizar automaticamente os dados entre vários dispositivos, cada um com sua própria cópia local dos dados. Os domínios sincronizados precisam de um sync_config e exigem um backend do Atlas App Services para lidar com o processo de sincronização.

Os aplicativos podem sempre criar, modificar e excluir objetos de domínio sincronizados localmente, mesmo quando estiver offline. Sempre que uma conexão de rede está disponível, o domínio SDK abre uma conexão com um servidor de aplicativos e sincroniza as alterações de e para outros clientes. O protocolo Atlas Device Sync e as transformações operacionais do lado do servidor garantem que todas as instâncias totalmente sincronizadas de um território vejam exatamente os mesmos dados, mesmo que algumas alterações tenham ocorrido offline e/ou tenham sido recebidas fora de ordem.

Os domínios sincronizados diferem dos domínios locais não sincronizados de algumas maneiras:

  • Os realms sincronizados tentam sincronizar as alterações com os aplicativos de backend do App Services, enquanto os realms não sincronizados, não.

  • Os realms sincronizados só podem ser acessados por usuários autenticados, enquanto os realms não sincronizados não têm nenhum conceito de usuários ou autenticação.

  • Com os Realms sincronizados, você pode baixar atualizações antes de abrir um Realm. No entanto, exigir alterações no download antes de abrir o Realm exige que o usuário esteja online. Os domínios não sincronizados sempre podem ser usados offline.

Você pode copiar manualmente dados de um Realm não sincronizado para um Realm sincronizado e vice-versa, mas não é possível sincronizar um Realm não sincronizado.

Você pode abrir um Realm no diretório atual usando o construtor padrão. Ou você pode construir um db_config com um caminho de arquivo específico para abrir o Realm em um local específico.

Abrir um domínio sem especificar um caminho opcional abre o domínio padrão no diretório atual.

Ao abrir um Realm, o C++ SDK pode inferir automaticamente quais modelos estão disponíveis no projeto. Não é necessário especificar manualmente os modelos disponíveis, a menos que esteja abrindo um realm para sincronizar dados unidirecionalmente com objetos assimétricos. Para obter mais informações, consulte Abrir um realm sincronizado nesta página.

auto config = realm::db_config();
auto realm = realm::db(std::move(config));

Dica

Construindo um aplicativo Android

Ao construir um aplicativo Android que utiliza o Realm C++ SDK, você deve passar o parâmetro filesDir.path para o parâmetro path no construtor db_config . Para obter mais informações, consulte: Criar um aplicativo Android.

Você pode utilizar o set_path() para especificar um caminho para o db_config utilizar ao abrir o Realm.

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

Dica

Construindo um aplicativo Android

Ao construir um aplicativo Android que utiliza o Realm C++ SDK, você deve passar o filesDir.path como o parâmetro path no construtor db_config . Para obter mais informações, consulte: Criar um aplicativo Android.

Você deve ter um aplicativo Atlas App Services que você tenha configurado para Flexible Sync para sincronizar dados entre dispositivos.

Para abrir um Realm sincronizado:

  1. Conecte-se a um Atlas App Services App.

  2. Autentique o usuário.

  3. Crie uma configuração de sincronização.

  4. Abra o domínio sincronizado do usuário com a configuração.

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

Quando você abre um Realm sincronizado, não precisa passar os modelos que deseja que o Realm managed para a lista de parâmetros do modelo da função aberta. Esta é uma mudança da API alfa obsoleta.

A única exceção a esta regra é abrir um Realm sincronizado para sincronizar tipos de asymmetric_object . Ao abrir um realm sincronizado para sincronizar tipos de asymmetric_object, você deve especificar explicitamente os objetos na lista de parâmetros do modelo para a função aberta. Para obter mais informações, consulte Transmitir dados para o Atlas - C++ SDK.

Dica

Construindo um aplicativo Android

Ao construir um aplicativo Android que utiliza o Realm C++ SDK, você deve passar o parâmetro filesDir.path para o parâmetro path no construtor db_config . Para obter mais informações, consulte: Criar um aplicativo Android.

Para usar HTTP headers personalizados com o Realm Mobile Sync, você deve definir os HTTP headers na aplicação e no flexible_sync_configuration().

Após inicializar a configuração, use a função de membro set_custom_http_headers() para definir os HTTP headers personalizados para um mapa de chaves e valores de cabeçalho de cadeia de caracteres.

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

Agora o Realm sincronizado pode usar os cabeçalhos para todas as solicitações de rede do Realm Mobile Sync.

Dica

Operando com restrições de memória baixas

Alguns aplicativos têm restrições rígidas quanto ao espaço de memória. Para otimizar o uso da memória do Realm para ambientes de baixa memória, abra o Realm com um subconjunto de modelos.

Por padrão, o C++ SDK adiciona automaticamente todos os Tipo de objeto de Realm que têm um esquema de objetos em seu executável ao seu reconhecimento de data center.

No entanto, se você deseja que o Realm managed somente um subconjunto de modelos, você pode especificar estes modelos passando-os para a lista de parâmetros do modelo da função realm::open() .

auto config = realm::db_config();
auto realm = realm::open<realm::Dog>(std::move(config));

Para evitar vazamentos de memória, feche o banco de dados quando terminar de usá-lo. Fechar o banco de dados invalida quaisquer objetos restantes. Feche o reconhecimento de data center com 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());

Voltar

Arquivos Realm

Próximo

Reduzir o tamanho do arquivo de domínio