Pergunta

Em um aplicativo que incorpora o SQLite3 e usa um banco de dados de memória, é possível replicar o banco de dados entre duas instâncias em execução do aplicativo? Eu poderia fazer isso manualmente com um protocolo homebrew duplicando todos os meus acessos por banco de dados, mas parece algo que deve ser feito dentro da camada de banco de dados.

Foi útil?

Solução

Abordagem de força bruta: envie o comando ".dump" para criar uma representação de texto dos dados. Leia esses dados no segundo banco de dados. Não tenho certeza se você pode usar isso.

Se você precisar de uma atualização fina de granulação (enviando uma cópia de cada uma delas até a outra cópia), dê uma olhada sqlite3_update_hook

Mas como você planeja lidar com erros? Por exemplo, o que acontece quando a cópia do banco de dados no APP2 não pode fazer uma atualização por algum motivo?

Para resolver isso, mova o banco de dados para um processo de servidor e faça com que os dois aplicativos falem com ele.

Outras dicas

Fora da caixa, não. Há um pequeno número de opções de terceiros:

Sync Sync: https://ampliapps.com/sqlite-sync/ Este parece atraente porque pode se replicar para outros bancos de dados e também para o SQLite e não modifica o mecanismo SQLite. Eu não tentei ainda.

Litereplica: http://litereplica.io/ Uma única forma. Parece ter existido um pouco.

Litesync: http://litesync.io/ Replicação bidirecional. Muito novo, mas uma evolução da Litereplica tão provavelmente mais madura do que parece. Eu tentei um pouco isso e parece funcionar sem problemas, com alguns bugs que o desenvolvedor está olhando. Você deve usar o mecanismo SQLite modificado do desenvolvedor, que parece ser uma dependência preocupante. Você também não tem muito controle, por exemplo, não pode dizer replicar agora sem reabrir o banco de dados.

LSYNCD - Live Syncing (Mirror) daemon pode ser útil aqui. Ele usa o RSYNC para fazer replicação contínua no nível do arquivo.

Se você deseja replicação em um banco de dados na memória, você precisa olhar Berkeley DB (BDB). No entanto, o modelo de dados para o BDB é o dicionário de cordas, então você perde a flexibilidade do SQL. Além disso, possui uma licença de três cláusulas; portanto, se o seu projeto for comercial, você precisará obter licenças.

Não, não é porque o escopo do projeto está sendo um banco de dados simples em processo. Mas como o banco de dados é apenas um arquivo único, você pode escrever seu próprio script de replicação com base em operações de cópia de arquivo simples, RSYNC ou algo semelhante.

Se você realmente deseja um tipo de rdbm Sqlitedbms.

Uníssono? O melhor que você poderia fazer foi o Ora Hot, porque o sqlite db em um arquivo monolítico. Você não poderia redonde-robin entre as duas "instâncias". O Hot Spare não é ruim, você simplesmente pega o outro aplicativo+dB sem muita confusão, compara-se com o MySQL Master-Slave ou o Active-Passive, onde há alguma intervenção manual que não é fácil. A replicação do MySQL passa em torno do SQL, não apenas difere como uníssono/rsync. Mas com o uníssono você tem mestre-mestre.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top