É importante escolher os mecanismos de armazenamento certos, tanto para armazenamento de dispositivos locais quanto para armazenamento de servidor baseado em nuvem. Um bom mecanismo de armazenamento garante que suas informações sejam salvas com confiabilidade, reduz a largura de banda e melhora a capacidade de resposta. A estratégia de armazenamento em cache certa é um elemento básico para ativar experiências da Web para dispositivos móveis off-line.
Este artigo fornece uma breve base para avaliar APIs e serviços de armazenamento. Depois, vamos mostrar uma tabela de comparação e algumas orientações gerais. Em breve, vamos adicionar recursos para entender melhor alguns tópicos de armazenamento.
Taxonomia de armazenamento
Vamos começar entendendo algumas das dimensões que podem ser usadas para analisar o armazenamento de dados em apps da Web. Mais tarde, vamos usar esse framework para enumerar e avaliar as muitas opções de armazenamento disponíveis para desenvolvedores da Web.
Modelo de dados
O modelo de armazenamento de unidades de dados determina como os dados são organizados internamente, o que afeta a facilidade de uso, o custo e o desempenho das solicitações de armazenamento e recuperação.
Estruturados:os dados armazenados em tabelas com campos predefinidos, como é típico de sistemas de gerenciamento de banco de dados baseados em SQL, se prestam bem a consultas flexíveis e dinâmicas, em que a gama completa de tipos de consulta pode não ser conhecida de antemão. Um exemplo importante de repositório de dados estruturado no navegador é o IndexedDB.
Chave/valor:os repositórios de chave/valor e os bancos de dados NoSQL relacionados oferecem a capacidade de armazenar e recuperar dados não estruturados indexados por uma chave exclusiva. Os repositórios de chave-valor são como tabelas hash, porque permitem acesso constante a dados opacos indexados. Exemplos importantes de repositórios de chave-valor são a API Cache no navegador e o Apache Cassandra no servidor.
Fluxos de bytes:esse modelo simples armazena dados como uma string opaca de bytes de comprimento variável, deixando qualquer forma de organização interna para a camada do aplicativo. Esse modelo é particularmente bom para sistemas de arquivos e outros blobs de dados organizados hierarquicamente. Exemplos importantes de repositórios de fluxo de bytes incluem sistemas de arquivos e serviços de armazenamento em nuvem.
Persistência
Os métodos de armazenamento para apps da Web podem ser analisados de acordo com o escopo em que os dados são mantidos.
Persistência de sessão:os dados dessa categoria são retidos apenas enquanto uma única sessão da Web ou guia do navegador permanece ativa. Um exemplo de mecanismo de armazenamento com persistência de sessão é a API Session Storage.
Persistência do dispositivo:os dados dessa categoria são retidos em todas as sessões e nas guias/janelas do navegador, em um dispositivo específico. Um exemplo de mecanismo de armazenamento com persistência do dispositivo é a API Cache.
Persistência global:os dados dessa categoria são retidos em todas as sessões e dispositivos. Por isso, é a forma mais robusta de persistência de dados. Um exemplo de mecanismo de armazenamento com persistência global é o Google Cloud Storage.
Compatibilidade com navegadores
Os desenvolvedores precisam escolher uma API mais adequada ao domínio do problema. No entanto, eles também precisam levar em conta o fato de que APIs padronizadas e bem estabelecidas são preferíveis a interfaces personalizadas ou proprietárias, porque tendem a ter uma vida útil mais longa e um suporte mais amplo. Eles também podem aproveitar uma base de conhecimento mais ampla e um ecossistema de desenvolvedores mais rico.
Transações
Muitas vezes, é importante que uma coleção de operações de armazenamento relacionadas seja bem-sucedida ou falhe atomicamente. Os sistemas de gerenciamento de banco de dados tradicionalmente oferecem suporte a esse recurso usando o modelo de transação, em que as atualizações relacionadas podem ser agrupadas em unidades arbitrárias. Embora nem sempre seja necessário, esse é um recurso conveniente e, às vezes, essencial em alguns domínios de problemas.
Sincronização/assíncrono
Algumas APIs de armazenamento são síncronas no sentido de que as solicitações de armazenamento ou recuperação bloqueiam a linha de execução ativa até que a solicitação seja concluída. Isso é particularmente oneroso em navegadores da Web, em que a solicitação de armazenamento compartilha a linha de execução principal com a interface. Por motivos de eficiência e desempenho, as APIs de armazenamento assíncronas são as preferidas.
Depurar armazenamento no Chrome DevTools
Confira os documentos a seguir para saber mais sobre como usar o Chrome DevTools para inspecionar e depurar a API de armazenamento da Web que você escolher. As APIs não mencionadas aqui não têm suporte no DevTools ou não são aplicáveis.
Se você estiver usando várias APIs de armazenamento, confira o recurso Limpar armazenamento das Ferramentas do desenvolvedor. Esse recurso permite limpar várias lojas com um único clique no botão. Consulte Limpar service workers, armazenamento, bancos de dados e caches para mais informações.
O que fazer a seguir…
Agora que analisamos algumas das maneiras relevantes de pensar sobre mecanismos de armazenamento e comparamos as APIs e os serviços mais conhecidos disponíveis atualmente, em breve vamos adicionar mais conteúdo para se aprofundar em um ou mais temas de interesse: