我正在使用本地数据库(使用html5 webstorage)开发移动网络应用程序(适用于iPhone和Android),因此当用户离线时我的应用程序仍然可用。
这很好用,但我想在服务器上保存本地数据。所以我需要将本地数据库与服务器上的数据库同步。同步只能是一种方式,但在将来,我想以两种方式同步它(服务器< - >本地数据库)。
此要求看起来非常普遍(或将来会在移动网络应用中很常见),但我找不到这样做的图书馆。
我知道谷歌正在他们的移动网络应用程序(例如gmail)中这样做,我发现WSPL project是一个谷歌项目,但没有下载源。
如果我找不到解决方案,我会创建一个库来做到这一点,因为单向同步看起来并不困难,但我想知道是否还有其他解决方案。
答案 0 :(得分:71)
https://github.com/orbitaloop/WebSqlSync
http://quickconnect.pbworks.com/Using-Enterprise-Synchronization
要使用此lib,您需要使用框架的DataAccessObject来访问您的数据库。它的工作原理是存储应用于数据库的所有SQL请求(当然除了选择),并将它们发送到服务器。管理删除很棒,但是如果你有很多更新,那么它有点重,服务器需要使用相同的SQL语言......
http://www.quickconnectfamily.org/qcdbsync/ (我认为它还存储了所有SQL请求的历史记录)
https://github.com/zefhemel/persistencejs
“persistence.js是一个异步Javascript对象关系映射器库。您可以在浏览器中使用它,也可以在服务器上使用它(并且您可以在它们之间共享数据模型)。” < / p>
他们有一个数据库同步模块:DOC of persistence.synch.js
(与客户端上的HTML5 DB SQLite或Google Gears以及服务器上的MySQL一起使用)
http://impel.simulacre.org/api/Impel.inTouch
答案 1 :(得分:18)
我开发了一个名为 WebSqlSync 的通用同步解决方案。
它不依赖于任何框架。 它在这里可用: https://github.com/orbitaloop/WebSqlSync
README文件的摘录:
自动将本地WebSql数据库(导航器中的SQLite)同步到服务器。 (双向同步:客户端&lt; - &gt;服务器)
非常容易集成到您现有的应用程序并且非常易于使用(2个函数可以调用:initSync和syncNow)
您需要初始化lib(例如,在每次启动时)。
它将自动创建2个表(如果它们不存在,一个用于存储所有新的或已修改的元素(表new_elem),另一个用于存储上次同步的日期(表sync_info)。它将还要创建SQLite触发器,以便在要同步的表上观察INSERT或UPDATE(以自动在new_elem表中插入修改后的元素):
DBSYNC.initSync(TABLES_TO_SYNC, webSqlDb, sync_info, 'http://www.myserver.com', callBackEndInit);
其中TABLES_TO_SYNC是您要与服务器同步的表的列表,例如:
TABLES_TO_SYNC = [
{tableName : 'table1', idName : 'the_id'},
{tableName : 'table2'} //if idName not specified, it will assume that it's "id"
];
要开始同步,您需要调用syncNow函数。您可以每隔X秒调用一次,或者在某些更改后调用它,例如:
DBSYNC.syncNow(callBackSyncProgress, function(result) {
if (result.syncOK === true) {
//Synchronized successfully
}
});
这就是你需要在客户端做的一切。在服务器端,您需要编写自己的解决方案(但它并不复杂)。并且有一些例子在PHP&amp; Java的。再次,欢迎捐款。