2010-10-24 32 views
17

Necesito sincronizar mi base de datos SQL de Android con mi base de datos en el servidor en la nube, y hacerlo de forma bidireccional en un entorno multiusuario.android sqlite sincronización bidireccional sqlite

He encontrado e introducido la solución here pero me gustaría leer sobre una mejor solución/algoritmo.

Respuesta

1

Yo recomendaría enviar archivos db a su servidor y fusionarlos en el servidor. A continuación, envíe de nuevo db fusionado al cliente si es necesario. Su solución variará en función del algoritmo de resolución de conflictos y su esquema de base de datos. Pero aquí hay un ejemplo para el caso más simple:

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

Espero que pueda modificar el ejemplo para la fusión bidireccional.

+0

Podría ser una solución para la copia de seguridad en un entorno monouser. Pero para multiusuario no puede. Gracias de cualquier manera. – Juanin

+1

¿Por qué no? Puede tener una base de datos maestra en un servidor y fusionarla en base a solicitud por solicitud o en conjunto. ¿O necesitas sincronización en tiempo real entre bases de datos? En el caso, está hablando de replicación, lo cual es imposible porque necesita un 100% de tiempo en línea de todos los teléfonos de sus clientes. – cement

6

¿Se puede usar la base de datos Oracle como su base de datos del servidor?

Si es así, debe considerar Oracle Database Lite, que incluye una solución de sincronización completa que es compatible con SQLite y Android, y fue diseñada para entornos de usuarios múltiples.

Es compatible con sincronización automática, resolución avanzada de conflictos y múltiples modelos de sincronización. También es compatible con la implementación y administración de aplicaciones desde una consola de administración central, e incluso la administración de dispositivos.

Puede leer más sobre esto aquí: http://www.oracle.com/technetwork/database/database-lite/overview/index.html

Además, puede hacer clic en la pestaña de descarga para probarlo por ti mismo.

Eric

+0

Gracias Eric, pero estoy usando PostgreSQL sobre Ubuntu. Oracle es demasiado caro para este proyecto. – Juanin

+0

OK. Bueno, en cualquier caso, ¡buena suerte con su proyecto! –

0

Otra opción es usar litesync

Es una modificación de la librería SQLite para implementar la sincronización.

El uso de una topología en estrella abrimos la base de datos en el servidor como nodo primario utilizando un URI modificado, así:

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

Y en los dispositivos móviles que abrir la base de datos local usando:

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

La primera vez que la aplicación está abierta en el dispositivo (y en línea) descargará una copia nueva de la base de datos y desde ese punto podemos escribir en el db local incluso cuando el dispositivo está fuera de línea. Las nuevas transacciones se sincronizarán cuando el dispositivo vuelva a estar en línea.