2010-10-24 27 views
17

Ho bisogno di sincronizzare il mio DB SQLite Android con il mio DB server cloud e farlo in modo bidirezionale in un ambiente multiutente.sqlite android sqlite sincronizzazione sqlite

Ho trovato e introduzione alla soluzione here ma mi piacerebbe leggere su una soluzione/algoritmo migliore.

risposta

1

Si consiglia di inviare il file db al server e fare l'unione sul lato server. Quindi inviare il db unito al client se necessario. La soluzione può variare in base all'algoritmo di risoluzione dei conflitti e allo schema del database. Ma qui è per esempio il caso più semplice:

sqlite> attach 'client.db3' as ClientDBtoMerge;   
sqlite> insert into TableName select * from ClientDBtoMerge.TableName; 
sqlite> detach database ClientDBtoMerge; 

spero che tu sia in grado di modificare ad esempio per fusione bidirezionale.

+0

Potrebbe essere una soluzione per il backup in un ambiente monoutente. Ma per multiutente non è possibile. Grazie comunque. – Juanin

+1

Perché no? È possibile avere un database master su un server e unirlo in base alla richiesta per richiesta o tutti insieme. O hai bisogno di sincronizzazione in tempo reale tra i database? Nel caso si stia parlando di replicazione impossibile perché è necessario il 100% del tempo online di tutti i telefoni client. – cement

6

È possibile utilizzare Oracle Database come database lato server?

In tal caso, è necessario prendere in considerazione Oracle Database Lite, che include una soluzione di sincronizzazione completa compatibile con SQLite e Android ed è stato progettato per ambienti multiutente.

Supporta sincronizzazione automatica, risoluzione avanzata dei conflitti e più modelli di sincronizzazione. Supporta inoltre la distribuzione e la gestione di app da una console di gestione centrale e persino la gestione dei dispositivi.

Si può leggere di più su di esso qui: http://www.oracle.com/technetwork/database/database-lite/overview/index.html

Inoltre, è possibile fare clic sulla scheda Download di provarlo per voi stessi.

Eric

+0

Grazie Eric, ma sto usando PostgreSQL su Ubuntu. Oracle è troppo costoso per questo progetto. – Juanin

+0

OK. Bene, in ogni caso, buona fortuna per il tuo progetto! –

0

Un'altra opzione sta usando litesync

Si tratta di una modifica della libreria SQLite per implementare la sincronizzazione.

Utilizzando una topologia a stella apriamo il database nel server come nodo primario utilizzando un URI modificato, in questo modo:

"file:/path/to/app.db?node=primary&bind=tcp://0.0.0.0:port" 

E sui dispositivi mobili che aprire il database locale utilizzando:

"file:/path/to/app.db?node=secondary&connect=tcp://server:port" 

La prima volta che l'app è aperta sul dispositivo (e on-line) scarica una nuova copia del database e da quel punto possiamo scrivere sul db locale anche quando il dispositivo è offline. Le nuove transazioni saranno sincronizzate quando il dispositivo sarà di nuovo online.