如何将离线HTML5 Web数据库与集中式数据库同步

14
我想在HTML5(iPad) Web 应用程序中完成以下操作:
  • 上传数据到在线数据库(如果我要在类似SQLite的东西中构建在线数据库,则该数据库可能小于50Mb)
  • 从在线数据库中提取子集或完整副本到脱机 Web 数据库
  • (离开3G网络覆盖范围)
  • 对下载的数据执行一堆分析型计算
  • 将我的计算参数保存到脱机 Web 数据库
  • 重复以上步骤,为多个脱机分析型计算会话保存不同的参数集,时间跨度较长
  • (回到有3G网络覆盖范围的区域)
  • 将保存的参数从我的脱机 Web 数据库与中央在线数据库同步

我对最后一步感到疑惑...

我正在尝试查找是否可以将脱机 Web 数据库与中央数据库同步的信息,但找不到任何涵盖这个主题的内容。这是否可行?如果是这样,请提供有关它的链接,或描述足以实现我的特定应用程序的工作原理。

谢谢您提前提供的帮助

4个回答

6

我并没有专门使用HTML5本地数据库,但我曾经使用过需要离线更新和重新同步到中央数据存储的移动设备。

无论数据集是在服务器上还是在离线客户端上创建的,我都确保它的主键是UUID。我还确保每次更新记录时都会记录时间戳。

我还注意到了离线客户端上次同步的时间。

因此,在重新同步到中央数据库时,我首先查询离线客户端以查找自上次同步以来已更改的记录。然后,我查询中央数据库以确定这些记录中是否有任何记录自上次同步以来发生了更改。

如果它们在中央数据库上没有更改,我将使用离线客户端的数据进行更新。如果自上次同步以来服务器上的记录发生了更改,则将其更新到客户端。

如果UUID在中央服务器上不存在但在离线客户端上存在,则插入它,反之亦然。

为了清除记录,我创建了一个“清除”列,并在运行同步查询时从每个数据库中删除该记录(或根据应用程序要求将其标记为非活动状态)。

如果两条记录自上次更新以来都发生了更改,我必须依靠用户输入来协调或规则来指定哪条记录“获胜”。

我通常不信任内置的数据库导入功能,除非我将其导入到完全空的数据库中。


1
步骤:
  1. 在本地数据库中保留更改列表。
  2. 连接到远程数据库时,检查自上次同步以来是否有任何更改。
  3. 如果远程端的更改与本地更改冲突,则告知用户该怎么做。
  4. 对于所有其他更改,请继续同步:
    1. 下载所有在线更改,这些更改没有在本地更改过。
    2. 上传所有本地更改,这些更改没有在远程更改过。

只要一侧有数据转换器,此方法实际上可以在任何数据库组合上运行。


0

从我访问过的几个网站来看,只要您在使用SQLite作为服务器数据库,这应该是可能的。

HTML5 Web数据库也使用SQLite(尽管并非所有浏览器都支持它,W3C似乎已经放弃了对它的支持)

所以...

如果您使用.dump命令导出数据,然后使用$sqllite mydb.db < mydump.sql语法将数据导入Web数据库,您应该可以通过一些php或java后端的调整来实现此目的?

然后,当您想要将“离线”数据同步到服务器时,只需从Web数据库转储到dump.sql文件,然后导入到服务器数据库即可

此网站解释了如何导出和导入SQLite转储

来源:转储和恢复SQLite DB


如果您尝试了这个方法并且成功了,或者找到了其他解决方案,请告诉我。我是通过您的帖子才发现了这个HTML5 Web数据库功能,非常有兴趣在将来的项目中尝试它。 - ScottC

0

HTML5支持浏览器数据库SQLite,我已经在Mozilla和Chrome中尝试过,效果很好。 我还有一个需求,需要一些离线表单,用户输入数据并点击保存,它会保存在本地浏览器数据库中,稍后当用户与服务器同步或上线时,他可以点击同步按钮,实际上从浏览器数据库或任何其他数据源同步数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接