Sincronização baseada em partições - React Native SDK
Nesta página
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.
Valor da partição
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.
Configurar um sincronização baseada em partição Realm
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>
Copiar Dados e Abrir um Novo Realm
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);
Migrar da sincronização baseada em partição para a Flexible Sync
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 .
Atualizando o código do cliente após a migração
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 .
Remover e criar assinaturas manualmente
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ê:
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.