将本地 HTML5DB (WebSQLStorage,SQLite)与服务器同步的最佳方式(双向同步)

我正在开发一个移动网络应用程序(为 iPhone 和 Android)与本地数据库(使用 html5网络存储) ,所以我的应用程序仍然可用时,用户离线。

这非常完美,但是我想在服务器上保存本地数据。所以我需要将本地数据库与服务器上的数据库同步。同步只能是一种方式,但在将来,我希望以两种方式(server <-> local DB)同步它。

这个要求看起来很普遍(或者将来在移动 web 应用程序中也会很普遍) ,但是我找不到这样的库。

我知道谷歌正在他们的移动网络应用程序(例如。我发现 WSPL 项目是一个谷歌项目,但是没有源代码可以下载。

如果我不能找到一个解决方案,我将创建一个库来做到这一点,因为单向同步看起来并不困难,但我不知道是否有其他的解决方案。

96060 次浏览
  • 我创建了一个名为 WebSqlSync的小 JS 库,用于将本地 WebSqlDB 与服务器(客户机 <-> 服务器)同步。非常容易使用和集成到代码中:

Https://github.com/orbitaloop/websqlsync

  • 开源项目 快速连接包含一个 JS 库,用于将本地 HTML5SQLiteDB 同步到服务器 DB (MySQL 或其他) :

Http://quickconnect.pbworks.com/using-enterprise-synchronization

要使用这个库,需要使用框架的 DataAccessObject 来访问数据库。它的工作原理是存储应用于 DB 的所有 SQL 请求(当然选择除外) ,并将它们发送到服务器。管理删除非常棒,但是如果您有大量更新,并且服务器需要使用相同的 SQL 语言,那么删除就有点繁重了。

  • 快速连接的另一个项目是本地 SQLite 同步(在 iOS 或 Mac OS 中使用 Objective C,在 Android 中使用 Java) :

Http://www.quickconnectfamily.org/qcdbsync/ (我认为它还存储了所有 SQL 请求的历史记录)

  • 我刚找到另一个很有前途的 JS 库: 坚持

Https://github.com/zefhemel/persistencejs

Js 是一个异步 Javascript 对象关系映射器库。你可以在浏览器中使用它,也可以在服务器上使用它(你可以在它们之间共享数据模型)。”

他们有一个数据库同步模块: Synch.js 的 DOC

(在客户端使用 HTML5DBSQLite 或 GoogleGears,在服务器端使用 MySQL)

  • 还有 推动。它看起来很容易使用(包含 php 文件) ,但是你必须在客户端使用 Mootools 框架:

Http://impel.simulacre.org/api/impel.intouch

  • Sencha 还有一个同步服务: 参茶。看起来不错,但它依赖于 Sencha Touch 框架:

Http://www.sencha.com/products/io/

我已经开发了一个通用的同步解决方案称为 WebSqlSync

它不依赖于任何框架。 在这里可以买到: Https://github.com/orbitaloop/websqlsync

README 文件的摘录:

WebSqlSync

将本地 WebSql 数据库(导航器中的 SQLite)自动同步到服务器。(2种方式同步: client <-> server)

非常容易集成到您现有的应用程序和非常容易使用(2个函数调用: initSync 和 syncNow)

用法

初始化

您需要初始化 lib (例如,在每次启动时)。

它将自动创建两个表(如果它们不存在,一个用于存储所有新的或修改的元素(table new _ elem) ,另一个用于存储上次同步的日期(table 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 和 Java 中有一些例子。同样,我们欢迎捐款。