Menu Docs

Página inicial do DocsServiços Atlas App

Atualize seu modelo de dados

Nesta página

  • Mudanças de última hora
  • Referência rápida sobre mudanças significativas versus não significativas
  • Modo de desenvolvimento e alterações significativas
  • Adicionar um tipo de objeto
  • Adicionar um valor padrão em uma propriedade
  • Adicionar uma propriedade obrigatória
  • Modificar documentos existentes do Atlas
  • Adicionar uma propriedade opcional
  • Remover um tipo de objeto
  • Remover uma propriedade
  • Alterar o nome de um objeto
  • Alterar o nome de uma propriedade
  • Alterar um tipo de propriedade, mas manter o nome
  • Alterar o status de uma propriedade entre opcional e obrigatório
  • Usando a estratégia de coleção de parceiros

Ao desenvolver um aplicativo usando o Atlas Device Sync, talvez seja necessário fazer alterações no esquema em algum momento, por exemplo, quando for preciso:

  • Adicionar uma nova propriedade a um objeto já sincronizado

  • Remover uma propriedade de um objeto já sincronizado

  • Alterar o tipo armazenado em uma propriedade

  • Atualizar uma propriedade opcional para obrigatória

Para facilitar a compreensão de como as alterações de esquema afetam seu aplicativo, nós as caracterizamos como alterações "significativas" versus "não significativas".

O Atlas App Services fornece alterações de esquema não interrompidas para domínios sincronizados, permitindo que clientes antigos sincronizem com os mais novos.

No entanto, alterações significativas no esquema requer planejamento e trabalho, e deve ser evitada sempre que possível.

Alterações de esquema significativas são difíceis porque os clientes mais antigos (aqueles que não foram atualizados para seu novo código e esquema) ainda precisam acessar os dados por meio da definição de esquema antiga. Os clientes atualizados precisam trabalhar com as novas alterações de esquema.

Observação

Faça alterações significativas por meio da interface do usuário do Atlas App Services

Como as alterações de esquema significativas ou destrutivas exigem cuidado especial, o App Services não consegue fazer essas alterações por meio do App Services CLI ou da implantação automatizada com o GitHub. Em vez disso, você deve fazer alterações significativas na interface do usuário do App Services.

Uma alteração significativa é uma alteração feita no esquema do lado do servidor que requer uma ação adicional com a qual lidar. Uma alteração de esquema no lado do servidor exige que você encerre a sincronização no backend e, em seguida, reative a sincronização. As alterações de esquema significativas resultam na impossibilidade de os clientes abrirem um domínio ou na ocorrência de perda de dados quando os documentos do lado do servidor não conseguem sincronizar com aplicativos do lado do cliente. Eles impedem que os aplicativos se recuperem automaticamente de uma redefinição do cliente.

Uma alteração não significativa é uma alteração que você pode fazer no esquema do lado do servidor ou no modelo de objeto sem exigir ação adicional em seu aplicativo. Também conhecidas como alterações cumulativas, elas se aplicam automaticamente a domínios sincronizados.

Observação

Aplicar alterações não significativas ao cliente pode exigir migração

Quando você somente faz alterações não significativas no esquema do lado do servidor, nenhuma ação adicional é necessária. No entanto, se você tentar aplicar essas alterações ao seu modelo de objeto de cliente, talvez seja necessário realizar uma migração. Se o dispositivo do cliente tiver um arquivo de domínio existente, você deverá realizar uma migração. Para obter detalhes, consulte a página Modificar um esquema de objeto no SDK de sua preferência.

O diagrama a seguir mostra os tipos de alterações de esquema que você pode fazer e o processo pelo qual você passa para realizar a alteração. Cada uma dessas alterações é explicada em mais detalhes na tabela e nas seções abaixo.

Gráfico de fluxo de alterações de esquema

Esta tabela resume cada tipo de alteração e se é uma alteração significativa ou não.

Tipo de alteração
Esquema do lado do servidor
Modelo de objeto do lado do cliente
Adicionar um tipo de objeto
Não significativas
Não significativas
Não significativas
Não significativas
Não significativas
Não significativas
Não significativas
Não significativas
Significativa
Não significativas
Significativa
Não significativas
Significativa*
Significativa*
Significativa*
Significativa*
Significativa
Significativa
Significativa
Significativa

Dica

Renomear uma propriedade

Embora renomear uma propriedade ou objeto seja uma alteração significativa, alguns dos SDKs do Realm oferecem uma solução alternativa para remapear o nome da propriedade. Consulte Alterar o nome de uma propriedade para obter mais detalhes.

Aplica-se a apps do App Services criadas após 13 de setembro de 2023.

Os aplicativos do App Services no modo de desenvolvimento que foram criados depois de 13 de setembro de 2023 podem fazer alterações significativas no código do cliente para esquemas de objetos sincronizados.

Consulte o Modo de desenvolvimento para obter detalhes sobre como fazer alterações significativas no Modo de desenvolvimento.

O modo de desenvolvimento não é adequado para uso em produção. Se você usar o modo de desenvolvimento, certifique-se de desativá-lo antes de mover sua aplicação para a produção.

Você pode adicionar um tipo de objeto ao esquema do lado do servidor ou ao modelo de objeto do cliente sem nenhum cuidado adicional.

Se você quiser adicionar um tipo de objeto ao esquema do lado do servidor e ao modelo de objeto do cliente, poderá adicionar o tipo de objeto ao modelo de objeto e usar o Modo de desenvolvimento para permitir que o App Services lide com as atualizações do esquema do lado do servidor. Ou você pode adicionar manualmente o tipo de objeto ao modelo e ao esquema.

Observação

Essas alterações podem desencadear uma ressincronização

Quando você adiciona um novo tipo de objeto, recuperamos os documentos da coleção e os inserimos novamente no App Services para obter os novos valores. Esse é o comportamento esperado, mas causa uma interrupção temporária na propagação de alterações enquanto esse processo está em andamento.

Você pode adicionar um valor padrão na propriedade exigida de um objeto. Quando você insere um documento Atlas sem esta propriedade exigida na coleção, os clientes do Realm definem a propriedade para o valor padrão. No entanto, a mesma propriedade no documento Atlas permanece vazia até que um cliente faça alterações na propriedade ou atualize o documento diretamente no Atlas.

Para obter mais informações sobre como os valores-padrão são úteis ao modificar documentos existentes do Atlas, consulte a seção Adicione uma propriedade exigida.

Aviso

Certifique-se de que o tipo de valor padrão e o tipo de propriedade sejam os mesmos

O campo padrão não tem validação de tipo. Se o tipo do campo padrão e o tipo da propriedade não forem os mesmos, o erro indicará que o documento não possui um campo obrigatório.

Você pode adicionar uma propriedade obrigatória ao modelo de objeto do cliente e usar o Modo de desenvolvimento para permitir que os App Services deduzam as atualizações do esquema do lado do servidor. Ou você pode adicionar manualmente a propriedade exigida tanto para o modelo de cliente como para o esquema Atlas. No entanto, você deve considerar tornar a propriedade opcional para evitar a necessidade de modificar documentos do Atlas existentes.

Observação

Propriedades obrigatórias ausentes em um subconjunto de esquema serão padronizadas como zero

Os clientes podem abrir o Realm com um subconjunto de esquema que não inclui uma propriedade obrigatória. O servidor preenche o campo de valor obrigatório ausente com um valor zero ou em branco (como 0, "" , ou 0,0, dependendo do tipo de propriedade) quando o documento é sincronizado.

Ao adicionar uma nova propriedade obrigatória, você deve atualizar os documentos existentes com a nova propriedade ou eles não serão sincronizados com o cliente. Isso pode dar aos usuários clientes a impressão de que os dados foram perdidos. Resolva esse problema adicionando a nova propriedade a cada documento impactado e preenchendo-o com um valor. Depois de atualizar os documentos para corresponder ao esquema do cliente, eles são sincronizados com o aplicativo do cliente.

Quando você adiciona uma nova propriedade obrigatória, o App Services recupera os documentos da collection que têm valores novos de acordo com o esquema atualizado. O App Services itera esses documentos e os reinsere para obter os novos valores. Esse é o comportamento esperado, mas ele causa uma interrupção temporária na propagação de alterações enquanto o processo está em andamento.

Importante

O App Services usa a collection __realm_sync.unsynced_documents para rastrear documentos não sincronizados. Quando você adiciona uma propriedade obrigatória, o processo de ressincronização pode empurrar a collection para além do limite de 100.000 documentos. Nesse caso, é necessário encerrar e reativar a sincronização, mesmo que a alteração que você esteja fazendo não seja significativa.

Se você quiser adicionar uma propriedade opcional ao esquema do lado do servidor e ao modelo de objeto do cliente, poderá adicionar a propriedade opcional ao modelo de objeto e usar o Modo de desenvolvimento para permitir que App Services infira as atualizações do esquema do lado do servidor. Ou você pode adicionar manualmente a propriedade opcional ao modelo e ao esquema.

Observação

Essas alterações podem desencadear uma ressincronização

Quando você adiciona uma nova propriedade opcional, recuperamos os documentos da coleção que têm novos valores de acordo com o esquema atualizado. Nós iteramos esses documentos e os reinserimos no App Services para obter os novos valores. Esse é o comportamento esperado, mas causa uma interrupção temporária na propagação de alterações enquanto esse processo está em andamento.

Você pode remover um objeto do modelo de objeto do cliente como uma alteração não significativa. Se você remover o objeto do esquema do lado do servidor, será uma alteração significativa. Por esse motivo, recomendamos que você remova o tipo de objeto apenas do modelo de objeto do lado do cliente e o deixe no lugar no esquema do lado do servidor.

Você pode remover uma propriedade opcional ou obrigatória do modelo de objeto do lado do cliente e deixá-la no lugar no esquema do lado do servidor. Esta é uma mudança não significativa no modelo de objeto.

Se você remover uma propriedade do esquema do lado do servidor, será uma alteração significativa. Por esse motivo, recomendamos que você remova a propriedade apenas do modelo de objeto do lado do cliente e a deixe no lugar no esquema do lado do servidor.

Para manter a compatibilidade com versões anteriores, a remoção de uma propriedade de um modelo de objeto do lado do cliente não exclui a propriedade do banco de dados. Em vez disso, os novos objetos mantêm a propriedade removida e o App Services define o valor como um valor vazio apropriado, como null para propriedades anuláveis, um 0 para valores inteiros ou uma string vazia para uma string de valores.

Alterar o nome de um objeto tanto no esquema do lado do servidor quanto no modelo de objeto do lado do cliente é uma alteração significativa. No entanto, alguns SDKs oferecem uma API para mapear um novo nome de objeto para um nome existente no esquema. Isso permite renomear um objeto no cliente, mas não altera o nome do objeto no servidor. Dessa forma, você evita desencadear uma migração. O mapeamento de nome de objeto é suportado nos seguintes SDKs:

  • Kotlin

  • Java

  • .NET

  • Flutuação

Se o mapeamento de nome não for uma opção, considere implementar uma estratégia de collection de parceiros, na qual você mantém a collection e o esquema existentes e cria uma nova collection com o novo esquema.

Se você optar por alterar o nome do objeto em vez de usar a estratégia de coleção de parceiros, deverá encerrar a sincronização, atualizar manualmente o esquema e reativar a sincronização. Além disso, o aplicativo cliente deve executar uma redefinição do cliente para restaurar a sincronização. No modo de redefinição de cliente padrão, o cliente tenta recuperar quaisquer alterações não sincronizadas antes de redefinir.

Observação

O Modo de Desenvolvimento não atualiza automaticamente o esquema para alterações significativas.

Alterar o nome de uma propriedade tanto no esquema do lado do servidor quanto no modelo de objeto do lado do cliente é uma alteração significativa. No entanto, alguns SDKs oferecem uma API para mapear um novo nome de propriedade para um nome existente no esquema. Isso permite que você renomeie uma propriedade no cliente, mas não altere o nome da propriedade no servidor. Dessa forma, você evita desencadear uma migração. O mapeamento de nome da propriedade é suportado nos seguintes SDKs:

Aviso

Atualizar documentos existentes

Se você alterar um nome de propriedade no esquema do lado do servidor, deverá atualizar os documentos existentes com esse novo nome de propriedade ou eles não serão sincronizados com o cliente. Isso pode dar aos usuários clientes a impressão de que os dados foram perdidos.

Se o mapeamento de nome não for uma opção, considere implementar uma estratégia de collection de parceiros, na qual você mantém a collection e o esquema existentes e cria uma nova collection com o novo esquema.

Se você optar por alterar o nome da propriedade em vez de usar a estratégia de coleta de parceiros, deverá encerrar a sincronização, atualizar manualmente o esquema e reativar a sincronização. Além disso, o aplicativo cliente deve executar uma redefinição do cliente para restaurar a sincronização. No modo de redefinição de cliente padrão, o cliente tenta recuperar quaisquer alterações não sincronizadas antes de redefinir.

Ao encerrar e reativar a sincronização, você também deve atualizar os documentos existentes do Atlas para habilitá-los à sincronização com seus aplicativos cliente. Sem esse cuidado adicional, esses documentos não são sincronizados e pode aparecer no cliente que os dados foram perdidos. Você pode resolver esse problema de duas maneiras:

  • Altere o nome do campo antigo em cada documento para corresponder ao novo esquema

  • Adicione um novo campo a cada documento com um nome que corresponda ao novo esquema e copie o valor do campo antigo nele

Depois de fazer essas alterações, os documentos apropriados sincronizam com o aplicativo do cliente.

Alterar o tipo de uma propriedade é uma mudança radical tanto no esquema do lado do servidor quanto no modelo de objeto do lado do cliente.

Aviso

Atualizar documentos existentes

Se você alterar o tipo de uma propriedade no esquema do lado do servidor, deverá atualizar os documentos existentes com esse novo tipo de propriedade ou eles não serão sincronizados com o cliente. Isso pode dar aos usuários clientes a impressão de que os dados foram perdidos.

Em vez de alterar o tipo de uma propriedade, considere implementar a estratégia de coleção de parceiros, na qual você mantém a coleção e o esquema existentes e cria uma nova coleção com o novo esquema.

Se você optar por alterar o tipo da propriedade em vez de usar a estratégia de coleção de parceiros, deverá encerrar a sincronização, atualizar manualmente o esquema e reativar a sincronização. Além disso, o aplicativo do cliente deve executar uma redefinição do cliente para restaurar a sincronização. No modo de redefinição de cliente padrão, o cliente tenta recuperar quaisquer alterações não sincronizadas antes de redefinir.

Observação

O Modo de Desenvolvimento não atualiza automaticamente o esquema para alterações significativas.

Ao encerrar e reativar a sincronização, você também deve atualizar os documentos existentes do Atlas para habilitá-los à sincronização com seus aplicativos cliente. Sem esse cuidado adicional, esses documentos não são sincronizados e pode aparecer no cliente que os dados foram perdidos. Você pode resolver esse problema de duas maneiras:

  • Altere o tipo de campo antigo em cada documento para corresponder ao novo esquema

  • Adicione um novo campo a cada documento com o tipo que corresponde ao novo esquema e copie o valor do campo antigo para ele, transformando seu tipo

Depois de fazer essas alterações, os documentos apropriados devem sincronizam novamente com o aplicativo do cliente.

Alterar o status de uma propriedade entre opcional e obrigatório é uma alteração de interrupção no esquema do lado do servidor e no modelo de objeto do lado do cliente.

Aviso

Atualizar documentos existentes

Se você alterar o status de uma propriedade no esquema do lado do servidor, deverá atualizar os documentos existentes com o novo tipo de propriedade. Caso contrário, eles não serão sincronizados com o cliente. Isso pode dar aos usuários a impressão de que os dados foram perdidos.

Em vez de alterar o status de uma propriedade, considere implementar a estratégia de coleção de parceiros, na qual você mantém a coleção e o esquema existentes e cria uma nova coleção com o novo esquema.

Se você optar por alterar o status da propriedade em vez de usar a estratégia de collection de parceiros, deverá encerrar a sincronização, atualizar manualmente o esquema e reativar a sincronização. Além disso, o aplicativo do cliente deve executar uma reinício do cliente para restaurar a sincronização. No modo de reinício do cliente padrão, o cliente tenta recuperar quaisquer alterações não sincronizadas antes de redefinir.

Observação

O Modo de Desenvolvimento não atualiza automaticamente o esquema para alterações significativas.

Uma coleção de parceiros é uma coleção que contém os mesmos dados que a coleção original, mas que tem a nova definição de esquema em vigor. As coleções de parceiros usam gatilhos de banco de dados para garantir os fluxos de dados em ambas as direções, o que significa que, quando uma coleção é gravada, a outra também é gravada (com as modificações de dados necessárias para o novo esquema).

Para implementar uma alteração significativa no esquema usando a estratégia de coleção de parceiros, consulte Fazer alterações importantes no esquema.

← Gerar modelos de objeto do SDK