Tenho um banco de dados sqlite que cresceu para 30 GB e ainda estou enviando dados para ele todos os dias. Tenho alguns serviços que gravam nele usando libsqlite3. Em breve, ele ficará grande demais para ser mantido localmente. Qual é a melhor maneira de migrar para uma configuração distribuída? Uma maneira que posso pensar é sshfs, mas isso não funcionará se minha máquina estiver offline. Uma solução que armazena em cache as partes mais recentemente usadas do meu banco de dados localmente e mantém o restante em outro lugar seria perfeita. Na maioria das vezes, usarei dados enviados recentemente. Eu poderia começar a arquivar dados de anos atrás, mas acessá-los exigiria trabalho manual.
relate perguntas
-
Quantas buscas de disco são necessárias para gravar uma linha no SQLite?
-
Existe uma adição de software livre para SQLite disponível para replicação de dados? [fechado]
-
Usando CoreData em um aplicativo do lado do cliente
-
Limites do SQLite
-
É possível usar o SQLite como um banco de dados cliente-servidor? [fechado]
Se eu entendi seu ambiente corretamente, então a melhor maneira seria fazer um particionamento "baseado em timestamp". Mantenha os objetos de negócios atuais na cópia operacional do banco de dados, mova os objetos de negócios históricos para um banco de dados de arquivo. Configure um ETL unidirecional do banco de dados atual para o de arquivo.
Comece copiando todo o seu BD para um desktop com bastante espaço de armazenamento. Então você tem duas maneiras concorrentes, escolha a que parecer mais fácil:
Agora você tem um arquivo e um banco de dados de trabalho. Copie o banco de dados de trabalho para sua plataforma de trabalho. E pense em ETL.
Há um ETL legal para sqlite como extensão: https://sqlite.org/sessionintro.html Ele permitiria que você criasse facilmente lotes com todas as novas alterações no banco de dados de trabalho para serem repetidas no arquivo. Mas a desvantagem é que você precisará atualizar o aplicativo cliente para habilitar e usar a extensão.
Outra maneira é fazer um aplicativo separado. Ele escanearia o banco de dados de trabalho em busca de objetos de negócios expirados, os extrairia em algum arquivo de transporte (geralmente json), excluiria esses objetos do banco de dados de trabalho e os limparia. Então você teria que mover os arquivos de transporte para o lado do arquivamento e carregá-los no banco de dados de arquivamento. Não é uma solução fácil, mas confiável, fácil de entender pelos clientes e pode ser implementada mesmo se você, por algum motivo, não conseguir modificar o aplicativo cliente.