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

Agrupar um arquivo Realm - SDK do nó

Nesta página

  • Visão geral
  • Criar um arquivo Realm para agrupamento
  • Agrupe um arquivo Realm em seu aplicativo de produção
  • Abrir um Realm a partir de um arquivo de Realm agrupado
  • Agrupar um Realm

O Realm suporta o agrupamento de arquivos realm. Ao agrupar um arquivo de domínio, você inclui um banco de dados e todos os seus dados no download do aplicativo.

Isso permite que os usuários iniciem aplicativos pela primeira vez com um conjunto de dados iniciais. Para domínios sincronizados, o agrupamento pode evitar um download inicial demorado na primeira vez que um usuário abre seu aplicação. Em vez disso, os usuários devem baixar apenas as alterações sincronizadas que ocorreram desde que você gerou o arquivo agrupado.

Para criar e agrupar um arquivo de domínio com seu aplicativo:

  1. Crie um arquivo de domínio que contenha os dados que você deseja agrupar.

  2. Adicione o arquivo de Realm fornecido ao seu aplicação de produção.

  3. Em seu aplicação de produção , abra o Realm a partir do arquivo de ativos agrupados. Para domínios sincronizados, você deve incluir a chave da partição}.

Observação

Agrupar domínios sincronizados

Versão do SDK 10.12.0 introduziu a capacidade de agrupar domínios sincronizados. Antes da versão 10.12.0, só era possível agrupar domínios locais. Consulte a seção Realm um domínio sincronizado para obter detalhes sobre considerações e limitações ao agrupar um domínio sincronizado.

  1. Construa um aplicativo de domínio temporário que compartilhe o modelo de dados do seu aplicativo.

  2. Abra um domínio e adicione os dados que deseja agrupar. Se estiver usando um domínio sincronizado, dê tempo para que o domínio sincronize totalmente.

  3. Use o método writeCopyTo() para copiar o domínio para um novo arquivo:

    const originalPath = path.join(__dirname, "original.realm");
    const originalConfig = {
    schema: [Car],
    path: originalPath,
    };
    const originalRealm = await Realm.open(originalConfig);
    const copyPath = path.join(__dirname, "copy.realm");
    originalRealm.writeCopyTo(copyPath);

    writeCopyTo() compacta automaticamente seu domínio no menor tamanho possível antes de copiar.

    Observação

    Diferenças entre realms sincronizados e realms somente locais

    O exemplo acima utiliza um SyncConfiguration para configurar um realm sincronizado para o campo sync do Configuration. Para criar uma cópia de um domínio local, não inclua o campo sync em seu objeto Configuração.

  4. Observe o caminho de arquivo do arquivo de Realm agrupado, que pode ser encontrado no local especificado no argumento passado para writeCopyTo() na etapa anterior. Você precisará deste arquivo para usar o Realm agrupado em seu aplicação de produção, conforme descrito na próxima seção.

    temp_realm_app
    .
    ├── copyOfDefault.realm
    ... rest of files in _temp_ application

Agora que você tem uma cópia do domínio que contém os dados iniciais, agrupe-o com seu aplicativo de produção.

Adicione o arquivo de Realm agrupado feito na seção anterior ao seu aplicação de produção.

prod_realm_app
.
├── copyOfDefault.realm
... rest of files in _prod_ application

Agora que você tem uma cópia do domínio incluída em seu aplicativo de produção, precisa adicionar código para usá-lo.

Crie uma Configuração com o caminho para o Realm agrupado como o valor para o campo path . Passe essa configuração para o arquivo .open() do Realm método. Agora você pode trabalhar com os dados do seu Realm agrupado no Realm que você acabou de abrir.

const copyConfig = {
schema: [Car],
path: "path/to/bundled/file.realm"
};
const copyRealm = await Realm.open(copyConfig);

Observação

Somente sincronização do mesmo tipo

Esse método oferece suporte apenas à cópia de uma configuração de Partition-Based Sync para outro usuário de Partition-Based Sync ou uma configuração de Flexible Sync para outro usuário de Flexible Sync. Você não pode usar esse método para converter entre um Partition-Based Sync realm e um Flexible Sync realm ou vice-versa.

Geralmente, o agrupamento de um Realm sincronizado funciona da mesma forma que o agrupamento de um Realm somente local. No entanto, você só pode agrupar domínios totalmente sincronizados. Certifique-se de que o Realm esteja totalmente sincronizado com o servidor antes de agrupar:

const config = {
sync: {
user: app.currentUser,
partitionValue: app.currentUser.id,
},
schema: [Car],
};
const realm = await Realm.open(config);
// create many changes
realm.write(() => {
for (let i = 0; i < 25; i++) {
realm.create("Car", {
make: "Toyota",
model: "Prius",
miles: i,
owner: app.currentUser.id,
});
}
});
// ensure synchronize all changes before copy
await realm.syncSession.uploadAllLocalChanges();
await realm.syncSession.downloadAllServerChanges();
// changes are synchronized -- we can copy the realm
realm.writeCopyTo(__dirname + "syncedCopy.realm");

Importante

Agrupar domínios sincronizados

Se o seu aplicativo de backend usar o Flexible Sync, os usuários poderão sofrer um reinício do cliente na primeira vez que abrirem o arquivo de domínio incluído. Isso pode ocorrer quando o tempo máximo offline do cliente está habilitado (o tempo máximo offline do cliente é habilitado por padrão). Se o arquivo de domínio agrupado tiver sido gerado mais do que o número de dias especificado pela configuração de tempo máximo offline do cliente antes de o usuário sincronizar pela primeira vez, o usuário experimenta um reinício do cliente.

Os aplicativos que executam uma redefinição do cliente baixam o estado completo do domínio do backend do aplicativo. Isso nega as vantagens de agrupar um arquivo de domínio. Para evitar o reinício do cliente e preservar as vantagens do agrupamento de arquivos realm:

  • Evite usar o tempo offline máximo do cliente em aplicativos que agrupam um domínio sincronizado.

  • Se o seu aplicativo usar o tempo máximo offline do cliente, certifique-se de que o download do aplicativo sempre inclua um arquivo de domínio sincronizado recentemente. Gere um novo arquivo a cada versão do aplicativo e garanta que nenhuma versão permaneça atual por mais do que o número máximo de dias de tempo offline do cliente .

Existem outras limitações ao abrir um Realm sincronizado em pacote que usa a sincronização baseada em partição antiga. Para obter mais informações sobre como usar realms configurados com sincronização baseada em partição em sincronização baseada em partição - Node.js SDK

Voltar

Reduzir o tamanho do arquivo de domínio