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

Introdução ao Atlas Device SDK

Nesta página

  • Desafios de desenvolvimento para dispositivos móveis e de borda
  • Sincronizar dados com o MongoDB Atlas
  • Usar Atlas App Services
  • Atlas Device SDK versus drivers do MongoDB
  • Os SDKs envolvem o banco de dados Realm
  • Realm versus outros bancos de dados
  • Queries ativas
  • Objeto ativo
  • Mecanismo de banco de dados nativo

O Atlas Device SDK é uma collection de ferramentas para acelerar o desenvolvimento de aplicação em uma ampla variedade de dispositivos:

  • Um cliente de sincronização integrado que pode sincronizar seus dados entre dispositivos e com um backend do MongoDB Atlas.

  • Um banco de dados de objetos offline para persistir os dados no dispositivo.

  • A capacidade de chamar Atlas Functions para trabalhar na nuvem.

  • Um cliente para consultar fontes de dados do MongoDB diretamente de sua aplicação.

Você pode usar o armazenamento de objetos do SDK, Realm, para ler, gravar e reagir às alterações nos seus dados no dispositivo. Adicione o Device Sync, o Atlas Function ou o cliente MongoDB Atlas para aproveitar as funcionalidades do MongoDB Atlas e acessar fontes de dados da sua aplicação.

Os programadores de dispositivos móveis e de borda enfrentam vários desafios exclusivos:

  • Administre o ambiente imprevisível dos dispositivos móveis e de borda. As conexões podem ser perdidas, os dispositivos podem ser desligados a qualquer momento e os clientes geralmente são atualizados muito tempo após o lançamento.

  • Mantenha esquemas de dados e APIs comuns entre clientes, APIs de backend e bancos de dados.

  • Fique atento às vulnerabilidades de segurança em todos os componentes de um ecossistema.

  • Serialize objetos de forma consistente entre redes, armazenamento de banco de dados e memória de aplicativos.

  • Programe nas linguagens e frameworks para um ou mais sistemas operacionais.

Todos esses desafios apresentam obstáculos diferentes. Você pode resolver cada uma delas isoladamente com uma grande variedade de bibliotecas e estruturas. Selecionar a melhor solução para cada problema com as compensações certas é um desafio que os desenvolvedores de dispositivos móveis e de borda conhecem muito bem.

A combinação de vários ambientes cria mais desafios. Por exemplo, você pode usar uma biblioteca Java no seu cliente Android para serializar objetos, mas essa biblioteca não funcionará no iOS. E isso não leva em conta a consistência entre os serviços de back-end.

Os SDKs resolvem muitas dores de cabeça comuns de programação de dispositivos móveis e de borda:

  • Armazenamento do dispositivo: os SDKs são executados diretamente nos dispositivos do cliente. Acesse objetos usando a linguagem de consulta nativa para cada plataforma. Armazenar, acessar e atualizar seus dados é simples e leve.

  • Confiabilidade da rede: os SDKs estão em primeiro lugar offline. Você sempre lê e grava na camada de persistência do dispositivo, não na rede. Quando o Device Sync está ativado, o SDK sincroniza os dados com os App Services pela rede em um thread em segundo plano. O protocolo de sincronização resolve conflitos de forma consistente em cada cliente e no cluster Atlas vinculado.

  • UI reativa: os objetos ativos sempre refletem os dados mais recentes armazenados no banco de dados. Você pode se inscrever para receber as alterações, o que permite manter a UI sempre atualizada.

Os aplicativos do cliente geram muitos dados. Quer se trate de avaliações e classificações carregadas, publicações e comentários em um blog ou estoque em uma cozinha, você precisa armazenar esses dados em algum lugar.

Os SDKs usam o Atlas Device Sync para sincronizar dados de aplicação entre clientes e o MongoDB Atlas. O Atlas Device Sync lida com o acesso à rede e a resolução de conflitos em um thread em background do seu aplicativo, para que a lógica do aplicativo permaneça a mesma, independentemente das condições da rede.

Depois que os dados do seu cliente estiverem no Atlas, você poderá aproveitar a plataforma completa de dados para desenvolvedores do Atlas. Realize agregações e outras cargas de trabalho complexas com todos os recursos do MongoDB. Ou conecte sua instância do Atlas a gráficos para visualizar seus dados em tempo real. Armazenar seus dados no Atlas facilita o compartilhamento de dados entre usuários e plataformas.

Os SDKs se integram ao App Services para trabalhar de forma fácil e segura com dados de sua aplicação:

Use os SDKs em vez dos drivers do MongoDB, se desejar:

  • Um repositório de objetos de plataforma cruzada otimizado para dispositivos móveis e de borda que podem sincronizar dados automaticamente com o MongoDB Atlas.

  • Resolução de conflitos integrada ao sincronizar dados entre usuários e dispositivos.

  • A capacidade de acessar dados em um dispositivo, independentemente da conectividade de rede.

  • UIs reativas orientadas por seus dados.

  • Gerenciamento de usuários integrado e autenticação para dispositivos de clientes.

  • Suporte para permissões de usuário complexas e lógica de sincronização para determinar quais dados os clientes podem ler e escrever.

  • Otimização para volumes de trabalho grandes somente de inserção de dispositivos móveis ou de borda.

  • Capacidade de executar Atlas Function a partir do cliente.

Use drivers do MongoDB em vez dos SDKs se:

  • Você hospeda o MongoDB em sua própria infraestrutura. Os SDKs são apenas para dispositivos ou funcionam com MongoDB Atlas.

  • Você deseja trabalhar diretamente com documentos em vez de objetos ou tem sua própria camada de mapeamento. Os SDKs armazenam dados como objetos no dispositivo, e o Device Sync os mapeia para documentos do MongoDB quando sincroniza com o Atlas.

  • Você já tem uma pilha como MERN ou MEAN e não precisa da funcionalidade fornecida pelos SDKs.

A camada de persistência que os SDKs utilizam no dispositivo é Realm. Os SDKs agrupam o banco de dados Realm Core C++ e fornecem API idiomática de linguagem para trabalhar com arquivos no sistema de arquivos e executar operações de leitura e gravação.

O Realm é um banco de dados móvel reativo, orientado a objetos, multiplataforma:

  • Reativo: faça query do estado atual dos dados e assine as alterações de estado, como o resultado de uma query ou até mesmo alterações em um único objeto.

  • Orientado a objetos: organiza dados como objetos, em vez de linhas, documentos ou colunas

  • Plataforma cruzada: use o mesmo banco de dados no iOS, Android, Linux, macOS ou Windows. Basta definir um esquema para cada SDK que você usa.

  • Móvel: projetado para o ambiente em tempo real, de baixa potência e sensível à bateria de um dispositivo móvel.

O Realm é uma alternativa multiplataforma e otimizada para dispositivos móveis para outros bancos de dados móveis, como SQLite, Dados principais, e Quarto.

O modelo de dados Realm é semelhante aos bancos de dados relacionais e de documentos, mas se difere de ambos. O Realm armazena objetos em arquivos no dispositivo, e uma aplicação pode usar vários arquivos realm para organizar dados e forçar controles de acesso.

Um Realm não é um único banco de dados em todo o aplicativo.
Aplicativos baseados em outros sistemas de banco de dados geralmente armazenam todos os dados em um único banco de dados. Os aplicativos geralmente dividem os dados em vários realms para organizar os dados com mais eficiência e forçar controles de acesso.
Um realm não é uma tabela relacional.
As tabelas normalizadas em bancos de dados relacionais armazenam apenas um tipo de informação, como endereços ou itens em um inventário de armazenamento. Um realm pode conter qualquer número de tipos de objetos que sejam relevantes para um determinado domínio.
Um realm não é uma collection de documentos esquemáticos.
Os bancos de dados de documentos não necessariamente impõem um esquema estrito para os dados em cada coleta. Embora seja semelhante aos documentos em formato, cada objeto Realm está em conformidade com um esquema para um tipo de objeto específico no reino. Um objeto não pode conter uma propriedade que não seja descrita por seu esquema.

Você pode reler os dados armazenados no Realm encontrando, filtrando e ordenando objetos. Opcionalmente, você pode secionar esses resultados por um caminho de chave, facilitando o preenchimento de tabelas seccionadas.

Todos os objetos de Realm são objetos ativos, o que significa que são atualizados automaticamente sempre que são modificados. O Realm emite um evento de notificação sempre que alguma propriedade é alterada.

Você pode usar objetos ativos para trabalhar nativamente com dados orientados a objetos sem um ORM ferramenta. Os objetos ativos são proxies diretos para os dados armazenados subjacentes, o que significa que um objeto ativo não contém dados diretamente. Em vez disso, um objeto ativo sempre faz referência aos dados mais atualizados em disco e carregamentos lentos valores de propriedade quando você os acessa a partir de uma coleção. Isso significa que um realm pode conter muitos objetos, mas pagar apenas o custo de desempenho pelos dados que o aplicativo está realmente usando.

As operações de gravação válidas em um objeto ativo persistem automaticamente no realm e se propagam para qualquer outro cliente sincronizado. Não é necessário chamar um método de atualização, modificar o realm ou "enviar por push" as atualizações.

O Realm é um banco de dados inteiro escrito do zero em C++, em vez de ser construído sobre um mecanismo de banco de dados subjacente, como o SQLite. A camada de armazenamento subjacente do Realm usa árvores B+ para organizar objetos. Como resultado, o Realm controla as otimizações do nível de armazenamento até o nível de acesso.

O Realm armazena os dados em realms: collections de objetos de realm heterogêneos. Você pode pensar em cada realm como um banco de dados. Cada objeto em um realm é equivalente a uma linha em uma tabela de banco de dados SQL ou um documento do MongoDB. Diferentemente do SQL, os realms não separam diferentes tipos de objetos em tabelas individuais.

O Realm armazena objetos como grupos de valores de propriedade. Chamamos isso de armazenamento baseado em colunas. Isso significa que as queries ou gravações de objetos individuais podem ser mais lentas do que equivalentes de armazenamento baseado em linha quando não indexadas. Porém, consultar um único campo em vários objetos ou buscar vários objetos pode ser muito mais rápido devido à localidade espacial e às operações vetoriais na CPU.

O Realm usa uma cópia zero design para tornar as queries mais rápidas que um ORM e, muitas vezes, mais rápidas que o SQLite bruto.

O Realm usa uma técnica chamada cópia em gravação, que copia dados para um novo local no disco a cada operação de gravação, em vez de substituir dados antigos no disco. Depois que a nova cópia dos dados estiver totalmente gravada, o banco de dados atualizará as referências existentes a esses dados. Os dados mais antigos são coletados apenas como lixo quando não são mais referenciados ou não estão mais em uso por um aplicativo cliente.

Devido à cópia em gravação, cópias mais antigas de dados permanecem válidas, uma vez que todas as referências nessas cópias ainda apontam para outros dados válidos. O Realm aproveita esse fato para oferecer várias versões de dados simultaneamente para diferentes threads em aplicativos cliente. A maioria dos aplicativos vincula as atualizações de dados ao ciclo de repintura do thread looper que controla a interface do usuário, já que os dados só precisam ser atualizados com a mesma frequência que a interface do usuário. Procedimentos de execução mais longa em threads em segundo plano, como grandes operações de gravação, podem funcionar com uma única versão de dados por um longo período de tempo antes de confirmar suas alterações.

Gravações usam mapeamento de memória para evitar copiar dados da memória para o armazenamento. Acessores e mutadores leem e gravam no disco por meio de mapeamento de memória. Como resultado, os dados de objetos nunca são armazenados na pilha ou relação do seu aplicativo. Por padrão, os dados são mapeados de memória como somente leitura para evitar gravações acidentais.

O Realm usa paginação no nível do sistema operacional, confiando em cada sistema operacional para implementar o mapeamento e a persistência da memória melhor do que uma única biblioteca poderia fazer por conta própria.

O Realm reutiliza automaticamente o espaço livre que não é mais necessário após a escrita do banco de dados. No entanto, os arquivos do Realm nunca diminuem automaticamente, mesmo que a quantidade de dados armazenados em seu Realm diminua significativamente. Compacte seu Realm para otimizar o espaço de armazenamento e diminuir o tamanho do arquivo, se possível.

Você deve compactar seus Realms ocasionalmente para mantê-los no tamanho ideal. Você pode fazer isso manualmente ou configurando seus Realms para compactar no lançamento. No entanto, o Realm recupera espaço não utilizado para escritas futuras, de modo que a compactação é apenas uma otimização para conservar espaço no dispositivo.

← Bem-vindo aos Docs do Atlas Device SDK