Reduzir o tamanho do Arquivo de Realm - C++ SDK
Nesta página
Com o tempo, o espaço de armazenamento usado pelo Realm pode ficar fragmentado e ocupar mais espaço do que o necessário. Para reorganizar o armazenamento interno e potencialmente reduzir o tamanho do arquivo, o arquivo de domínio precisa ser compactado.
Por padrão, o Realm compacta automaticamente arquivos de realm para impedir que eles se tornem excessivamente grandes. Você pode usar técnicas de compactação manual se a automática for insuficiente para o seu caso de uso.
Compactação automática
O SDK compacta automaticamente os arquivos do Realm em segundo plano, realocando continuamente os dados no arquivo e removendo o espaço de arquivo não utilizado. A compactação automática é suficiente para minimizar o tamanho do arquivo Realm para a maioria dos aplicativos.
A compactação automática é acionada quando o tamanho do espaço não utilizado do arquivo excede o dobro do tamanho dos dados do usuário contidos no arquivo. A compactação automática só ocorre quando o arquivo não está sendo acessado.
Opções manuais de compactação
A compactação manual pode ser usada para aplicativos que exigem um gerenciamento mais rigoroso do tamanho do arquivo.
A compactação manual do realm funciona por:
Lendo todo o conteúdo do arquivo de área
Escrevendo o conteúdo em um novo arquivo em um local diferente
Substituindo o arquivo original
Se o arquivo contiver muitos dados, pode ser uma operação cara.
Use o métodoshould_compact_on_launch() na configuração do banco de dados de dados para tentar compactar o banco de dados de dados. Especifique as condições para executar este método, como:
O tamanho do arquivo no disco
Quanto espaço livre o arquivo contém
O exemplo a seguir mostra a definição das condições para compactar um Realm se o arquivo estiver acima de 100 MB e 50% ou menos do espaço no Arquivo de Realm for usado.
// Create a database configuration. auto config = realm::db_config(); config.should_compact_on_launch([&](uint64_t totalBytes, uint64_t usedBytes) { // totalBytes refers to the size of the file on disk in bytes (data + free // space). usedBytes refers to the number of bytes used by data in the file // Compact if the file is over 100MB in size and less than 50% 'used' auto oneHundredMB = 100 * 1024 * 1024; return (totalBytes > oneHundredMB) && (usedBytes / totalBytes) < 0.5; }); // The database is compacted on the first open if the configuration block // conditions were met. auto realm = realm::db(config);
Dicas para compactar manualmente um Realm
A compactação manual de um realm pode ser uma operação que consome muitos recursos. Seu aplicativo não deve ser compactado toda vez que você abrir um realm. Em vez disso, tente otimizar a compactação para que seu aplicativo faça isso com frequência suficiente para evitar que o tamanho do arquivo fique muito grande. Se o seu aplicativo for executado em um ambiente com restrição de recursos, você pode querer compactar quando chegar a um determinado tamanho de arquivo ou quando o tamanho do arquivo afetar negativamente o desempenho.
Essas recomendações podem ajudá-lo a começar a otimizar a compactação de seu aplicativo:
Defina o tamanho máximo do arquivo como um múltiplo do tamanho médio do estado do Realm. Se o estado médio do Realm for de 10MB, defina o tamanho máximo do arquivo Realm entre 20MB e 40MB, considerando o uso previsto e as restrições do dispositivo.
Como ponto de partida, os domínios compactos quando mais de 50% do tamanho do arquivo de área não estão mais em uso. Divida os bytes atualmente usados pelo tamanho total do arquivo para determinar a porcentagem de espaço que está sendo usada atualmente. Em seguida, verifique se é inferior a 50%. Isso significa que mais de 50% do tamanho do arquivo do seu realm é espaço não utilizado e é um bom momento para compactar. Após a experimentação, você pode descobrir que uma porcentagem diferente funciona melhor para seu aplicativo.