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

Sincronização baseada em partições - React Native SDK

Nesta página

  • Valor da partição
  • Configurar um sincronização baseada em partição Realm
  • Copiar Dados e Abrir um Novo Realm
  • Migrar da sincronização baseada em partição para a Flexible Sync
  • Atualizando o código do cliente após a migração

A sincronização baseada em partição é um modo mais antigo para usar o Atlas Device Sync com o React Native SDK do Realm. Recomendamos usar o Flexible Sync para novos aplicativos. As informações nesta página são para usuários que ainda estão usando a sincronização baseada em partições.

Para obter mais informações sobre sincronização baseada em partição e como configurá-la no Atlas App Services, consulte sincronização baseada em partição na documentação do App Services.

Quando você seleciona sincronização baseada em partição para a configuração do aplicativo de backend, a implementação do cliente deve incluir um valor da partição}. Esse é o valor do campo da chave da partição que você seleciona ao configurar a sincronização baseada em partição.

O valor da partição determina quais dados o aplicativo cliente pode acessar.

Você passa no valor da partição quando abre um Realm sincronizado.

Para abrir um Flexible Sync Realm, use a função createRealmContext() de @realm/react seu RealmProvider retornado.

Em um RealmProvider aninhado em um UserProvider, adicione uma propriedade sync com um objeto SyncConfiguration que contenha flexible: true.

Observe que UserProvider passa automaticamente um usuário autenticado para RealmProvider.

<RealmProvider
schema={[YourObjectModel]}
sync={{
partitionValue: 'testPartition',
}}>
<RestOfApp />
</RealmProvider>

Novidades na versão realm@10.14.0.

Para copiar dados de um realm existente para um novo realm com diferentes opções de configuração, passe a nova configuração para o método Realm.writeCopyTo() .

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.

Na nova configuração do realm, você deve especificar o path.

Se você gravar a região copiada em um arquivo de região que já existe, os dados serão gravados objeto por objeto. A operação de cópia substitui objetos se já existirem objetos para determinadas chaves primárias. Os esquemas da região que você copia e da região na qual você está gravando devem ser compatíveis para que a operação de cópia seja bem-sucedida. Somente objetos nos esquemas de ambas as configurações são copiados.

A alteração da configuração pode incluir modificações no SyncConfiguration:

  • Região local para região sincronizada

  • Realm sincronizado com o domínio local

A alteração de configuração também pode incluir alterações na propriedade encryptionKey do Configuration:

  • Realm criptografado para realm não criptografado

  • Realm não criptografado para domínio criptografado

Exemplo

Converter realm local em realm sincronizado

const localConfig = {
schema: [Car],
path: "localOnly.realm",
};
const localRealm = await Realm.open(localConfig);
const syncedConfig = {
schema: [Car],
path: "copyLocalToSynced.realm",
sync: {
user: app.currentUser,
partitionValue: "myPartition",
},
};
localRealm.writeCopyTo(syncedConfig);
const syncedRealm = await Realm.open(syncedConfig);
const localConfig: Realm.Configuration = {
schema: [Car],
path: "localOnly.realm",
};
const localRealm = await Realm.open(localConfig);
const syncedConfig: Realm.Configuration = {
schema: [Car],
path: "copyLocalToSynced.realm",
sync: {
user: app.currentUser!,
partitionValue: "myPartition",
},
};
localRealm.writeCopyTo(syncedConfig);
const syncedRealm = await Realm.open(syncedConfig);

Você também pode combinar alterações na configuração. Por exemplo, você pode abrir um realm criptografado local como um realm não criptografado sincronizado ou um realm sincronizado não criptografado como um realm sincronizado criptografado.

Exemplo

Converter Criptografia Sincronizada em Realm Não Criptografado Local

// Create a secure key.
const encryptionKey = new Int8Array(64);
// ... store key
const syncedEncryptedConfig = {
schema: [Car],
path: "syncedEncrypted.realm",
sync: {
user: app.currentUser,
partitionValue: "myPartition",
},
encryptionKey,
};
const syncedEncryptedRealm = await Realm.open(syncedEncryptedConfig);
const localUnencryptedConfig = {
schema: [Car],
path: "copyLocalUnencrypted.realm",
};
syncedEncryptedRealm.writeCopyTo(localUnencryptedConfig);
const localUnencryptedRealm = await Realm.open(syncedEncryptedConfig);
// Create a secure key.
const encryptionKey = new Int8Array(64);
// ... store key
const syncedEncryptedConfig: Realm.Configuration = {
schema: [Car],
path: "syncedEncrypted.realm",
sync: {
user: app.currentUser!,
partitionValue: "myPartition",
},
encryptionKey,
};
const syncedEncryptedRealm = await Realm.open(syncedEncryptedConfig);
const localUnencryptedConfig: Realm.Configuration = {
schema: [Car],
path: "copyLocalUnencrypted.realm",
};
syncedEncryptedRealm.writeCopyTo(localUnencryptedConfig);
const localUnencryptedRealm = await Realm.open(syncedEncryptedConfig);

Você pode migrar seu Realm Mobile Sync do App Services da sincronização baseada em partição para a Flexible Sync. A migração é um processo automático que não exige alterações no código do aplicativo. A migração automática requer o Realm Node.js SDK versão 11.10.0 ou mais recente.

A migração permite que você mantenha os usuários existentes do App Services e a configuração de autenticação. O Flexible Sync fornece opções de configuração de permissões mais versáteis e sincronização de dados mais granular.

Para obter mais informações sobre como migrar seu aplicativo do App Services App da Partition-Based Sync para o Flexible Sync, consulte Migrar modos de Device Sync .

A migração automática da sincronização baseada em partição para a Flexible Sync não exige nenhuma alteração no código do cliente. No entanto, para suportar essa funcionalidade, o Realm lida automaticamente com as diferenças entre os dois modos de sincronização por:

  • Criando automaticamente assinaturas de Flexible Sync para cada Tipo de objeto de Realm em que partitionKey == partitionValue.

  • Injetando um campo partitionKey em cada objeto, se ainda não existir um. Isso é necessário para a assinatura automática do Flexible Sync.

Se você precisar fazer atualizações no código do cliente após a migração, considere atualizar a base de código do cliente para remover a funcionalidade de migração oculta. Talvez você queira atualizar a base de código do cliente quando:

  • Você adiciona um novo modelo ou altera um modelo na base de código do cliente

  • Você adiciona ou altera funcionalidades que envolvem a leitura ou escrita de Objeto de Realm

  • Você deseja implementar um controle mais refinado sobre quais dados você sincroniza

Faça essas alterações para converter seu código de cliente de sincronização baseada em partição para usar o Flexible Sync:

  • Adicione flexible:true ao seu objeto SyncConfiguration onde você abre um Realm sincronizado.

  • Adicione propriedades relevantes aos seus modelos de objetos para usar em suas assinaturas do Flexible Sync. Por exemplo, você pode adicionar uma propriedade ownerId para permitir que um usuário sincronize somente seus próprios dados.

  • Remova as assinaturas automáticas do Flexible Sync e crie manualmente as assinaturas relevantes.

Para obter exemplos de estratégias de permissões de Flexible Sync , incluindo exemplos de como modelar dados para essas estratégias, consulte o Guia de permissões de Device Sync .

Quando você migra da sincronização baseada em partição para o Flexible Sync, o Realm cria automaticamente assinaturas ocultas do Flexible Sync para seu aplicativo. Da próxima vez que adicionar ou alterar subscrições, recomendamos que você:

  1. Remova as assinaturas geradas automaticamente.

  2. Adicione manualmente as assinaturas relevantes na base de código do cliente.

Isso permite que você veja toda a sua lógica de assinatura junto em sua base de código para futura iteração e depuração.

Para obter mais informações sobre as assinaturas Flexible Sync geradas automaticamente, consulte Migrar aplicativo cliente para Flexible Sync.

Voltar

Recuperação manual de dados de redefinição do cliente