Estou desenvolvendo um aplicativo da web móvel (para iPhone e Android) com um banco de dados local (usando o armazenamento da web html5) para que meu aplicativo ainda seja utilizável quando o usuário estiver offline.
Isso está funcionando perfeitamente, mas quero salvar os dados locais em um servidor. Então, eu preciso sincronizar o banco de dados local com um banco de dados em um servidor. A sincronização pode ser apenas de uma maneira, mas, no futuro, eu gostaria de sincronizá-la da mesma maneira (servidor <-> banco de dados local).
Esse requisito parece muito comum (ou será comum no futuro para aplicativos da web para dispositivos móveis), mas não consigo encontrar uma biblioteca fazendo isso.
Eu sei que o Google está fazendo isso em seu aplicativo Web móvel (por exemplo, gmail), e eu achei o projeto WSPL um projeto do Google, mas sem fonte para download.
Se não conseguir encontrar uma solução, criarei uma biblioteca para fazer isso, pois a sincronização unidirecional não parece difícil, mas me pergunto se há outras soluções.
Respostas:
https://github.com/orbitaloop/WebSqlSync
http://quickconnect.pbworks.com/Using-Enterprise-Synchronization
Para usar esta lib, você precisa usar o DataAccessObject da estrutura para acessar seu banco de dados. Ele funciona armazenando toda a solicitação SQL aplicada ao banco de dados (exceto selecionar, é claro) e enviando-as para o servidor. É ótimo gerenciar a exclusão, mas é um pouco pesado se você tiver muitas atualizações e o servidor precisar usar a mesma linguagem SQL ...
http://www.quickconnectfamily.org/qcdbsync/ (acho que também armazena o histórico de todas as solicitações SQL)
https://github.com/zefhemel/persistencejs
"persistence.js é uma biblioteca de mapeadores relacional a objetos Javascript assíncrona. Você pode usá-lo no navegador e também no servidor (e pode compartilhar modelos de dados entre eles)."
Eles têm um módulo de sincronização de banco de dados: DOC of persistence.synch.js
(funciona com SQLite DB do HTML5 ou Google Gears no cliente e MySQL no servidor)
http://impel.simulacre.org/api/Impel.inTouch
http://www.sencha.com/products/io/
fonte
Eu desenvolvi uma solução genérica de sincronização chamada WebSqlSync .
Não depende de nenhuma estrutura. Está disponível aqui: https://github.com/orbitaloop/WebSqlSync
Extração do arquivo README:
WebSqlSync
Sincronize automaticamente um banco de dados WebSql local (SQLite no navegador) para um servidor. (Sincronização bidirecional: cliente <-> servidor)
Muito fácil de integrar ao seu aplicativo existente e muito fácil de usar (duas funções para chamar: initSync e syncNow)
Uso
Inicializar
Você precisa inicializar a lib (em cada inicialização, por exemplo).
Ele criará automaticamente 2 tabelas (se ainda não existirem, uma para armazenar todos os elementos novos ou modificados (tabela new_elem) e outra para armazenar a data da última sincronização (tabela sync_info). Também criará gatilhos SQLite no para assistir a INSERT ou UPDATE nas tabelas que você deseja sincronizar (para inserir automaticamente os elementos modificados na tabela new_elem):
Onde TABLES_TO_SYNC é a lista da tabela que você deseja sincronizar com o servidor, por exemplo:
Sincronizar
Para iniciar a sincronização, você precisa chamar a função syncNow. Você pode chamá-lo a cada X segundos ou após algumas alterações, por exemplo:
E isso é tudo o que você precisa fazer no cliente. No lado do servidor, você precisará codificar sua própria solução (mas não é complicado). E há alguns exemplos em PHP e Java. Mais uma vez, contribuições são bem-vindas.
fonte